Настройка Freeradius
Собственно подниму тему.
Сейчас пытаемся на Freeradius 3 + ISG, сделать связку, чтобы все дело работало. Кто чем может помочь?
В частности стандартными средствами UTM5_DHCP сделали выдачу ip-адреса. Клиент цепляется и получает ip, но нет авторизации и соответственно навешивания политик и сервисов.
У кого есть запросы в базу данных, поделитесь, authorize_check_query, authorize_reply_query и тп. и пд.
Shiva, как у вас продвигается реализация на стандартном радиусе? А то я вам в ICQ писал, вы не ответили...
adeep, как у Вас обстоят дела с данным делом?
Уточню у уважаемого Магнума, нет ли у вас какой-то примерной реализации, вы ведь используете FR. Предполагаю, что у вас ISG
Сейчас пытаемся на Freeradius 3 + ISG, сделать связку, чтобы все дело работало. Кто чем может помочь?

В частности стандартными средствами UTM5_DHCP сделали выдачу ip-адреса. Клиент цепляется и получает ip, но нет авторизации и соответственно навешивания политик и сервисов.
У кого есть запросы в базу данных, поделитесь, authorize_check_query, authorize_reply_query и тп. и пд.
Shiva, как у вас продвигается реализация на стандартном радиусе? А то я вам в ICQ писал, вы не ответили...
adeep, как у Вас обстоят дела с данным делом?
Уточню у уважаемого Магнума, нет ли у вас какой-то примерной реализации, вы ведь используете FR. Предполагаю, что у вас ISG

Собственно, что начали мы делать. Буду кидать описание и конфиги, чтобы люди в дальнейшем не парили себе мозги! У нас 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
clients.conf
sql.conf
sites-enable/default
queries.conf
За запросы благодарить wingman'а и solomon'а. Возможно они не правильные для реализации IPoE?!
Конфиг циски приводить в этой теме не буду, все делалось по статье http://wiki.sirmax.noname.com.ua/index.php/ISG
Приведу лишь, саб-интерфейс и лог самой циски.
На время не смотрим, это лишь вырезки.
IP-адрес пользователю прилетает правильный, при наборе в браузере любой строчки редиректит на портал. А дальше все.
Что же дальше? А дальше у меня и моего коллеги ступор
Ибо куда дальше рыть, чтобы таблицы заполнялись и работала нормальная авторизация и передавались атрибуты, как в админке их указывать и где? Кто в теме, подключайтесь!
Если что-то не правильно, тыкайте, будем исправлять и заново выкладывать запиленный конфиг!
Предполагаем, что настройку 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/
Код: Выделить всё
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 {
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
}
Код: Выделить всё
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
}
}
Код: Выделить всё
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 (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 ) VALUES ( (select account_id from service_links where id = ( select id from iptraffic_service_links where ip_group_id = ( select ip_group_id from ip_groups where uname = '%{SQL-User-Name}' and is_deleted <> '1' ))), ( select id from iptraffic_service_links where ip_group_id = ( select ip_group_id from ip_groups where uname = '%{SQL-User-Name}' and is_deleted <> '1' )), '%l','0', (INET_ATON(CONCAT_WS('.',SUBSTRING_INDEX('%{Framed-IP-Address}','.',-1),SUBSTRING_INDEX(SUBSTRING_INDEX('%{Framed-IP-Address}','.',-2),'.',1),SUBSTRING_INDEX(SUBSTRING_INDEX('%{Framed-IP-Address}','.',2),'.',-1),SUBSTRING_INDEX('%{Framed-IP-Address}','.',1)))), '%{NAS-Port}', '%{Acct-Delay-Time}', '%{Acct-Session-Id}', '%{NAS-Port-Type}', '%{SQL-User-name}', '%{Service-Type}', '%{Framed-Protocol}', (INET_ATON(CONCAT_WS('.',SUBSTRING_INDEX('%{NAS-IP-Address}','.',-1),SUBSTRING_INDEX(SUBSTRING_INDEX('%{NAS-IP-Address}','.',-2),'.',1),SUBSTRING_INDEX(SUBSTRING_INDEX('%{NAS-IP-Address}','.',2),'.',-1),SUBSTRING_INDEX('%{NAS-IP-Address}','.',1)))), '%{NAS-IP-Address}', '1', '%{Acct-Input-Packets:-0}', '%{Acct-Input-Octets:-0}', '%{Acct-Input-Gigawords:-0}', '%{Acct-Output-Packets:-0}', '%{Acct-Output-Octets:-0}', '%{Acct-Output-Gigawords:-0}', '%{Acct-Session-Time:-0}', '%{Acct-Terminate-Cause:-0}', '%{Tunnel-Server-Endpoint}', '%{Calling-Station-Id}%{Tunnel-Client-Endpoint}' );"
accounting_update_query = "UPDATE dhs_sessions_log SET last_update_date=UNIX_TIMESTAMP('%S'), Acct_Status_Type='3', Acct_Input_Packets ='%{Acct-Input-Packets}', Acct_Input_Octets ='%{Acct-Input-Octets}', Acct_Input_Gigawords ='%{Acct-Input-Gigawords}', Acct_Output_Packets ='%{Acct-Output-Packets}', Acct_Output_Octets ='%{Acct-Output-Octets}', Acct_Output_Gigawords ='%{Acct-Output-Gigawords}', Acct_Terminate_Cause='%{Acct-Terminate-Cause}', Acct_Session_Time ='%{Acct-Session-Time}' WHERE Acct_Session_Id = '%{Acct-Session-Id}'"
accounting_stop_query = "UPDATE dhs_sessions_log SET last_update_date=UNIX_TIMESTAMP('%S'), Acct_Status_Type='2', Acct_Input_Packets ='%{Acct-Input-Packets}', Acct_Input_Octets ='%{Acct-Input-Octets}', Acct_Input_Gigawords ='%{Acct-Input-Gigawords}', Acct_Output_Packets ='%{Acct-Output-Packets}', Acct_Output_Octets ='%{Acct-Output-Octets}', Acct_Output_Gigawords ='%{Acct-Output-Gigawords}', Acct_Terminate_Cause='%{Acct-Terminate-Cause}', Acct_Session_Time ='%{Acct-Session-Time}' WHERE Acct_Session_Id = '%{Acct-Session-Id}'"
Конфиг циски приводить в этой теме не буду, все делалось по статье 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:49:36.265: RADIUS/ENCODE(0000038F):Orig. component type = Iedge IP SIP
*Nov 20 16:49:36.265: RADIUS/ENCODE: NAS PORT sending disabled
*Nov 20 16:49:36.265: RADIUS(0000038F): Config NAS IP: 91.xx.xx.xx
*Nov 20 16:49:36.265: RADIUS(0000038F): Config NAS IPv6: ::
*Nov 20 16:49:36.266: RADIUS(0000038F): Send Access-Request to 91.xx.xx.xx:1812 id 1645/110, len 123
*Nov 20 16:49:36.266: RADIUS(0000038F): Sending a IPv4 Radius Packet
*Nov 20 16:49:36.266: RADIUS(0000038F): Started 5 sec timeout
*Nov 20 16:49:37.280: RADIUS: Received from id 1645/110 91.xx.xx.xx:1812, Access-Reject, len 20
*Nov 20 15:07:29.093: RADIUS: Vendor, Cisco [26] 23
*Nov 20 15:07:29.093: RADIUS: ssg-account-info [250] 17 "S91.хх.хх.253"
*Nov 20 15:07:29.093: RADIUS: Calling-Station-Id [31] 14 "000000000000"
*Nov 20 15:07:29.093: RADIUS: NAS-Port-Type [61] 6 PPPoEoVLAN [33]
*Nov 20 15:07:29.093: RADIUS: Vendor, Cisco [26] 18
*Nov 20 15:07:29.093: RADIUS: cisco-nas-port [2] 12 "0/0/1/1052"
*Nov 20 15:07:29.093: RADIUS: NAS-Port [5] 6 7662
*Nov 20 15:07:29.093: RADIUS: NAS-Port-Id [87] 12 "0/0/1/1052"
*Nov 20 15:07:29.093: RADIUS: Service-Type [6] 6 Outbound [5]
*Nov 20 15:07:29.093: RADIUS: NAS-IP-Address [4] 6 91.хх.хх.хх
*Nov 20 15:07:29.093: RADIUS: Acct-Session-Id [44] 29 "0/0/1/1052_5BDA880800001DEE"
*Nov 20 15:07:29.093: RADIUS: Nas-Identifier [32] 20 "asr1002"
*Nov 20 15:07:29.093: RADIUS: Event-Timestamp [55] 6 1416470398
*Nov 20 15:07:29.093: RADIUS(0000018B): Started 30 sec timeout
*Nov 20 15:07:29.126: RADIUS(0000017F): Request timed out!
*Nov 20 15:07:29.126: RADIUS: Retransmit to (91.хх.хх.хх:1812,1813) for id 1645/25
IP-адрес пользователю прилетает правильный, при наборе в браузере любой строчки редиректит на портал. А дальше все.
Что же дальше? А дальше у меня и моего коллеги ступор


Ибо куда дальше рыть, чтобы таблицы заполнялись и работала нормальная авторизация и передавались атрибуты, как в админке их указывать и где? Кто в теме, подключайтесь!
Если что-то не правильно, тыкайте, будем исправлять и заново выкладывать запиленный конфиг!
имею отдельный сервер авторизации и аккаунтингом с mysql+freeradius2+php скриптыTiRider писал(а):Можешь поподробнее рассказать о своей реализации, как сделал, конфиги и тп и пд.kamae1ka писал(а):я сделал проще, таблицу не стал нагружать громоздкими запросами, а просто раз в минуту дергал данные для авторизации в другую таблицу -
ип-реальник-блокировка-атрибуты
работает независимо от UTM (если уж что-то пошло не так с нетапом)
радиус дергает данные из mysql функциями
Код: Выделить всё
authorize_check_query = "call auth('%{SQL-User-Name}')"
authorize_reply_query = "call attr('%{SQL-User-Name}')"
Код: Выделить всё
BEGIN
SELECT 1,`login` as `User-Name`,'Cleartext-Password' as Attribute, `pass` as `User-Password`,':='
FROM auth
WHERE `login`=logins;
END
колонки таблицы с авторизацией
Код: Выделить всё
id
bill_id
user_id
block
login
pass
real_ip
tariff_id
service_id
Код: Выделить всё
Time: 0.105s
Procedure executed successfully
Affected rows: 0
Affected rows: 0
Parameters: IN logins VARCHAR(64)
'10.132.13.1'
Return values: 10.132.13.1
нагрузка на linuxISG


пользователи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