Skylord
Junior Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Постю по просьбе proed'а. Итак, цель: поиметь нормальную авторизацию vpn. Предполагается, что все настроено и работает (например, в варианте без радиуса с логинами/ипшниками/паролями в ppp.secret), но хочется большего. Недостатки ppp.secret очевидны - лишнее дергание руками и прочее. Недостатки встроенного в НетУп радиуса: крайняя примитивность. И черт бы с ней, но хочется авторизации MSCHAPv2 и прочих приятных вещей. Выход? Поставить полноценный FreeRadius и настроить его на работу с базой УТМ. Я это реализовал на FreeBSD 4.9. Что нам надо: 1) Хранить пароли пользователей в plain_text. На этот счет - см. родную доку: как делается и нюансы там опИсаны. 2) Установить FreeRadius из портов командами: make WITH_MYSQL=yes make install clean 3) Настроить FreeRadius. Как это делается - процитирую с форума НетУпа (автор OtherSide): Цитата: Настраиваем FreeRadius... # cd /usr/local/etc/raddb тут надо внести изменения в некоторые файлы конфигурации (комментарии у большинства строк удалены...): radius.conf: #-------------------------------------------------------- ## ## radiusd.conf -- FreeRADIUS server configuration file. ## prefix = /usr/local exec_prefix = ${prefix} sysconfdir = ${prefix}/etc localstatedir = /var sbindir = ${exec_prefix}/sbin logdir = /var/log raddbdir = ${sysconfdir}/raddb radacctdir = ${logdir}/radacct confdir = ${raddbdir} run_dir = ${localstatedir}/run/radiusd log_file = ${logdir}/radius.log libdir = ${exec_prefix}/lib pidfile = ${run_dir}/radiusd.pid # user/group: The name (or #number) of the user/group to run radiusd as. user = nobody group = nobody max_request_time = 8 delete_blocked_requests = no cleanup_delay = 5 max_requests = 1024 # bind_address: Make the server listen on a particular IP address, and # send replies out from that address. This directive is most useful # for machines with multiple IP addresses on one interface. # bind_address = * # port: Allows you to bind FreeRADIUS to a specific port. # port = 1812 hostname_lookups = no allow_core_dumps = no regular_expressions = yes extended_expressions = yes log_stripped_names = yes log_auth = yes log_auth_badpass = yes log_auth_goodpass = no usercollide = no lower_user = no lower_pass = no nospace_user = no nospace_pass = no checkrad = ${sbindir}/checkrad security { max_attributes = 200 reject_delay = 1 status_server = no } proxy_requests = no #$INCLUDE ${confdir}/proxy.conf $INCLUDE ${confdir}/clients.conf snmp = no #$INCLUDE ${confdir}/snmp.conf thread pool { start_servers = 5 max_servers = 32 min_spare_servers = 3 max_spare_servers = 10 max_requests_per_server = 0 } modules { chap { authtype = CHAP } mschap { authtype = MS-CHAP } detail { detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d detailperm = 0600 } $INCLUDE ${confdir}/sql.conf always fail { rcode = fail } always reject { rcode = reject } always ok { rcode = ok simulcount = 0 mpp = no } } authorize { chap mschap sql } authenticate { Auth-Type CHAP { chap } Auth-Type MS-CHAP { mschap } } accounting { detail sql } #-------------------------------------------------------- clients.conf: #-------------------------------------------------------- # # clients.conf - client configuration directives # client 127.0.0.1 { # The secret can be any string, up to 32 characters in length. # secret = ****** shortname = localhost nastype = other } client 192.168.0.1 { secret = ****** shortname = vpn-nas nastype = other } #-------------------------------------------------------- параметр secret в clients.conf - это пароль для доступа к радиусу... его надо будет вписать в /etc/radius.conf (потом ) acct_users #-------------------------------------------------------- # # $Id: acct_users,v 1.3.4.1 2003/08/26 17:41:48 phampson Exp $ # # This is like the 'users' file, but it is processed only for # accounting packets. DEFAULT Service-Type == Framed-User, Service-Type == Login-User, Login-Service == Telnet, Login-Service == Rlogin, Login-Service == TCP-Clear, Login-TCP-Port <= 65536, Framed-IP-Address == 255.255.255.254, Framed-IP-Netmask == 255.255.255.255, Framed-Protocol == PPP, Framed-Protocol == SLIP, Framed-Compression == Van-Jacobson-TCP-IP, Framed-MTU >= 576, Framed-Filter-ID =* ANY, Reply-Message =* ANY, Proxy-State =* ANY, Session-Timeout <= 2678400, Idle-Timeout <= 2678400, Port-Limit <= 2 #-------------------------------------------------------- Ну и пожалуй самый главный файлик... sql.conf: #-------------------------------------------------------- # # Configuration for the SQL module, when using MySQL. # sql { driver = "rlm_sql_mysql" # Connect info server = "localhost" login = "root" password = "*****" # Database table configuration radius_db = "UTM" sqltrace = no sqltracefile = ${logdir}/sqltrace.sql num_sql_socks = 5 connect_failure_retry_delay = 60 sql_user_name = "%{User-Name}" authorize_check_query = "SELECT users.id, users.login, 'Password', users.password, ':=' FROM users WHERE users.login = '%{SQL-User-Name}' AND users.block = '0'" authorize_reply_query = "SELECT users.id, users.login, 'Framed-IP-Address', users.ip, ':=' FROM users WHERE users.login = '%{SQL-User-Name}' AND users.block = '0'" authorize_group_check_query = "SELECT frad_groupcheck.id,frad_groupcheck.GroupName,frad_groupcheck.Attribute,frad_groupcheck.Value,frad_groupcheck.op FROM frad_groupcheck,frad_usergroup WHERE frad_groupcheck.GroupName = 'users' ORDER BY frad_groupcheck.id" authorize_group_reply_query = "SELECT frad_groupreply.id,frad_groupreply.GroupName,frad_groupreply.Attribute,frad_groupreply.Value,frad_groupreply.op FROM frad_groupreply,frad_usergroup WHERE frad_groupreply.GroupName = 'users' ORDER BY frad_groupreply.id" accounting_start_query = "INSERT INTO radius_packets_accounting ( id, uid, recv_date, Code, Identifier, Authentic, Framed_IP_Address, Acct_Authentic, NAS_Port, Acct_Delay_Time, Service_Type, Acct_Session_Id, NAS_Port_Type, User_Name,Framed_Protocol, NAS_IP_Address, Acct_Status_Type, Acct_Input_Packets, Acct_Input_Octets, Acct_Output_Packets, Acct_Output_Octets, Acct_Session_Time ) SELECT NULL, users.id, '%l', 4, 10, '', '%{Framed-IP-Address}', '%{Acct-Authentic}', '%{NAS-Port}', '%{Acct-Delay-Time}', '%{Service-Type}', '%{Acct-Session-Id}', '%{NAS-Port-Type}', '%{SQL-User-Name}', '%{Framed-Protocol}', '%{NAS-IP-Address}', 1, 0, 0, 0, 0, 0 FROM users WHERE users.login='%{SQL-User-Name}'" accounting_stop_query = "INSERT INTO radius_packets_accounting ( id, uid, recv_date, Code, Identifier, Authentic, Framed_IP_Address, Acct_Authentic, NAS_Port, Acct_Delay_Time, Service_Type, Acct_Session_Id, NAS_Port_Type, User_Name,Framed_Protocol, NAS_IP_Address, Acct_Status_Type, Acct_Input_Packets, Acct_Input_Octets, Acct_Output_Packets, Acct_Output_Octets, Acct_Session_Time ) SELECT NULL, users.id, '%l', 4, 20, '', '%{Framed-IP-Address}', '%{Acct-Authentic}', '%{NAS-Port}', '%{Acct-Delay-Time}', '%{Service-Type}','%{Acct-Session-Id}', '%{NAS-Port-Type}', '%{SQL-User-Name}', '%{Framed-Protocol}', '%{NAS-IP-Address}', 2, '%{Acct-Input-Packets}', '%{Acct-Input-Octets}', '%{Acct-Output-Packets}', '%{Acct-Output-Octets}', '%{Acct-Session-Time}' FROM users WHERE users.login='%{SQL-User-Name}'" group_membership_query = "SELECT GroupName FROM frad_usergroup WHERE id=1" } #-------------------------------------------------------- В файлике sql.conf, нужно ввести адрес сервера MySQL, логин и пароль для доступа к MySQL... (см. server, login, password) 3) Настраиваем MySQL для работы с FreeRadius. Надо создать несколько дополнительных таблиц в БД UTM. Далее код для MySQL. use UTM; CREATE TABLE frad_groupcheck ( id int(11) unsigned NOT NULL auto_increment, GroupName varchar(64) NOT NULL default '', Attribute varchar(32) NOT NULL default '', op char(2) NOT NULL DEFAULT '==', Value varchar(253) NOT NULL default '', PRIMARY KEY (id), KEY GroupName (GroupName(32)) ) ; CREATE TABLE frad_groupreply ( id int(11) unsigned NOT NULL auto_increment, GroupName varchar(64) NOT NULL default '', Attribute varchar(32) NOT NULL default '', op char(2) NOT NULL DEFAULT '=', Value varchar(253) NOT NULL default '', prio int unsigned NOT NULL default '0', PRIMARY KEY (id), KEY GroupName (GroupName(32)) ) ; INSERT INTO frad_groupreply VALUES (NULL, 'users', 'Framed-IP-Netmask', ':=', '255.255.255.255', 0); CREATE TABLE frad_usergroup ( id int(11) unsigned NOT NULL auto_increment, GroupName varchar(64) NOT NULL default '', PRIMARY KEY (id) ) ; INSERT INTO frad_usergroup VALUES (NULL, 'users'); 4) The End Теперь можно запустить FreeRadius vpn# /usr/local/etc/rc.d/radius.sh start Для того что-бы NAS мог обратиться к радиусу, вносим изменения в /etc/radius.conf ( на том сервере, где стоит NAS ) radius.conf: auth 127.0.0.1:1812 ***** acct 127.0.0.1:1813 ***** Вместо 127.0.0.1 нужно вписать адрес сервера с FreeRadius (если он находится на другом сервере) ***** - это пароль, который задается в clients.conf (см. выше) | Вот. По-моему, все достаточно прозрачно написано, а конфиги по большому счету можно просто скопировать отсюда и кинуть подправив пару строк - secret word, прежде всего. 4) Дальнейшная настройка самого УТМа полностью соответствует родной доке: убираем из utm.cfg строчки про ppp.secret (ну, там где путь к нему и формат), если они были. В ppp.conf в профиле для vpn ставим set radius /etc/radius.conf в котором пишем точно то, что написано в доке... В общем, все как в родной доке, только радиус другой. )) 5) Вся система у меня заработала моментально и без проблем, а ppp.secret был забыт как страшный сон. Чего и вам желаю. ps: Кстати, если у кого проблемы с vpn - могу кинуть конфиги, как оно работает у меня. Инструкция по настройке pptpd в родной доке мягко говоря не очень. Точнее, совсем никак. |