Приходится переходить на freeradius и появился затык:
запрос на авторизацию с передачей радиус параметров из UTM5.
насколько я понимаю его надо пихать в: authorize_reply_query
Не подскажете ли "правильный" запросик?
пихать надо шейпер (lcp:interface-config#10=rate-limit input 9216000 550000 650000 conform-action transmit exceed-action drop) input и output.
Заранее спасибо.
sql запрос для freeradius
Re: sql запрос для freeradius
Давай расскажу как у нас сделано:Vadislaus писал(а):Приходится переходить на freeradius и появился затык:
запрос на авторизацию с передачей радиус параметров из UTM5.
насколько я понимаю его надо пихать в: authorize_reply_query
Не подскажете ли "правильный" запросик?
пихать надо шейпер (lcp:interface-config#10=rate-limit input 9216000 550000 650000 conform-action transmit exceed-action drop) input и output.
Заранее спасибо.
в таблицу tariffs добавлено два поля:
`unlim` enum('0','K1','K2','K3','K05','256') NOT NULL default '0',
`lan` enum('0','1') NOT NULL default '1',
lan это лишь признак того что в этот тариф включена локальная сеть, можно не обращать внимания..
далее создана табличка:
Код: Выделить всё
CREATE TABLE IF NOT EXISTS `radius_attr` (
`id` smallint(2) NOT NULL auto_increment,
`groups` enum('0','64','128','256','512','1024','1M','K1','K2','K3','K05','av','balance','test','lan','greyip','dft') NOT NULL default '0',
`Attribute` char(255) NOT NULL,
`op` char(2) NOT NULL default ':=',
`val` char(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `groups` (`groups`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
(3, 'av', 'Cisco-AVPair', '==', 'ip:addr-pool=1'),
(4, 'av', 'Session-Timeout', ':=', '180'),
(5, 'balance', 'Cisco-AVPair', '==', 'ip:addr-pool=2'),
(6, 'balance', 'Session-Timeout', ':=', '900'),
(13, 'dft', 'Filter-Id', ':=', '106.out'),
(18, '256', 'Cisco-AVPair', '==', 'lcp:interface-config=service-policy output unlim256K'),
(20, '512', 'Cisco-AVPair', '==', 'lcp:interface-config=rate-limit output access-group 117 512000 96000 192000 conform-action transmit exceed-action drop'),
(24, 'balance', 'Cisco-AVPair', '==', 'lcp:interface-config=ip policy route-map net172-proxy'),
(25, 'av', 'Cisco-AVPair', '==', 'lcp:interface-config=ip policy route-map net172-proxy'),
(45, 'greyip', 'Session-Timeout', ':=', '120'),
(46, 'greyip', 'Cisco-AVPair', '==', 'ip:addr-pool=3'),
(47, 'greyip', 'Cisco-AVPair', '==', 'lcp:interface-config=ip policy route-map net172-proxy'),
(48, '0', 'Cisco-AVPair', '==', 'lcp:interface-config=ip flow egress');
сами запросы для фрирадиуса были тут чуть раньше.
для таких как я, чтоб не надо было искать по всему форуму да и время есть и место - воп запросы многоуважаемого магнума с последующей оптимизацией дс'а
Код: Выделить всё
authorize_reply_query
Код:
SELECT g1.ip_group_id, g1.uname, r.Attribute, r.val AS a, r.op
FROM ip_groups g1, iptraffic_service_links i, service_links s, account_tariff_link a, tariffs t, radius_attr r
WHERE ( g1.uname = 'user'
AND g1.is_deleted = '0'
AND i.ip_group_id = g1.ip_group_id
AND i.is_deleted = '0'
AND s.id = i.id
AND s.is_deleted = '0'
AND a.id = s.tariff_link_id
AND a.is_deleted = '0'
AND t.id = a.tariff_id )
AND (( r.groups = t.unlim
AND ( g1.ab = '' OR g1.ab IS NULL ) AND ( g1.av != '2' OR g1.av IS NULL ))
OR (t.lan = '1'
AND r.groups like 'dft' AND ( g1.ab = '' OR g1.ab IS NULL ) AND ( g1.av != '2' OR g1.av IS NULL ))
OR (r.groups = 'av'
AND ( g1.ab = '' OR g1.ab IS NULL ) AND g1.av = '1' )
OR (r.groups = 'balance'
AND g1.ab != ''))
UNION SELECT g1.ip_group_id, g1.uname, r.Attribute, r.val AS a, r.op
FROM ip_groups g1, radius_attr r
WHERE g1.uname = 'user'
AND g1.is_deleted = '0'
AND r.groups = g1.radgroup
UNION SELECT g1.ip_group_id, g1.uname, r.Attribute, r.val AS a, r.op
FROM ip_groups g1
LEFT JOIN ip_groups g2
ON ( g1.rg = g2.rg
AND g2.ip = if( inet_aton( '10.1.1.6' ) <=2147483648, inet_aton( '10.1.1.6' ) , inet_aton( '10.1.1.6' ) - 0x100000000 )
AND g2.is_deleted = '0' )
LEFT JOIN ip_groups g3
ON ( g3.ip = if( inet_aton( '10.1.1.6' ) <=2147483648, inet_aton( '10.1.1.6' ) , inet_aton( '10.1.1.6' ) - 0x100000000 )
AND g3.freevpn = '1' AND g3.is_deleted = '0' ) , radius_attr r
WHERE g1.uname = 'user'
AND g1.is_deleted = '0'
AND ( g1.freevpn = '' OR g1.freevpn IS NULL )
AND ( g1.ab = '' OR g1.ab IS NULL )
AND ( g1.av != '2' OR g1.av IS NULL )
AND ( g1.freevpn = '' OR g1.freevpn IS NULL )
AND ( g3.freevpn = '' OR g3.freevpn IS NULL )
AND g2.ip IS NULL
AND r.groups = 'greyip'
UNION SELECT g1.ip_group_id, g1.uname, 'Framed-IP-Address', inet_ntoa( g1.ip & 0xFFFFFFFF ) AS a, ':='
FROM ip_groups g1
LEFT JOIN ip_groups g2
ON ( g1.rg = g2.rg
AND g2.ip = if( inet_aton( '10.1.1.6' ) <=2147483648, inet_aton( '10.1.1.6' ) , inet_aton( '10.1.1.6' ) - 0x100000000 )
AND g2.is_deleted = '0' )
LEFT JOIN ip_groups g3
ON ( g3.ip = if( inet_aton( '10.1.1.6' ) <=2147483648, inet_aton( '10.1.1.6' ) , inet_aton( '10.1.1.6' ) - 0x100000000 )
AND g3.freevpn = '1'
AND g3.is_deleted = '0' )
WHERE g1.uname = 'user'
AND g1.is_deleted = '0'
AND ( g1.ab = '' OR g1.ab IS NULL ) AND ( g1.av = '' OR g1.av IS NULL )
AND ( g2.id IS NOT NULL OR g1.freevpn = '1' OR g3.ip IS NOT NULL )
AND ( g1.av IS NULL OR g1.av != '2' )
authorize_check_query
Код:
SELECT i.ip_group_id, i.uname, 'Password', i.upass, ':='
FROM ip_groups i
WHERE i.uname = 'user'
AND i.is_deleted = '0'
AND ( i.av IS NULL OR i.av != '2' )
AND 'user' != ''
UNION SELECT '1000', 'user', 'Simultaneous-Use', '1', ':=' FROM ip_groups WHERE uname='user';