Настройка сервера FreeRADIUS под Windows Vista для подключения коммутаторов Raisecom Для теста использовался сервер FreeRADIUS ver 1.1.7 для Windows на стр. http://www.freeradius.net/Downloads/FreeRADIUS.net-1.1.7-r0.0.2.exe . Для более новой версии сервера FreeRADIUS ver 2.1.12 на стр. http://sourceforge.net/projects/freeradius/files/ конфигурация немного отличается от приведенной ниже!! На коммутаторе ISCOM2110EA-MA используется прошивка ROS_4.14.1781.ISCOM2110EA-MA.167.20120920, на коммутаторе ISCOM2126EA-MA Rev B используется прошивка ROS_4.14.1781.ISCOM2126EA-B-MA.167.20120920, на коммутаторе ISCOM2128EA-MA используется прошивка ROS_4.14.1781.ISCOM2128EAMA.167.20120920 . После установки сервера FreeRADIUS ver 1.1.7 под Windows Vista необходимо изменить имя каталога с «C:\FreeRADIUS.NET» на «C:\freeradius». Также необходимо отредактировать в каталоге «C:\freeradius\etc\raddb» файлы «radiusd.conf» , «clients.conf» , «users.conf». В файле «radiusd.conf» необходимо настроить символ «/» для каталога: prefix = C:/freeradius , а не prefix = C:\freeradius Так как сервер SQL не используется при тесте, то соответствующие настройки отмечены «#» для комментария, например: #$INCLUDE ${confdir}/sql.conf # query = "SELECT SUM(AcctSessionTime - \ # GREATEST((%b - UNIX_TIMESTAMP(AcctStartTime)), 0)) \ # FROM radacct WHERE UserName='%{%k}' AND \ # UNIX_TIMESTAMP(AcctStartTime) + AcctSessionTime > '%b'" (Пример настройки для сервера SQL приведен ниже.) В файле «clients.conf» необходимо настроить IP адрес клиента и пароль RADIUS-key: client 192.168.1.210 { secret = qqqq shortname = raisecom nastype = other } В файле «users.conf» необходимо настроить имя пользователя user-name , пароль UserPassword и уровень привилегий priority для этого user-name: user-name Auth-Type := local, User-Password == "password" Raisecom-Priority = priority Например, можно добавить пользователя «raisecomadm» с паролем «admadm» и уровнем привилегий 15 и пользователя «raisecomuser» с паролем «useruser» и уровнем привилегий 5: raisecomadm Auth-Type := Local, User-Password == "admadm" Service-Type = Login-User, NAS-IP-Address = 192.168.1.210, Raisecom-Priority = 15 raisecomuser Auth-Type := Local, User-Password == "useruser" Service-Type = Login-User, NAS-IP-Address = 192.168.1.210, Raisecom-Priority = 5 Пользователи с разным уровнем привилегий Пользователь с приоритетом меньше чем 10 может прямо зайти в enable, пользователь с приоритетом больше чем 10 должен дополнительно ввести пароль для перехода в привилегированный ражим enable. Привилегии Команды Привилегии 0-4 команды show (visitor): language-mode, ping, quit, exit, enable, disable, telnet, traceroute, clear (clear экран), end, help, history, logout Привилегии 5-10 команды для мониторинга (monitor):debugging, show, terminal, list, reboot, dir Привилегии 11-14 команды для настройки (operator):кроме команд администратора, FTP , TFTP, все команды конфигурации Привилегии 15 управление (administrator):команды администратора, FTP , TFTP, управление прошивками и конфигурациями (сохранение, удаление, upgrade/download файл) Также необходимо добавить файл «dictionary.raisecom» в каталог «C:\freeradius\share\freeradius» и отредактировать файл «dictionary» в каталоге «C:\freeradius\share\freeradius»: необходимо добавить в разделе «# Include vendor dictionaries after the standard ones» строку $INCLUDE dictionary.raisecom Файл «dictionary.raisecom» необходим для определения private внутрифирменных атрибутов Vendor-specific Attribute(26) уровня привилегий и содержит текст: “VENDOR Raisecom 8886 BEGIN-VENDOR Raisecom #форма:атрибут имя атрибута номер private атрибута ATTRIBUTE Raisecom-Upstream-Speed-Limit 1 integer ATTRIBUTE Raisecom-Downstream-Speed-Limit 2 integer ATTRIBUTE Raisecom-Priority 3 integer END-VENDOR Raisecom” тип атрибута После этого перейти в каталог C:\freeradius\bin и запустить сервер FreeRADIUS в отладочном режиме с «-X»: C:\freeradius\bin> radiusd –X В случае ошибок в файле конфигурации в командной строке будет выводиться сообщение об ошибке в файле конфигурации и номере строки в этом файле с ошибкой. Например, ошибка в строке 113 файла users.conf : Если все настроено нормально, то будет сообщение «Ready to process requests.» Для теста используется топология: На коммутаторе Ethernet необходимо настроить авторизацию для login и \ или enable на сервере RADIUS, IP address сервера RADIUS и shared-key для протокола RADIUS и опционально авторизацию при недоступности сервера RADIUS, например: Raisecom# user ? USERNAME User name (Not exceed 16 characters) login name Login method information Set user name Raisecom# user login ? local-radius User saved on local machine preference local-user User saved on local machine or default user radius-local User saved on remote radius server preference radius-user User saved on remote radius server local-tacacs User saved on local machine in preference to tacacs+ user tacacs-local User saved on remote tacacs+ server in preference to local user tacacs-user User saved on remote tacacs+ server Raisecom# user login radius-local ? server-no-response only use local auth when radius server does not response <cr> Raisecom# user login radius-local Raisecom# enable ? login Login method information password Change current enable password Raisecom# enable login ? local-radius User saved on local machine preference local-user User saved on local machine or default user radius-local User saved on remote radius server preference radius-user User saved on remote radius server local-tacacs User saved on local machine in preference to tacacs+ user tacacs-local User saved on remote tacacs+ server in preference to local user tacacs-user User saved on remote tacacs+ server Raisecom# enable login radius-local ? server-no-response only use local auth when radius server dose not response <cr> Raisecom# enable login radius-local Raisecom# radius ? A.B.C.D backup Radius server IP address Backup radius server accounting-server Information of radius accounting server Raisecom# radius 192.168.1.37 ? auth-port Radius server port <cr> Raisecom# radius 192.168.1.37 Raisecom# radius-key ? WORD Radius server share key Raisecom# radius-key qqqq <cr> Raisecom# radius-key qqqq Посмотреть настройки можно при помощи команды «show radius-server»: Raisecom# show radius-server Authentication server IP: 192.168.1.37 Backup authentication server IP:0.0.0.0 Authentication server key: Accounting server IP: port:1812 qqqq 192.168.1.37 Backup accounting server IP: Accounting server key: port:1812 0.0.0.0 qqqq Raisecom# Ниже вывод команд «sh run» и «sh ver» port:1813 port:1813 Raisecom# sh run System current configuration: !ROS Version ROS_4.14.1727.ISCOM2110EA-MA.154.20120306 !command in view_mode ! !command in config_mode first-step ethernet cfm domain md-name MdLevel0Default level 0 ! !command in aclmap_mode ! !command in enable_mode user login radius-local enable login radius-local radius 192.168.1.37 radius-key qqqq ! !command in region_mode ! !command in ip igmp profile mode ! !command in service_mode service Level0MaName level 0 ! !command in port_mode ! !command in vlan configuration mode ! !command in ip interface mode interface ip 0 ip address 192.168.1.210 255.255.255.0 1 ! !command in cluster_mode ! !command in cmap_mode ! !command in pmap_mode ! !command in config_mode service config ! Raisecom# Ниже пример подключения для пользователя «raisecomuser» с паролем «useruser» и уровнем привилегий 5 : Login: raisecomuser Password: useruser Raisecom> enable Raisecom# Raisecom# Raisecom# show user Username Priority Server -------------------------------------------raisecom 15 raisecomuser Raisecom# Raisecom# config 5 Local 192.168.1.37 Raisecom(config)# Raisecom(config)# download check-version disable % You Need higher priority! Raisecom(config)# Настройка сервера FreeRADIUS под Windows Vista для сервера SQL Если необходимо, чтобы сервер FreeRADIUS работал с базами MySQL, в которых хранится информация о клиентах и учетных записях, то необходимо изменить некоторые настройки, описанные выше. При этом другие настройки, например, файл «dictionary.raisecom» в каталоге «C:\freeradius\share\freeradius» не меняются. Ниже приведены только дополнительные настройки для работы с базами MySQL и измененные настройки!! Необходимо загрузить файл «MySQL Community Server 5.5.28» (файл «mysql-5.5.28win32.msi») на стр. http://www.mysql.com/downloads/mysql/ и при необходимости файл «MySQL Workbench 5.2.44» (файл «mysql-workbench-gpl-5.2.44-win32.msi») на стр. http://www.mysql.com/downloads/workbench/ и настроить сервер MySQL. Ниже приведены настройки сервера MySQL для тестовой топологии, настройки сервера MySQL на реальной сети могут отличаться (например, количество сессий, которое поддерживается и т. д.) После этого можно в меню «Пуск > MySQL > MySQL Server 5.5 > MySQL Server 5.5 Command Line Client» запустить командную строку для работы с сервером MySQL или установить графическую программу MySQL Workbench 5.2.44 . Для установки программы MySQL Workbench 5.2.44 необходимо установить “Visual C++ 2010 Redistributable Package” и после этого «Microsoft .NET Framework 4 Client Profile» на стр. http://dev.mysql.com/resources/wb52_prerequisites.html После установки “Visual C++ 2010 Redistributable Package” и «Microsoft .NET Framework 4 Client Profile» Скопировать файл «mysql.sql» из каталога «C:\freeradius\share\doc\freeradius\examples» в каталог «C:\freeradius». В файле «radiusd.conf» необходимо настроить для сервера SQL: $INCLUDE ${confdir}/sql.conf Также в файле «radiusd.conf» необходимо отредактировать комментарий: query = "SELECT SUM(AcctSessionTime - \ GREATEST((%b - UNIX_TIMESTAMP(AcctStartTime)), 0)) \ FROM radacct WHERE UserName='%{%k}' AND \ UNIX_TIMESTAMP(AcctStartTime) + AcctSessionTime > '%b'" и query = "SELECT SUM(AcctSessionTime - \ GREATEST((%b - UNIX_TIMESTAMP(AcctStartTime)), 0)) \ FROM radacct WHERE UserName='%{%k}' AND \ UNIX_TIMESTAMP(AcctStartTime) + AcctSessionTime > '%b'" Также в файле «radiusd.conf» необходимо отредактировать «#files», а не «files» в строке 1848 и «sql» , а не «#sql» в строке 1855: Также в файле «radiusd.conf» необходимо отредактировать «sql» , а не «#sql» в строке 2017 : Также в файле «radiusd.conf» необходимо отредактировать «sql» , а не «#sql» в строке 2039 : В файле «sql.conf» необходимо настроить для сервера SQL IP адрес 127.0.0.1 , а не “localhost”, пароль при необходимости, например, настроить пароль «root», а не "rootpass" в строке 24 и в строке 329 настроить readclients = yes : # Connect info server = "127.0.0.1" login = "root" password = "root" readclients = yes В файле «users.conf» необходимо отметить “#” для комментария существующих пользователей, которых добавили до этого, например: # # # # raisecomadm Auth-Type := Local, User-Password == "admadm" Service-Type = Login-User, NAS-IP-Address = 192.168.1.210, Raisecom-Priority = 15 # # # # raisecomuser Auth-Type := Local, User-Password == "useruser" Service-Type = Login-User, NAS-IP-Address = 192.168.1.210, Raisecom-Priority = 5 В файле «clients.conf» необходимо отметить “#” для комментария существующих клиентов, которых добавили до этого, например: #client 192.168.1.210 { # secret = qqqq # shortname = raisecom # nastype = other #} В файле «eap.conf» необходимо настроить алгоритм MD5 , а не TLS для авторизации EAP default_eap_type ==md5 , а не default_eap_type = tls После этого при помощи командной строки SQL «MySQL Server 5.5 Command Line Client» или программы MySQL Workbench 5.2.44 создать базу данных «radius»: Mysql> status / статус сервера Mysql> create database radius; /создать базу данных «radius» Mysql> use radius; /использовать базу данных «radius» Mysql> source c:/freeradius/mysql.sql; / по требованию mysql.sql создать таблицу в database Mysql> show tables; /смотреть все таблицы в базе данных «radius» Добавить в таблицу «nas» IP адрес коммутатора, название и ключ RADIUS, например: insert into nas (nasname,shortname,secret) values (“192.168.1.210”, “raisecom” , “qqqq”); Для просмотра таблицы «nas» команда select * from nas; После этого добавить группы пользователей и privilege level для каждой группы в таблицу «radgroupreply », например, группу пользователей «administrator» с уровнем привилегий 15 и группу пользователей "network" с уровнем привилегий 5: insert into radgroupreply (Groupname, attribute, op, value) values (“network”, “RaisecomPriority”, “:=”, “5”); insert into radgroupreply (Groupname, attribute, op, value) values (“administrator”, “RaisecomPriority”, “:=”, “15”); Добавить пароль для каждого пользователя в таблицу «radcheck», например, для пользователя «admadm» пароль «aaa1234» и для “useruser” пароль «user777» : insert into radcheck (Username, Attribute, op, value) values (“admadm”, “User-Password”, “:=”, “aaa1234”); insert into radcheck (Username, Attribute, op, value) values (“useruser”, “User-Password”, “:=”, “user777”); В таблице «usergroup» добавить пользователей в группы пользователей, например, пользователь «admadm» в группе «administrator» и пользователь «useruser» в группе «network»: insert into usergroup (UserName, GroupName, priority) values (“admadm”, “administrator”, “15”); insert into usergroup (UserName, GroupName, priority) values (“useruser”, “network”, “5”); После этого перейти в каталог C:\freeradius\bin и запустить сервер FreeRADIUS в отладочном режиме с «-X»: C:\freeradius\bin> radiusd –X Если все нормально настроено, то будет сообщение Login: useruser Password: user777 Raisecom> enable Raisecom# show user Username Priority Server -------------------------------------------raisecom 15 useruser 5 Raisecom# Local 192.168.1.37 Login: admadm Password: aaa1234 Raisecom> enable Password: raisecom Raisecom# show user Username Priority Server -------------------------------------------raisecom admadm Raisecom# 15 15 Local 192.168.1.37 Ниже логи FreeRADIUS при авторизации клиента с SQL : rad_recv: Access-Request packet from host 192.168.1.210:1024, id=3, length=88 User-Name = "useruser" User-Password = "user777" NAS-IP-Address = 192.168.1.210 NAS-Port = 0 NAS-Port-Type = Async Service-Type = Login-User Framed-IP-Address = 127.0.0.1 NAS-Identifier = "Raisecom" Processing the authorize section of radiusd.conf modcall: entering group authorize for request 0 modcall[authorize]: module "preprocess" returns ok for request 0 radius_xlat: 'C:/freeradius/var/log/radius/radacct/192.168.1.210/auth-detail-20 121224.log' rlm_detail: C:/freeradius/var/log/radius/radacct/%{Client-IP-Address}/auth-detai l-%Y%m%d.log expands to C:/freeradius/var/log/radius/radacct/192.168.1.210/authdetail-20121224.log modcall[authorize]: module "auth_log" returns ok for request 0 modcall[authorize]: module "chap" returns noop for request 0 modcall[authorize]: module "mschap" returns noop for request 0 rlm_realm: No '@' in User-Name = "useruser", looking up realm NULL rlm_realm: No such realm "NULL" modcall[authorize]: module "suffix" returns noop for request 0 rlm_eap: No EAP-Message, not doing EAP modcall[authorize]: module "eap" returns noop for request 0 radius_xlat: 'useruser' rlm_sql (sql): sql_set_user escaped user --> 'useruser' radius_xlat: 'SELECT id, UserName, Attribute, Value, op WHERE Username = 'useruser' FROM radcheck ORDER BY id' rlm_sql (sql): Reserving sql socket id: 3 radius_xlat: 'SELECT radgroupcheck.id,radgroupcheck.GroupName,radgroupcheck.Att ribute,radgroupcheck.Value,radgroupcheck.op FROM radgroupcheck,usergroup WHERE usergroup.Username = 'useruser' AND usergroup.GroupName = radgroupcheck.GroupNam e ORDER BY radgroupcheck.id' radius_xlat: 'SELECT id, UserName, Attribute, Value, op WHERE Username = 'useruser' FROM radreply ORDER BY id' radius_xlat: 'SELECT radgroupreply.id,radgroupreply.GroupName,radgroupreply.Att ribute,radgroupreply.Value,radgroupreply.op FROM radgroupreply,usergroup WHERE usergroup.Username = 'useruser' AND usergroup.GroupName = radgroupreply.GroupNam e ORDER BY radgroupreply.id' rlm_sql (sql): Released sql socket id: 3 modcall[authorize]: module "sql" returns ok for request 0 modcall[authorize]: module "pap" returns updated for request 0 modcall: leaving group authorize (returns updated) for request 0 rad_check_password: Found Auth-Type pap auth: type "PAP" Processing the authenticate section of radiusd.conf modcall: entering group PAP for request 0 rlm_pap: login attempt with password user777 rlm_pap: Using clear text password "user777". rlm_pap: User authenticated successfully modcall[authenticate]: module "pap" returns ok for request 0 modcall: leaving group PAP (returns ok) for request 0 Login OK: [useruser/user777] (from client raisecom port 0) Processing the post-auth section of radiusd.conf modcall: entering group post-auth for request 0 radius_xlat: 'C:/freeradius/var/log/radius/radacct/192.168.1.210/reply-detail-2 0121224.log' rlm_detail: C:/freeradius/var/log/radius/radacct/%{Client-IP-Address}/reply-deta il-%Y%m%d.log expands to C:/freeradius/var/log/radius/radacct/192.168.1.210/repl y-detail-20121224.log modcall[post-auth]: module "reply_log" returns ok for request 0 modcall: leaving group post-auth (returns ok) for request 0 Sending Access-Accept of id 3 to 192.168.1.210 port 1024 Raisecom-Priority := 5 Finished request 0 Going to the next request --- Walking the entire request list --Waking up in 6 seconds... rad_recv: Access-Request packet from host 192.168.1.210:1024, id=3, length=88 Sending duplicate reply to client raisecom:1024 - ID: 3 Re-sending Access-Accept of id 3 to 192.168.1.210 port 1024 --- Walking the entire request list --Waking up in 5 seconds... rad_recv: Access-Request packet from host 192.168.1.210:1024, id=3, length=88 Sending duplicate reply to client raisecom:1024 - ID: 3 Re-sending Access-Accept of id 3 to 192.168.1.210 port 1024 Waking up in 5 seconds... Error receiving packet: Connection reset by peer Waking up in 5 seconds... Error receiving packet: Connection reset by peer Waking up in 5 seconds... --- Walking the entire request list --Cleaning up request 0 ID 3 with timestamp 50d869cb Nothing to do. Sleeping until we see a request.