Настройка Freeradius

Технические вопросы по UTM 5.0
Avdoshkin
Сообщения: 156
Зарегистрирован: Вт май 10, 2005 19:28
Откуда: Ачинск
Контактная информация:

Сообщение Avdoshkin »

Так же как и с предыдущими update? Сроки хоть небольшие обозначили. Мы тоже планируем свои задачи по реализации.

Shiva
Сообщения: 131
Зарегистрирован: Пт авг 28, 2009 12:39
Откуда: Россия, Тверь

Сообщение Shiva »

adeep писал(а):Shiva, предложите вариант как авторизовать абонента по ip адресу, который ему выдал модуль dhcp?
Не совсем понял, DHCP же уже авторизует абонента... Есть RADIUS, который всё делает... Ну а так, есть события в биллинге и CoA на Cisco.

Аватара пользователя
TiRider
Сообщения: 568
Зарегистрирован: Сб июн 07, 2008 12:43

Сообщение TiRider »

Собственно подниму тему.

Сейчас пытаемся на Freeradius 3 + ISG, сделать связку, чтобы все дело работало. Кто чем может помочь? :)
В частности стандартными средствами UTM5_DHCP сделали выдачу ip-адреса. Клиент цепляется и получает ip, но нет авторизации и соответственно навешивания политик и сервисов.

У кого есть запросы в базу данных, поделитесь, authorize_check_query, authorize_reply_query и тп. и пд.

Shiva, как у вас продвигается реализация на стандартном радиусе? А то я вам в ICQ писал, вы не ответили...

adeep, как у Вас обстоят дела с данным делом?

Уточню у уважаемого Магнума, нет ли у вас какой-то примерной реализации, вы ведь используете FR. Предполагаю, что у вас ISG :)

Shiva
Сообщения: 131
Зарегистрирован: Пт авг 28, 2009 12:39
Откуда: Россия, Тверь

Сообщение Shiva »

А я не пользуюсь ей больше... Пока в работе, чуть позже выложу результат, как отладим.

Аватара пользователя
TiRider
Сообщения: 568
Зарегистрирован: Сб июн 07, 2008 12:43

Сообщение TiRider »

Shiva писал(а):А я не пользуюсь ей больше... Пока в работе, чуть позже выложу результат, как отладим.
Можешь мне хоть что-нибудь прислать на почту? :)
А то уже голову сломали... :?

Аватара пользователя
TiRider
Сообщения: 568
Зарегистрирован: Сб июн 07, 2008 12:43

Сообщение TiRider »

Собственно, что начали мы делать. Буду кидать описание и конфиги, чтобы люди в дальнейшем не парили себе мозги! У нас FreeBSD 9.3 x64, установили из портов freeradius3-3.0.4 (FR) с зависимостями (он сам их вытягивает). Параметр Experemental не выбирали.
Предполагаем, что настройку UTM5, MySQL и еще , что вам нужно, вы сделали, а значит и база UTM5 уже создана.

Настройка параметров самого FR и запуска:
1. radiusd.conf (основные настройки FR)
2. clients.conf (с какого железа можно отправлять запросы на FR либо, локально указанные клиенты в этом же файле)
3. sql.conf (параметры подключения к базе данных MySQL)
4. sites-enable/default (параметры "по умолчанию")
5. mods-config/sql/main/mysql/queries.conf (собственно сами запросы)

6. создаем отдельную базу freeradius в MySQL заливая туда schema.sql и setup.sql предварительно исправив, если требуется.

radiusd.conf

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

max_request_time = 30
cleanup_delay = 5
max_requests = 1024
hostname_lookups = no

$INCLUDE clients.conf

modules {
        $INCLUDE mods-enabled/
        $INCLUDE mods-available/perl
        $INCLUDE sql.conf
}

$INCLUDE sites-enabled/
clients.conf

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

client localhost { #локальный хост на котором установлен FreeRadius
        ipaddr = 127.0.0.1
        proto = *
        secret = radius
        require_message_authenticator = yes
        shortname = localhost
        nas_type = other       
        limit {
                max_connections = 0
                lifetime = 0
                idle_timeout = 30
        }
}

client 91.хх.хх.хх { #балалайка вида Cisco (в нашем случае ASR1002)
        ipaddr = 91.хх.хх.хх
        require_message_authenticator = no
        secret = SuperSecret
        shortname = ASR1002
        nas_type = cisco
}
sql.conf

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

sql {
        driver = "rlm_sql_mysql"
        server = "127.0.0.1"
        port = 3306
        login = "radius"
        password = "radius"
        radius_db = "UTM5"
        
        sqltrace = no
        num_sql_socks = 8
        connect_failure_retry_delay = 15
        lifetime = 3600
        max_queries = 1024

        client_table = "nas"

        $INCLUDE mods-config/sql/main/mysql/queries.conf

}
sites-enable/default

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

listen {
        type = auth
        ipaddr = 127.0.0.1
        port = 1812
        limit {
              max_connections = 0
              lifetime = 0
              idle_timeout = 30
        }
}

listen {
        type = acct
        ipaddr = 127.0.0.1
        port = 1813
        limit {
                idle_timeout = 30
                lifetime = 0
                max_connections = 0
        }
}

authorize {
        chap
        pap
        mschap
        eap {
                ok = return
        }
        files
        digest
        sql
        unix
}

authenticate {
        Auth-Type PAP {
                pap
        }
        Auth-Type CHAP {
                chap
        }
        Auth-Type MS-CHAP {
                mschap
        }
        eap
}

accounting {
        detail
        sql
}
}
queries.conf

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

sql_user_name = "%{User-Name}"

#nas_query = ""

authorize_check_query="SELECT ip_groups.ip_group_id, ip_groups.uname,'User-Password',ip_groups.upass,':=', max(recv_date) FROM UTM5.ip_groups, UTM5.iptraffic_service_links, UTM5.service_links, UTM5.accounts, UTM5.dhs_sessions_log 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 AND dhs_sessions_log.Acct_Status_Type=2 AND dhs_sessions_log.User_Name='%{SQL-User-Name}' UNION SELECT ip_groups.ip_group_id, ip_groups.uname,'Simultaneous-Use','1',':=', max(recv_date) FROM UTM5.ip_groups, UTM5.iptraffic_service_links, UTM5.service_links, UTM5.accounts, UTM5.dhs_sessions_log 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 AND dhs_sessions_log.Acct_Status_Type=2 AND dhs_sessions_log.User_Name='%{SQL-User-Name}'"

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' UNION SELECT ip_group_id, uname, 'Acct-Interim-Interval', '60' as a, '=' FROM ip_groups WHERE uname = '%{SQL-User-Name}' AND is_deleted='0'"

simul_count_query = "SELECT COUNT(*) FROM dhs_sessions_log WHERE User_Name='%{SQL-User-Name}' AND (Acct_Status_Type = '3' OR Acct_Status_Type = '1') "

simul_verify_query = "SELECT COUNT(*) FROM dhs_sessions_log WHERE User_Name='%{SQL-User-Name}' AND (Acct_Status_Type = '3' OR Acct_Status_Type = '1') "

accounting_start_query = "INSERT INTO dhs_sessions_log &#40;account_id, slink_id, recv_date,last_update_date,Framed_IP_Address, NAS_Port, Acct_Delay_Time, Acct_Session_Id, NAS_Port_Type, User_Name, Service_Type, Framed_Protocol, NAS_IP_Address, NAS_Id, Acct_Status_Type, Acct_Input_Packets, Acct_Input_Octets, Acct_Input_Gigawords, Acct_Output_Packets,Acct_Output_Octets, Acct_Output_Gigawords, Acct_Session_Time, Acct_Terminate_Cause, Called_Station_Id, Calling_Station_Id &#41; VALUES &#40; &#40;select account_id from service_links where id = &#40; select id from iptraffic_service_links where ip_group_id = &#40; select ip_group_id from ip_groups where uname = '%&#123;SQL-User-Name&#125;' and is_deleted <> '1' &#41;&#41;&#41;, &#40; select id from iptraffic_service_links where ip_group_id = &#40; select ip_group_id from ip_groups where uname = '%&#123;SQL-User-Name&#125;' and is_deleted <> '1' &#41;&#41;, '%l','0', &#40;INET_ATON&#40;CONCAT_WS&#40;'.',SUBSTRING_INDEX&#40;'%&#123;Framed-IP-Address&#125;','.',-1&#41;,SUBSTRING_INDEX&#40;SUBSTRING_INDEX&#40;'%&#123;Framed-IP-Address&#125;','.',-2&#41;,'.',1&#41;,SUBSTRING_INDEX&#40;SUBSTRING_INDEX&#40;'%&#123;Framed-IP-Address&#125;','.',2&#41;,'.',-1&#41;,SUBSTRING_INDEX&#40;'%&#123;Framed-IP-Address&#125;','.',1&#41;&#41;&#41;&#41;, '%&#123;NAS-Port&#125;', '%&#123;Acct-Delay-Time&#125;', '%&#123;Acct-Session-Id&#125;', '%&#123;NAS-Port-Type&#125;', '%&#123;SQL-User-name&#125;', '%&#123;Service-Type&#125;', '%&#123;Framed-Protocol&#125;', &#40;INET_ATON&#40;CONCAT_WS&#40;'.',SUBSTRING_INDEX&#40;'%&#123;NAS-IP-Address&#125;','.',-1&#41;,SUBSTRING_INDEX&#40;SUBSTRING_INDEX&#40;'%&#123;NAS-IP-Address&#125;','.',-2&#41;,'.',1&#41;,SUBSTRING_INDEX&#40;SUBSTRING_INDEX&#40;'%&#123;NAS-IP-Address&#125;','.',2&#41;,'.',-1&#41;,SUBSTRING_INDEX&#40;'%&#123;NAS-IP-Address&#125;','.',1&#41;&#41;&#41;&#41;, '%&#123;NAS-IP-Address&#125;', '1', '%&#123;Acct-Input-Packets&#58;-0&#125;', '%&#123;Acct-Input-Octets&#58;-0&#125;', '%&#123;Acct-Input-Gigawords&#58;-0&#125;', '%&#123;Acct-Output-Packets&#58;-0&#125;', '%&#123;Acct-Output-Octets&#58;-0&#125;', '%&#123;Acct-Output-Gigawords&#58;-0&#125;', '%&#123;Acct-Session-Time&#58;-0&#125;', '%&#123;Acct-Terminate-Cause&#58;-0&#125;', '%&#123;Tunnel-Server-Endpoint&#125;', '%&#123;Calling-Station-Id&#125;%&#123;Tunnel-Client-Endpoint&#125;' &#41;;"

accounting_update_query = "UPDATE dhs_sessions_log SET last_update_date=UNIX_TIMESTAMP&#40;'%S'&#41;, Acct_Status_Type='3', Acct_Input_Packets ='%&#123;Acct-Input-Packets&#125;', Acct_Input_Octets ='%&#123;Acct-Input-Octets&#125;', Acct_Input_Gigawords ='%&#123;Acct-Input-Gigawords&#125;', Acct_Output_Packets ='%&#123;Acct-Output-Packets&#125;', Acct_Output_Octets ='%&#123;Acct-Output-Octets&#125;', Acct_Output_Gigawords ='%&#123;Acct-Output-Gigawords&#125;', Acct_Terminate_Cause='%&#123;Acct-Terminate-Cause&#125;', Acct_Session_Time ='%&#123;Acct-Session-Time&#125;' WHERE Acct_Session_Id = '%&#123;Acct-Session-Id&#125;'"

accounting_stop_query = "UPDATE dhs_sessions_log SET last_update_date=UNIX_TIMESTAMP&#40;'%S'&#41;, Acct_Status_Type='2', Acct_Input_Packets ='%&#123;Acct-Input-Packets&#125;', Acct_Input_Octets ='%&#123;Acct-Input-Octets&#125;', Acct_Input_Gigawords ='%&#123;Acct-Input-Gigawords&#125;', Acct_Output_Packets ='%&#123;Acct-Output-Packets&#125;', Acct_Output_Octets ='%&#123;Acct-Output-Octets&#125;', Acct_Output_Gigawords ='%&#123;Acct-Output-Gigawords&#125;', Acct_Terminate_Cause='%&#123;Acct-Terminate-Cause&#125;', Acct_Session_Time ='%&#123;Acct-Session-Time&#125;' WHERE Acct_Session_Id = '%&#123;Acct-Session-Id&#125;'"
За запросы благодарить wingman'а и solomon'а. Возможно они не правильные для реализации IPoE?!

Конфиг циски приводить в этой теме не буду, все делалось по статье http://wiki.sirmax.noname.com.ua/index.php/ISG

Приведу лишь, саб-интерфейс и лог самой циски.

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

interface Loopback2
 ip address 91.хх.хх.254 255.255.255.240
 no ip redirects
 no ip unreachables
 ntp disable

interface GigabitEthernet0/0/1.1052
 encapsulation dot1Q 1052
 ip dhcp relay information trusted
 ip unnumbered Loopback2
 ip helper-address 172.17.17.252
 no ip redirects
 no ip unreachables
 ntp disable
 service-policy type control ISG-CUSTOMERS-POLICY
 ip subscriber routed
  initiator unclassified ip-address

ip route 91.хх.хх.253 255.255.255.255 GigabitEthernet0/0/1.1052

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

*Nov 20 16&#58;49&#58;36.265&#58; RADIUS/ENCODE&#40;0000038F&#41;&#58;Orig. component type = Iedge IP SIP
*Nov 20 16&#58;49&#58;36.265&#58; RADIUS/ENCODE&#58; NAS PORT sending disabled
*Nov 20 16&#58;49&#58;36.265&#58; RADIUS&#40;0000038F&#41;&#58; Config NAS IP&#58; 91.xx.xx.xx
*Nov 20 16&#58;49&#58;36.265&#58; RADIUS&#40;0000038F&#41;&#58; Config NAS IPv6&#58; &#58;&#58;
*Nov 20 16&#58;49&#58;36.266&#58; RADIUS&#40;0000038F&#41;&#58; Send Access-Request to 91.xx.xx.xx&#58;1812 id 1645/110, len 123
*Nov 20 16&#58;49&#58;36.266&#58; RADIUS&#40;0000038F&#41;&#58; Sending a IPv4 Radius Packet
*Nov 20 16&#58;49&#58;36.266&#58; RADIUS&#40;0000038F&#41;&#58; Started 5 sec timeout
*Nov 20 16&#58;49&#58;37.280&#58; RADIUS&#58; Received from id 1645/110 91.xx.xx.xx&#58;1812, Access-Reject, len 20
*Nov 20 15&#58;07&#58;29.093&#58; RADIUS&#58;  Vendor, Cisco       &#91;26&#93;  23
*Nov 20 15&#58;07&#58;29.093&#58; RADIUS&#58;   ssg-account-info   &#91;250&#93; 17  "S91.хх.хх.253"
*Nov 20 15&#58;07&#58;29.093&#58; RADIUS&#58;  Calling-Station-Id  &#91;31&#93;  14  "000000000000"
*Nov 20 15&#58;07&#58;29.093&#58; RADIUS&#58;  NAS-Port-Type       &#91;61&#93;  6   PPPoEoVLAN                &#91;33&#93;
*Nov 20 15&#58;07&#58;29.093&#58; RADIUS&#58;  Vendor, Cisco       &#91;26&#93;  18
*Nov 20 15&#58;07&#58;29.093&#58; RADIUS&#58;   cisco-nas-port     &#91;2&#93;   12  "0/0/1/1052"
*Nov 20 15&#58;07&#58;29.093&#58; RADIUS&#58;  NAS-Port            &#91;5&#93;   6   7662
*Nov 20 15&#58;07&#58;29.093&#58; RADIUS&#58;  NAS-Port-Id         &#91;87&#93;  12  "0/0/1/1052"
*Nov 20 15&#58;07&#58;29.093&#58; RADIUS&#58;  Service-Type        &#91;6&#93;   6   Outbound                  &#91;5&#93;
*Nov 20 15&#58;07&#58;29.093&#58; RADIUS&#58;  NAS-IP-Address      &#91;4&#93;   6   91.хх.хх.хх
*Nov 20 15&#58;07&#58;29.093&#58; RADIUS&#58;  Acct-Session-Id     &#91;44&#93;  29  "0/0/1/1052_5BDA880800001DEE"
*Nov 20 15&#58;07&#58;29.093&#58; RADIUS&#58;  Nas-Identifier      &#91;32&#93;  20  "asr1002"
*Nov 20 15&#58;07&#58;29.093&#58; RADIUS&#58;  Event-Timestamp     &#91;55&#93;  6   1416470398
*Nov 20 15&#58;07&#58;29.093&#58; RADIUS&#40;0000018B&#41;&#58; Started 30 sec timeout
*Nov 20 15&#58;07&#58;29.126&#58; RADIUS&#40;0000017F&#41;&#58; Request timed out!
*Nov 20 15&#58;07&#58;29.126&#58; RADIUS&#58; Retransmit to &#40;91.хх.хх.хх&#58;1812,1813&#41; for id 1645/25
На время не смотрим, это лишь вырезки.

IP-адрес пользователю прилетает правильный, при наборе в браузере любой строчки редиректит на портал. А дальше все.

Что же дальше? А дальше у меня и моего коллеги ступор :!: :?

Ибо куда дальше рыть, чтобы таблицы заполнялись и работала нормальная авторизация и передавались атрибуты, как в админке их указывать и где? Кто в теме, подключайтесь!

Если что-то не правильно, тыкайте, будем исправлять и заново выкладывать запиленный конфиг!

Аватара пользователя
kamae1ka
Сообщения: 142
Зарегистрирован: Пн окт 04, 2010 05:14

Сообщение kamae1ka »

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

Аватара пользователя
TiRider
Сообщения: 568
Зарегистрирован: Сб июн 07, 2008 12:43

Сообщение TiRider »

kamae1ka писал(а):я сделал проще, таблицу не стал нагружать громоздкими запросами, а просто раз в минуту дергал данные для авторизации в другую таблицу -
ип-реальник-блокировка-атрибуты
Можешь поподробнее рассказать о своей реализации, как сделал, конфиги и тп и пд.

Аватара пользователя
kamae1ka
Сообщения: 142
Зарегистрирован: Пн окт 04, 2010 05:14

Сообщение kamae1ka »

TiRider писал(а):
kamae1ka писал(а):я сделал проще, таблицу не стал нагружать громоздкими запросами, а просто раз в минуту дергал данные для авторизации в другую таблицу -
ип-реальник-блокировка-атрибуты
Можешь поподробнее рассказать о своей реализации, как сделал, конфиги и тп и пд.
имею отдельный сервер авторизации и аккаунтингом с mysql+freeradius2+php скрипты
работает независимо от UTM (если уж что-то пошло не так с нетапом)
радиус дергает данные из mysql функциями

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

        authorize_check_query = "call auth&#40;'%&#123;SQL-User-Name&#125;'&#41;"
        authorize_reply_query = "call attr&#40;'%&#123;SQL-User-Name&#125;'&#41;"
функции авторизцации

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

BEGIN

	SELECT 1,`login` as `User-Name`,'Cleartext-Password' as Attribute, `pass`  as `User-Password`,'&#58;='
	FROM auth
	WHERE `login`=logins;

END
аттрибуты, start\upd\stop аналогичны структуре

колонки таблицы с авторизацией

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

id
bill_id
user_id
block
login
pass
real_ip
tariff_id
service_id
выполнение запроса на проверку логина\пароля

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

Time&#58; 0.105s

Procedure executed successfully
Affected rows&#58; 0

Affected rows&#58; 0

Parameters&#58; IN logins VARCHAR&#40;64&#41;
'10.132.13.1'
Return values&#58; 10.132.13.1
радиус лопатит 2к хомяков с нагрузкой load average: 0.04, 0.08, 0.08
нагрузка на linuxISG
Изображение
Изображение

banec
Сообщения: 269
Зарегистрирован: Вт сен 11, 2007 09:06

Сообщение banec »

а просто раз в минуту дергал данные для авторизации в другую таблицу -
ип-реальник-блокировка-атрибуты
а можно запрос к базе нетапа выложить?
для выдергивания данных.

Аватара пользователя
kamae1ka
Сообщения: 142
Зарегистрирован: Пн окт 04, 2010 05:14

Сообщение kamae1ka »

banec писал(а):
а просто раз в минуту дергал данные для авторизации в другую таблицу -
ип-реальник-блокировка-атрибуты
а можно запрос к базе нетапа выложить?
для выдергивания данных.
пользователи

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

SELECT '1' as `bill_id`,a.id as `user_id`,dsl.login as `login`, dsl.password  as `password`,is_blocked as `block`,'' as `Real_IP`,tariff_id as `tariff`,s.service_id as `service_id`
FROM dialup_service_links dsl,service_links s,accounts a,tariffs_services_link tsl
WHERE dsl.is_deleted = 0
AND s.is_deleted=0
AND dsl.id=s.id
AND s.account_id=a.id
AND tsl.service_id=s.service_id
атрибуты

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

SELECT attr,vendor,value,tariff_id,service_id
FROM radius_data,tariffs_services_link tsl
WHERE tsl.service_id=owner_id

Закрыто