sql запрос для freeradius

Технические вопросы по UTM 5.0
Ответить
Vadislaus
Сообщения: 39
Зарегистрирован: Чт окт 12, 2006 12:20

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.

Заранее спасибо.

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

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

Сообщение Magnum72 »

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');

сами запросы для фрирадиуса были тут чуть раньше.

solomon
Сообщения: 316
Зарегистрирован: Вт мар 16, 2010 08:39

Сообщение solomon »

для таких как я, чтоб не надо было искать по всему форуму да и время есть и место - воп запросы многоуважаемого магнума с последующей оптимизацией дс'а

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

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&#40; inet_aton&#40; '10.1.1.6' &#41; <=2147483648, inet_aton&#40; '10.1.1.6' &#41; , inet_aton&#40; '10.1.1.6' &#41; - 0x100000000 &#41; 
            AND g2.is_deleted = '0' &#41; 
    LEFT JOIN ip_groups g3 
        ON &#40; g3.ip = if&#40; inet_aton&#40; '10.1.1.6' &#41; <=2147483648, inet_aton&#40; '10.1.1.6' &#41; , inet_aton&#40; '10.1.1.6' &#41; - 0x100000000 &#41; 
            AND g3.freevpn = '1'   AND g3.is_deleted = '0' &#41; , radius_attr r 
    WHERE g1.uname = 'user' 
        AND g1.is_deleted = '0' 
        AND &#40; g1.freevpn = '' OR g1.freevpn IS NULL  &#41; 
        AND &#40; g1.ab = '' OR g1.ab IS NULL  &#41; 
        AND &#40; g1.av != '2' OR g1.av IS NULL  &#41; 
        AND &#40; g1.freevpn = '' OR g1.freevpn IS NULL  &#41; 
        AND &#40; g3.freevpn = '' OR g3.freevpn IS NULL  &#41; 
        AND g2.ip IS NULL 
        AND r.groups = 'greyip' 
UNION SELECT g1.ip_group_id, g1.uname, 'Framed-IP-Address', inet_ntoa&#40; g1.ip & 0xFFFFFFFF &#41; AS a, '&#58;=' 
    FROM ip_groups g1 
    LEFT JOIN ip_groups g2 
        ON &#40; g1.rg = g2.rg 
            AND g2.ip = if&#40; inet_aton&#40; '10.1.1.6' &#41; <=2147483648, inet_aton&#40; '10.1.1.6' &#41; , inet_aton&#40; '10.1.1.6' &#41; - 0x100000000 &#41; 
            AND g2.is_deleted = '0' &#41; 
    LEFT JOIN ip_groups g3 
        ON &#40; g3.ip = if&#40; inet_aton&#40; '10.1.1.6' &#41; <=2147483648, inet_aton&#40; '10.1.1.6' &#41; , inet_aton&#40; '10.1.1.6' &#41; - 0x100000000 &#41; 
            AND g3.freevpn = '1' 
            AND g3.is_deleted = '0' &#41; 
    WHERE g1.uname = 'user' 
        AND g1.is_deleted = '0' 
        AND &#40; g1.ab = '' OR g1.ab IS NULL  &#41;  AND &#40; g1.av = '' OR g1.av IS NULL  &#41; 
        AND &#40; g2.id IS NOT NULL  OR g1.freevpn = '1' OR g3.ip IS NOT NULL  &#41; 
        AND &#40; g1.av IS NULL  OR g1.av != '2' &#41;

authorize_check_query
Код&#58;
SELECT i.ip_group_id, i.uname, 'Password', i.upass, '&#58;=' 
    FROM ip_groups i 
    WHERE i.uname = 'user' 
        AND i.is_deleted = '0' 
        AND &#40; i.av IS NULL  OR i.av != '2' &#41; 
        AND 'user' != '' 
UNION SELECT '1000', 'user', 'Simultaneous-Use', '1', '&#58;=' FROM ip_groups WHERE uname='user';

Ответить