The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

FAQ по установке и настройке IC-RADIUS под FreeBSD (bsd radius aaa auth limit)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: bsd, radius, aaa, auth, limit,  (найти похожие документы)
Date: 29 Jul 2002 From: Andrew Pavlov <and@kremenchug.net> Newsgroups: OpenNet Subject: FAQ по установке и настройке IC-RADIUS под FreeBSD FAQ по установке и настройке IC-RADIUS под FreeBSD. Этот документ не претендует на полноту. Замечания и дополнения приветствуются. Последнюю версию можно получить: https://www.opennet.ru/base/faq/icradius.txt.html http://www.i.kremenchug.net/docs/icradius.htm http://www.i.kremenchug.net/docs/icradius.txt.gz Автор: Andrew Pavlov and@kremenchug.net Благодарности за поддержку и конструктивную критику: Boris Kovalenko boris@tagnet.ru Denis Ladeishchikov snide@europe.com Kirill Lopuchov kirill@sfugntu.bashnet.ru Дата последнего обновления: ср 31 июл 09:06:44 2002 Q. Что такое RADIUS, и как он работает? Q. Какие RADIUS сервера существуют? Q. Какой же RADIUS выбрать и где взять? Q. Как установить и настроить IC-RADIUS? Q. Я сделал все как написано, а radiusd выпадает в core. Q. IC-RADIUS запустился, а что делать дальше, как мне заставить своих пользователей аутентифицироваться по RADIUS? Q. Все получилось, а как быть с пользователями? Q. У меня масса пользователей, так неохота прописывать каждому повторяющиеся атрибуты, что делать? Q. Можно ли сделать так, чтобы пользователь автоматически добавлялся в группу? Q. Где я могу посмотреть весь набор атрибутов и их значений, которые использует мой RADIUS? Q. Где IC-RADIUS хранит статистику по отработанным ресурсам? Q. Как я могу ограничить пользователя, чтобы он ходил только на определенные адреса? Q. Как я могу ограничивать своих пользователей по времени? Q. А как сделать, чтобы пользователь мог логиниться только в определенное для него время? Q. Могу ли я ограничивать своих пользователей по трафику? Q. Меня не устраивают пароли в открытом виде, что можно сделать? Q. У меня несколько NAS, как я могу ограничить пользователя так, чтобы он мог заходить только на определенный NAS и/или только на определенный порт? Q. Я создал пользователя и просто хочу его проверить, никуда не дозваниваясь. Q. Как я могу посмотреть, кто на какой NAS под каким ip залогинен в данный момент? Q. Как я могу посмотреть, кто, когда логинился? Q. Есть ли какие-нибудь web-интерфейсы для администрирования и просмотра статистики? Q. Что если мне надо перенести мою базу на другой хост? Q. Мне этого мало, что я еще могу почитать про IC-RADIUS? Q. Что такое RADIUS, и как он работает? A. RADIUS - служба удаленной аутентификации входящих звонков пользователей. Он является протоколом для передачи информации по аутентификации, авторизации и конфигурации между сервером доступа к сети (NAS) и сервером аутентификации (RADIUS). Данный стандарт подробно описывается в RFC 2138 и 2139 и доступен на ftp://ftp.ripe.net/rfc/. Процесс условно может быть разделен на 5 стадий: 1) пользователь дозванивается до NAS; 2) NAS посылает запрос к RADIUS посредством стандартного набора пар атрибут/значение; 3) RADIUS проверяет, существует ли пользователь, если да, то может ли он войти в систему; 4) RADIUS посылает обратно к NAS или Accept или Reject, что определяет разрешение доступа пользователю; 5) по завершению пользовательской сессии NAS возвращает RADIUS серверу информацию по выработанным этим пользователем ресурсам. Q. Какие RADIUS сервера существуют? A. Из бесплатных, например: FreeRADIUS, XtRadius, Cistron RADIUS, Gnu-Radius, IC-RADIUS, в общем, если у Вас FreeBSD, cd /usr/ports; make search key=radius. Q. Какой же RADIUS выбрать и где взять? A. Исторически сложилось, что я использую IC-RADIUS, в нем есть практически все, что нужно, и его почти не пришлось обрабатывать напильником :), его и рекомендую. IC-RADIUS является вариантом Cistron RADIUS, но для хранения своих баз использует MySQL. Скачать IC-RADIUS можно с ftp://ftp.innercite.com/pub/icradius/. Если у Вас FreeBSD, загляните в коллекцию портов, cd /usr/ports/net/icradius. Q. Как установить и настроить IC-RADIUS? A. Предполагаем, что у Вас FreeBSD с установленной коллекцией портов, и Вы знаете MySQL (текущая версия IC-RADIUS в портах 0.18.1). cd /usr/ports/net/icradius make build После этого, если все прошло успешно make install && make clean cd /usr/local/etc/raddb cp radius.conf.sample radius.conf Это основной конфигурационный файл, открываем его на редактирование и при необходимости изменяем следующие параметры: # адрес хоста на котором находится MySQL server localhost # имя пользователя для доступа к базе login root # пароль для доступа к базе password rootpass Остальное оставляем по умолчанию. Далее нам нужно создать базу и сделать в нее импорт словаря пар атрибутов/значений. Необходимый комплект скриптов и дамп базы после инсталляции находится в /usr/local/share/icradius. Предполагаем, что RADIUS и MySQL находятся у нас на одном хосте, и MySQL уже запущен. cd /usr/local/share/icradius/scripts mysql -p -e "create database radius"; mysql -p radius < radius.db Делаем импорт словаря, для этого нам нужно сначала отредактировать скрипт dictionary.pl, т.е. указать Ваш логин/пароль к базе и, если нужно, имя хоста. my $dbusername = 'root'; my $dbpassword = 'rootpass'; my $dbh = DBI->connect("DBI:mysql:radius:localhost", $dbusername,$dbpassword) || die ...; Далее запускаем: ./dictionary.pl ../raddb/dictionary Подправим чуть-чуть скрипт для запуска, /usr/local/etc/rc.d/icradius.sh, изменим переменную ARGS, которая должна принимать вид ARGS="-yz". Ключ -y указывает, что все детали о каждом запросе необходимо записывать в /var/log/radius.log, ключ -z по желанию, он позволяет включать пароли в radius.log даже при успешных логинах, если пароль в базе хранится в открытом виде (this is very insecure! (c) man radiusd :). Можно также добавить ключ -i <ip-address>, если у Вас multi-homed хост. Note: IC-RADIUS использует порты описанные в /etc/services radius 1812/udp # RADIUS authentication protocol (IANA sanctioned) radacct 1813/udp # RADIUS accounting protocol (IANA sanctioned) если Вы хотите использовать другие порты, измените /etc/services, или укажите при запуске ключ -p <port>, тогда для аутентификации RADIUS будет использовать указанный порт, а для аккаунтинга указанный порт+1. Все, запускаем! /usr/local/etc/rc.d/icradius.sh start ps ax | grep radiusd Должно появиться два процесса, один занимается аутентификацией, а второй аккаунтингом. Q. Я сделал все как написано, а radiusd выпадает в core. A. Причина тут, как правило, одна: radiusd не может соединиться с базой. Т.е. или MySQL не запущен, или неправильно указаны параметры в radius.conf, смотрите /var/log/radius.log, а вообще, при разного рода неприятностях пробуйте запускать radiusd с ключами -x (debug mode) и -f (stay foreground). Q. IC-RADIUS запустился, а что делать дальше, как мне заставить своих пользователей аутентифицироваться по RADIUS? A. Для этого Вам нужно организовать NAS, на который будут обращаться пользователи, и который будет в данном случае RADIUS-клиентом. Для начала нужно создать запись о NAS в таблице nas, поля в таблице следующие: id - id, указывать не нужно, auto_increment nasname - имя NAS shortname - короткое имя NAS, которое будет отображаться в логе. ipaddr - ip адрес NAS type - тип NAS, нужен для скрипта /usr/local/sbin/checkrad, который проверяет на предмет соединения пользователя с данным NAS ports - количество портов на NAS secret - пароль для этого NAS community - snmp community, нужен для checkrad snmp - должен ли делать проверку checkrad на этом NAS (on|off) итак mysql -p radius mysql> INSERT INTO nas VALUES ('', 'localhost.localdomain','localhost', '127.0.0.1','computone','10','secret','public','on'); mysql> quit После этого нужно перегрузить radiusd, /usr/local/etc/rc.d/icradiusd.sh reload, или kill -HUP `cat /var/run/radiusd.pid`. Теперь создадим сам NAS, рассмотрим создание dial-in на FreeBSD с использованием user-level ppp+getty. Для начала настроим один модем на поднятие трубы после первого звонка. Запускаем ppp: ppp> set dev /dev/ttyd0 ppp> set sp 57600 ppp> t ats0=1&w ~. ppp>quit Далее настраиваем сам ppp. cd /etc/ppp touch radius.conf В /etc/ppp/radius.conf # service type radius server secret timeout retries auth 127.0.0.1:1812 secret 5 3 acct 127.0.0.1:1813 secret 5 3 В /etc/ppp/ppp.conf radius: set radius /etc/ppp/radius.conf dial-in: enable chap pap chap80nt chap81 passwdauth set ifaddr x.x.x.x y.y.y.1-y.y.y.254 accept dns load radius Создадим так называемый ppp-shell, который будет запускаться на наших ppp пользователей. touch pppshell.sh chmod 755 pppshell.sh и запишем в него #!/bin/sh exec /usr/sbin/ppp -direct dial-in Более подробную информацию по использованию user-level ppp можно получить в /usr/share/doc/ru/books/ppp-primer и /usr/share/examples/ppp. Теперь укажем в /etc/gettytab программу для ppp аутентификации std.57600|57600-baud:\ :np:sp#57600:\ :pp=/etc/ppp/pppshell.sh: Запускаем getty на нужный нам порт, в /etc/ttys ttyd0 "/usr/libexec/getty std.57600" dialup on secure делаем killall -HUP init и смотрим по ps, появился ли getty на порту. Осталось рассмотреть такую мелочь, как проверка на предмет Multiple logins. Для этого используется скрипт /usr/local/sbin/checkrad, о котором уже упоминалось выше. В нем содержится набор функций для различных типов NAS, для нашего NAS мы указали computeone, соответственно будет использоваться функция computone_finger, которую нужно немного подправить. Для того, чтобы выполнялась проверка по checkrad, значение поля snmp в таблице nas должно быть обязательно on. Приведем условие в этой функции к такому виду If( $line[$num] =~ / $ARGV[3] |^$ARGV[3] / ) { ... Проверка будет выполняться с помощью finger, поэтому просто пропишем в /etc/inetd.conf finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd или проще finger stream tcp nowait/3/10 nobody /usr/bin/w w Добавим в /etc/hosts.allow fingerd: localhost 127.0.0.1 : allow fingerd: ALL : deny или соответственно w: localhost 127.0.0.1 : allow w: ALL : deny дабы посторонние не видели, что у нас тут делается. Делаем killall -HUP inetd (inetd должен быть запущен с ключами -wW), и NAS готов к работе. Q. Все получилось, а как быть с пользователями? A. Существуют две основные пользовательские таблицы radcheck и radreply. В первой хранятся аутентификационные атрибуты пользователя, назовем их check, например пароль, различные временные ограничения, а во второй хранятся атрибуты, которые RADIUS возвращает NAS, например ip адрес, протокол, назовем их reply. Формат таблиц одинаков. id - id, указывать не нужно, auto_increment UserName - имя пользователя Attribute - атрибут Value - значение атрибута Приведем пример создания обычного PPP пользователя. mysql> INSERT INTO radcheck VALUES ('','someuser','Password','somepassword'); mysql> INSERT INTO radcheck VALUES ('','someuser','Simultaneous-Use','1'); Этот атрибут указывает количество одновременно работающих пользователей под таким логином. При попытке зайти под этим логином еще раз, появится соотвествующая запись в radius.log: Error: Multiple logins [someuser] (from nas somenas/port) max. 1 mysql> INSERT INTO radreply VALUES ('','someuser','Service-Type','Framed-User'); mysql> INSERT INTO radreply VALUES ('','someuser','Framed-IP-Address','255.255.255.254'); Значение 255.255.255.254 указывает, что ip адрес должен выдаваться NAS. mysql> INSERT INTO radreply VALUES ('','someuser','Framed-Protocol','PPP'); Указывает какой протокол должен включать NAS на данного пользователя. mysql> INSERT INTO radreply VALUES ('','someuser','Framed-MTU','1500'); Этого вполне достаточно для создания полноценного ppp пользователя. Перезапускать radiusd после добавления нового пользователя или его модификаций не нужно. Q. У меня масса пользователей, так неохота прописывать каждому повторяющиеся атрибуты, что делать? A. Есть соответствующие групповые таблицы, radgroupcheck и radgroupreply. Поля у них те же самые, но вместо поля UserName используется поле GroupName. Для включения пользователя в группу необходимо добавить соотвествующюю запись в таблицу usergroup. Например: mysql> INSERT INTO radgroupcheck VALUES ('','somegroup','Simultaneous-Use','1'); mysql> INSERT INTO radgroupreply VALUES ('','someuser','Service-Type','Framed-User'); mysql> INSERT INTO radgroupreply VALUES ('','someuser','Framed-IP-Address','255.255.255.254'); mysql> INSERT INTO radgroupreply VALUES ('','someuser','Framed-Protocol','PPP'); mysql> INSERT INTO radgroupreply VALUES ('','someuser','Framed-MTU','1500'); mysql> INSERT INTO usergroup VALUES ('','someuser','somegroup'); В таком случае при создании нового пользователя достаточно сделать две записи: одну в radcheck, в которой будет указан пароль, а вторую в usergroup, которая соответственно укажет, к какой группе относится пользователь. Q. Можно ли сделать так, чтобы пользователь автоматически добавлялся в группу? A. Для этого нужно использовать атрибуты Prefix/Suffix и таблицу hints. mysql> INSERT INTO radgroupcheck VALUES ('','somegroup','Prefix','P'); mysql> INSERT INTO radgroupcheck VALUES ('','somegroup','Strip-User-Name','Yes'); Если значение атрибута Strip-User-Name установлено в Yes, это означает сокращение имени пользователя после обнаружения Prefix/Suffix, и только после этого его поиск в базе. Т.е. пользователь должен указать Psomeuser во время дозвона к NAS, а поиск в базе будет проводиться уже по имени someuser. mysql> INSERT INTO hints VALUES ('','DEFAULT','somegroup'); Можно также иметь несколько DEFAULT записей, все они будут просмотрены в порядке hints.id, пока не будет обнаружен соответствующий Prefix/Suffix. Q. Где я могу посмотреть весь набор атрибутов и их значений, которые использует мой RADIUS? A. В таблице dictionary или в файле dictionary, из которого Вы делали импорт в таблицу. Q. Где IC-RADIUS хранит статистику по отработанным ресурсам? A. В таблице radacct. Посмотреть формат таблицы можно так: mysql -p -e "desc radacct" radius Q. Как я могу ограничить пользователя, чтобы он ходил только на определенные адреса? A. Существует такой reply атрибут, как Filter-Id, который передает название фильтра в NAS. Например, user-level ppp обрабатывает этот атрибут как дополнительную метку в файлах /etc/ppp/ppp.linkup и /etc/ppp/ppp.linkdown. mysql> INSERT INTO radreply VALUES ('','someuser','Filter-Id','somefilter'); Соответственно, в конфигурации ppp в файле ppp.linkup прописываем somefilter: set filter out 0 permit 0 0 set filter in 0 permit 0 0 Более подробную информацию по использованию фильтров в user-level ppp можно получить в /usr/share/doc/ru/books/ppp-primer и /usr/share/examples/ppp. Q. Как я могу ограничивать своих пользователей по времени? A. Существуют такие check атрибуты, как: Total-Time-Limit Monthly-Time-Limit Weekly-Time-Limit Daily-time-Limit и reply атрибут Session-Timeout Атрибут Session-Timeout можно установить просто на сессию, или он будет вычисляться в зависимости от указанных check атрибутов и статистики по времени в radacct. Затем RADIUS сервер возвращает этот атрибут к NAS, который, в свою очередь, будет производить отключение пользователя по истечении времени. Если при проверке check атрибутов окажется, что квота этого пользователя закончилась, RADIUS вернет Reject. Значения всех этих атрибутов задаются в секундах. Note: Если Вы используете в качестве NAS user-level ppp, то Вам нужно взять user-level ppp и libradius из cvs, с anoncvs.freebsd.org, потому как параметр Filter-Id и Session-Timeout в нем начали обрабатываться недавно, благодаря моим скромным усилиям :) Q. А как сделать, чтобы пользователь мог логиниться только в определенное для него время? A. Существует check атрибут Login-Time. Например, нам необходимо пускать пользователя в любой день недели кроме субботы, воскресенья с 7:00 до 21:00 вечера, в субботу без ограничений, а в воскресенье с 23:00 до 16:55 следующего дня: mysql> INSERT INTO radcheck VALUES ('','someuser','Login-Time','Wk0700-2100,Sa,Su2300-1655'); Если пользователь не попал в нужный диапазон времени, RADIUS вернет Reject. Q. Могу ли я ограничивать своих пользователей по трафику? A. Уже можете, при условии, что Вы используете в качестве NAS user-level ppp. Мной написаны два патча, пока еще не включенных в user-level ppp и IC-RADIUS, но борьба за это ведется :) Работает это следующим образом, в IC-RADIUS добавлены новые check атрибуты: Total-Octets-Limit Monthly-Octets-Limit Weekly-Octets-Limit Daily-Octets-Limit и два reply атрибута Session-Octets-Limit Octets-Direction Атрибут Session-Octets-Limit можно установить просто на сессию, или он будет вычисляться исходя из установленных check атрибутов и статистики по октетам в radacct. Затем RADIUS сервер возвращает этот атрибут к NAS, который, в свою очередь, будет производить отключение пользователя по истечении лимита. Если при проверке check атрибутов окажется, что квота этого пользователя закончилась, то RADIUS вернет Reject. Значения всех check атрибутов и Sessin-Octets-Limit задаются в октетах (байтах). Атрибут Octets-Direction имеет следующие значения Sum - ограничение по суммарному трафику Input - по входящему трафику Output - по исходящему трафику MaxOveral - по максимальному значению SUM(IN)>SUM(OUT) MaxSession - по максимальному значению, но не за все время работы, а по сессионно, SUM(GREATEST(IN,OUT)) Если Octets-Direction не указан, то по умолчанию RADIUS будет возвращать значение Sum. На IC-RADIUS патч свободно станет на версию 0.18.1 из FreeBSD портов: cd /usr/port/net/icradius make patch cp /xxx/icradius-octets.patch /usr/ports/net/icradius/work cd work/ patch < icradius-octets.patch cd .. make build make install && make clean Note: Если у Вас уже работает IC-RADIUS, то после перекомпиляции, не забудьте добавить в таблицу dictionary новые атрибуты. На user-level ppp патч может не стать, потому как я брал ppp из cvs, но нужные изменения можно внести вручную, там немножко :) Патчи можно скачать: http://www.i.kremenchug.net/patches/icradius-octets.patch.gz http://www.i.kremenchug.net/patches/ppp-octets.patch.gz Note: для FreeBSD 4.x-RELEASE можно использовать патч, который добавляет обработку атрибутов: Filter-Id Session-Timeout Session-Octets-Limit Octets-Direction и исправляет такую ошибку, как назначение RADIUS сервером пользователю ip адреса 255.255.255.254. Скачать можно: http://www.i.kremenchug.net/patches/ppp-4x.patch.gz Установка: cd /usr/src/usr.sbin cp /xxx/ppp-4x.patch . patch < ppp-4x.patch cd ppp make make install Note: также уже существует реализация возможности отключения пользователя по трафику и в pppd, доступно в cvs на ppp.samba.org. Реализовано Alexandr D. Kanevskiy kad@blackcatlinux.com Q. Меня не устраивают пароли в открытом виде, что можно сделать? A. Пароли можно хранить в зашифрованном виде. Шифрование производится системной функцией crypt(). На пользователя/группу должен быть установлен атрибут Auth-Type со значением Crypt-Local. Q. У меня несколько NAS, как я могу ограничить пользователя так, чтобы он мог заходить только на определенный NAS и/или только на определенный порт? A. Добавьте в конфигурацию пользователя/группы check атрибут NAS-IP-Address для ограничения по порту check атрибут NAS-Port-Id. Q. Я создал пользователя и просто хочу его проверить, никуда не дозваниваясь. A. В таком случае можно воспользоваться скриптом /usr/local/share/icradius/script/testrad. Для его использования необходимо установить perl-модуль Authen::Radius cd /usr/ports/security/p5-Authen-Radius make build make install && make clean Также поставьте симлинк ln -s /usr/local/share/icradius/raddb /etc/raddb, именно там скрипт будет искать словарь атрибутов/значений. Q. Как я могу посмотреть, кто на какой NAS под каким ip залогинен в данный момент? A. /usr/local/share/icradius/scripts/radwho. Скрипт просматривает таблицу radacct на предмет незакрытых сессий, т.е. поле AcctStopTime = 0. Не забудьте изменить в скрипте значения переменных $db_user, $db_pass, $db_host, $db_db, если нужно. Значение переменной $fingerd измените с 1 на 0. Note: Бывают моменты, когда сессия завершилась, а стоп запись не закрылась, получается так называемая "подвисшая сессия". При правильно настроенной проверке по checkrad такие сессии будут удаляться автоматически, и в radius.log будет появляться запись вида: Error: Deleting stale session [someuser] (child pid xxxx) (from nas somenas/port) Q. Как я могу посмотреть, кто, когда логинился? A. /usr/local/share/icradius/scripts/radlast, не забудьте изменить соответствующие переменные. Q. Есть ли какие-нибудь web-интерфейсы для администрирования и просмотра статистики? A. Есть, административный интерфейс /usr/local/share/icradius/scripts/radius.cgi и пользовательский интерфейс /usr/local/share/icradius/scripts/usage.cgi Q. Что если мне надо перенести мою базу на другой хост? A. Сливаем дамп на одном хосте mysqldump -p radius > dump.sql потом заливаем его на другом mysql -p -e "create database radius" mysql -p radius < dump.sql и соотвественно правим /usr/local/etc/raddb/radius.conf Q. Мне этого мало, что я еще могу почитать про IC-RADIUS? A. Ну, собственно, с чего и должны были начать, man radiusd, оригинальной документации и FAQ, поставлямых в комплекте с IC-RADIUS :). Также можете подписаться на icradius-user maillist http://lists.ic-isp.com/mailman/listinfo/icradius-user.

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, urchin (ok), 15:12, 17/05/2005 [ответить]  
  • +/
    IC Radius уже не развивается?
    Или продвижения есть?
     
  • 2, nkk (ok), 22:33, 03/03/2010 [ответить]  
  • +/
    В портах - нету, доменное имя - не резолвится. Труба =(
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру