SQL запрос для freeradius

Технические вопросы по UTM 5.0
Ответить
drag0mir
Сообщения: 64
Зарегистрирован: Сб ноя 24, 2007 13:46
Откуда: Нижний Новгород

SQL запрос для freeradius

Сообщение drag0mir »

Подскажите пожалуйста как сделать чтоб при авторизации через vpn через freeradius выдавался виртуальный ip указанный в биллинге.
Тут на форуме были примеры запросов.
authorize_check_query="SELECT ip_groups.ip_group_id, ip_groups.uname, 'Password', \
ip_groups.upass, ':=' FROM UTM5.ip_groups, UTM5.iptraffic_service_links, UTM5.service_links,
UTM5.accounts WHERE ip_groups.uname = '%{SQL-User-Name}' AND ip_groups.is_deleted='0' \
AND iptraffic_service_links.is_deleted='0' AND service_links.is_deleted='0' AND \
accounts.is_deleted='0' AND accounts.is_blocked='0' AND \
ip_groups.ip_group_id=iptraffic_service_links.ip_group_id AND \
iptraffic_service_links.id=service_links.id AND service_links.account_id=accounts.id"


authorize_reply_query="SELECT ip_group_id, uname, 'Framed-IP-Address', \
inet_ntoa(ip_groups.ip & 0xFFFFFFFF) AS a, ':=' FROM UTM5.ip_groups \
WHERE uname='%{SQL-User-Name}' AND is_deleted='0' \
AND av='' UNION SELECT ip_group_id, uname, 'Auth-Type', 'Reject' as a, ':=' \
FROM ip_groups WHERE uname='%{SQL-User-Name}' AND is_deleted='0' AND av='1'"
Я их попробовал, всё авторизует прекрасно, но при этом выдаются адреса совсем другие.
Вот мой лог запросов к базе при авторизации клиентов.

080325 15:18:34 31 Query SELECT ip_groups.ip_group_id, ip_groups.uname, 'Password', ip_groups.upass, ':=' FROM UTM5.ip_groups, UTM5.iptraffic_service_links, UTM5.service_links, UTM5.accounts WHERE ip_groups.uname = 'test' AND ip_groups.is_deleted='0' AND iptraffic_service_links.is_deleted='0' AND service_links.is_deleted='0' AND accounts.is_deleted='0' AND accounts.is_blocked='0' AND ip_groups.ip_group_id=iptraffic_service_links.ip_group_id AND iptraffic_service_links.id=service_links.id AND service_links.account_id=accounts.id

31 Query SELECT ip_group_id, uname, 'Framed-IP-Address', inet_ntoa(ip_groups.ip & 0xFFFFFFFF) AS a, ':=' FROM UTM5.ip_groups WHERE uname='test' AND is_deleted='0' AND av='' UNION SELECT ip_group_id, uname, 'Auth-Type', 'Reject' as a, ':=' FROM ip_groups WHERE uname='test' AND is_deleted='0' AND av='1'

30 Query INSERT into accounts (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortId, NASPortType, AcctStartTime, AcctStopTime, AcctSessionTime, AcctAuthentic, ConnectInfo_start, ConnectInfo_stop, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, AcctTerminateCause, ServiceType, FramedProtocol, FramedIPAddress, AcctStartDelay, AcctStopDelay) values('47E8ED9A1CFD00', '808a705f83fbab70', 'test', '', '192.168.1.4', '0', 'Async', '2008-03-25 15:18:34', '0', '0', 'RADIUS', '', '', '0', '0', '', '5.136.214.204', '', 'Framed-User', 'PPP', '192.168.1.1', '0', '0')

30 Query UPDATE accounts SET AcctStartTime = '2008-03-25 15:18:34', AcctStartDelay = '0', ConnectInfo_start = '' WHERE AcctSessionId = '47E8ED9A1CFD00' AND UserName = 'test' AND NASIPAddress = '192.168.1.4'

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Re: SQL запрос для freeradius

Сообщение Magnum72 »

drag0mir писал(а):Подскажите пожалуйста как сделать чтоб при авторизации через vpn через freeradius выдавался виртуальный ip указанный в биллинге.
Тут на форуме были примеры запросов.
authorize_check_query="SELECT ip_groups.ip_group_id, ip_groups.uname, 'Password', \
ip_groups.upass, ':=' FROM UTM5.ip_groups, UTM5.iptraffic_service_links, UTM5.service_links,
UTM5.accounts WHERE ip_groups.uname = '%{SQL-User-Name}' AND ip_groups.is_deleted='0' \
AND iptraffic_service_links.is_deleted='0' AND service_links.is_deleted='0' AND \
accounts.is_deleted='0' AND accounts.is_blocked='0' AND \
ip_groups.ip_group_id=iptraffic_service_links.ip_group_id AND \
iptraffic_service_links.id=service_links.id AND service_links.account_id=accounts.id"


authorize_reply_query="SELECT ip_group_id, uname, 'Framed-IP-Address', \
inet_ntoa(ip_groups.ip & 0xFFFFFFFF) AS a, ':=' FROM UTM5.ip_groups \
WHERE uname='%{SQL-User-Name}' AND is_deleted='0' \
AND av='' UNION SELECT ip_group_id, uname, 'Auth-Type', 'Reject' as a, ':=' \
FROM ip_groups WHERE uname='%{SQL-User-Name}' AND is_deleted='0' AND av='1'"
Я их попробовал, всё авторизует прекрасно, но при этом выдаются адреса совсем другие.
Вот мой лог запросов к базе при авторизации клиентов.

080325 15:18:34 31 Query SELECT ip_groups.ip_group_id, ip_groups.uname, 'Password', ip_groups.upass, ':=' FROM UTM5.ip_groups, UTM5.iptraffic_service_links, UTM5.service_links, UTM5.accounts WHERE ip_groups.uname = 'test' AND ip_groups.is_deleted='0' AND iptraffic_service_links.is_deleted='0' AND service_links.is_deleted='0' AND accounts.is_deleted='0' AND accounts.is_blocked='0' AND ip_groups.ip_group_id=iptraffic_service_links.ip_group_id AND iptraffic_service_links.id=service_links.id AND service_links.account_id=accounts.id

31 Query SELECT ip_group_id, uname, 'Framed-IP-Address', inet_ntoa(ip_groups.ip & 0xFFFFFFFF) AS a, ':=' FROM UTM5.ip_groups WHERE uname='test' AND is_deleted='0' AND av='' UNION SELECT ip_group_id, uname, 'Auth-Type', 'Reject' as a, ':=' FROM ip_groups WHERE uname='test' AND is_deleted='0' AND av='1'

30 Query INSERT into accounts (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortId, NASPortType, AcctStartTime, AcctStopTime, AcctSessionTime, AcctAuthentic, ConnectInfo_start, ConnectInfo_stop, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, AcctTerminateCause, ServiceType, FramedProtocol, FramedIPAddress, AcctStartDelay, AcctStopDelay) values('47E8ED9A1CFD00', '808a705f83fbab70', 'test', '', '192.168.1.4', '0', 'Async', '2008-03-25 15:18:34', '0', '0', 'RADIUS', '', '', '0', '0', '', '5.136.214.204', '', 'Framed-User', 'PPP', '192.168.1.1', '0', '0')

30 Query UPDATE accounts SET AcctStartTime = '2008-03-25 15:18:34', AcctStartDelay = '0', ConnectInfo_start = '' WHERE AcctSessionId = '47E8ED9A1CFD00' AND UserName = 'test' AND NASIPAddress = '192.168.1.4'

Убери из запроса все упоминания об av
это самодельное поле в табличке ip_groups

drag0mir
Сообщения: 64
Зарегистрирован: Сб ноя 24, 2007 13:46
Откуда: Нижний Новгород

Сообщение drag0mir »

Большое спасибо! всё заработало.
Ещё бы хотелось чтоб он рвал сессию когда деньги заканчиваются,
такой возможно?

lancelot
Сообщения: 248
Зарегистрирован: Вс янв 23, 2005 16:28

Сообщение lancelot »

+1 тоже интересно

Аватара пользователя
stmw00d00
Сообщения: 51
Зарегистрирован: Пт ноя 02, 2007 16:18
Контактная информация:

Сообщение stmw00d00 »

У меня таким образом:
freeradius на одной машине (linux) с биллингом + pptp
Правила файрвола
Все пользователи = 1
Изменение типа блокировки = sh /netup/utm5/killvpn.sh "IP_LIST"

cat /netup/utm5/killvpn.sh

Код: Выделить всё

#!/bin/sh     
AWK=/bin/awk 
CAT=/bin/cat 
GREP=/bin/grep  
KILL=/bin/kill 
IP=${1}
VPN=`echo $IP|tr / " "|tr ";" " "|awk {'print $(NF-1)'}`
PPP_ID=`/sbin/route -n|grep "$VPN  "|awk {'print $8'}` 
PID_FILE="/var/run/$PPP_ID.pid"
PPP_PID=`$CAT $PID_FILE` 

$KILL $PPP_PID

lancelot
Сообщения: 248
Зарегистрирован: Вс янв 23, 2005 16:28

Сообщение lancelot »

А как разрывать сесси если будет стоять Cisco 7204VXR-NPE-G1 Bundle

bear
Сообщения: 498
Зарегистрирован: Чт ноя 15, 2007 11:53

Сообщение bear »

по rsh
например както так
rsh $CISCO_IP -l utm clear vpdn tunnel pptp id $TUN_PID > /dev/null

$TUN_PID получаем след образом
rsh $CISCO_IP -l utm sh vpdn session stat | grep $USERLOGIN | awk '{print $3}'

изменение типа блокировки = /netup/utm5/cos/drop_session.sh ULOGIN

Код: Выделить всё

TUN_PID=`rsh $CISCO_IP -l utm sh vpdn session stat | grep $USERLOGIN | awk '{print $3}'`
if [ "$TUN_PID" ]; then
rsh $CISCO_IP -l utm clear vpdn tunnel pptp id $TUN_PID > /dev/null
echo "$DATE $USERLOGIN EMERGENCY tunnel $TUN_PID closed in $CISCO_IP!" >> /var/log/utm5/close-vpn.log
fi 
но лучше все это делать по SNMP ибо скрипты при нагруженных цисках начинают споктыкатся(когдаж у меня руки дойдут до этого.... :? )

Ответить