последняя стабильная
    версия: 3.4.0rc1
    главная     скачать     документация     поддержка     форум     разработка

Документация

Releases

База знаний

Примеры конфигурации

 

Поддержка RADIUS


Поддержка RADIUS появилась в NeTAMS 3.3.0 (CURRENT) начиная с номера билда 2378 (8 апреля 2005г.)

Что именно поддерживается

В NeTAMS реализована поддержка авторизации доступа к ресурсам внешний сервер-доступа и радиус-сервер, когда последний обращается за паролем и атрибутами к внутренним структурам netams через его Telnet API. Также возможно использование RADIUS-сервера для контроля доступа к статическим веб-страницам. Таким образом, с точки зрения организации провайдерства NeTAMS является базой данных для радиус-сервера. Прозрачно поддерживаются любые методы проверки паролей (PAP/CHAP/MS-CHAP/EAP), т.к. это дело FreeRADIUS а не NETAMS; любое число внешних серверов доступа.
Поддерживается отправка аккаунтинга (данных о трафике) в сторону радиус-сервера через новый тип сервиса storage... type radius (документация).

Что не поддерживается

Не поддерживается контроль доступа и проверка паролей для пользователей NeTAMS посредством радиус-сервера (т.е. функциональность радиус-клиента; по всей видимости этого и не требуется). Не поддерживается сохранение аккаунтинга внешнего сервера доступа в базе netams (через новый сервис типа data-source; в планах).

Как работает

Новые функции сосредоточены в:
  1. поддержке авторизации через telnet-интерфейс и/или командную строку
  2. модуле rlm_netams, расширяющего сервер FreeRADIUS
  3. поддержке авторизации доступа к HTML-страницам через mod_auth_radius+новая команда сервиса html (опционально)
В качестве сервера доступа, используемого в качестве клиента нового механизма авторизации, проверялись pppoe+ppp (FreeBSD 5.3) и Windows 2003 RRAS. Таким образом, NeTAMS может успешно авторизовывать и контролировать трафик dialup- и pppoe- и прочих коммутируемых соединений, без необходимости дублировать логины/пароли/настройки в текстовых конфигах и базах данных.

Порядок работы с сервером доступа:
  1. При поступлении запроса на соединение сервер доступа осуществляет проверку прав звонящего (логин/пароль) у радиус-сервера.
  2. Радиус-сервер вызывает код модуля rlm_netams, который извлекает требуемые атрибуты из запроса аутентификации, формирует сообщение, и передает его работающему демону NeTAMS посредством Telnet API.
  3. На основании полученного запроса демон NeTAMS разрешает или запрещает доступ. Если доступ разрешен, в сторону rlm_netams (т.е. радиус-сервера) передаются ряд атрибутов, в частности IP-адрес клиента и набор фильтров. Если сервер передал параметр "Caller-ID" (для PPPoE это МАС-адрес звонящего), и для юнита установлен параметр "mac ...", будет проводиться дополнительный контроль и по этому признаку.
  4. rlm_netams копирует ответ демона, формируя RADIUS-ответ для сервера доступа.
  5. сервер доступа отвергает или принимает клиента, устанавливая необходимые параметры соединения.
Порядок работы при авторизации веб-доступа:
  1. Сервис HTML генерирует статические HTML-страницы с данными о трафике, админскую часть и пользовательскую часть. При этом создаются также файлы .htaccess со списком "правильных" пользователей данного URI, файл паролей .htpasswd не поддерживается - заместо него в глобальном конфигурационном файле apache присутствуют записи о RADIUS-авторизации.
  2. HTTP-клиент (бровзер) пытается обратиться к защищенному при помощи .htaccess ресурсу. Происходит запрос пароля (через код 401)
  3. Apache вызывает модуль mod_auth_radius, сообщая тому логин-пароль клиента. Запрос на авторизацию передается радиус-серверу.
  4. Радиус-сервер вызывает код модуля rlm_netams, который извлекает логин-пароль из запроса аутентификации, формирует сообщение, и передает его работающему демону NeTAMS посредством Telnet API.
  5. На основании полученного запроса демон NeTAMS проверяет свою базу пользователей и юнитов, разрешает или запрещает доступ. Ответ пересылается в RADIUS-сервер.
  6. rlm_netams копирует ответ демона, формируя RADIUS-ответ для Apache.
  7. Apache пускает пользователя (бровзер) на страницу, или не пускает его.

Как настроить

Настройка PPPoE/PPP
Очень рекомендуем почитать теорию и примеры и настроить доступ безо всякого netams+radius, для начала.

Допустим что NeTAMS, FreeRADIUS, PPP, PPPoE крутятся на одной машине 192.168.0.1, внешний интерфейс fxp0.
### /etc/ppp/ppp.conf #####################################
default:
 enable dns         # request DNS info (for resolv.conf)

pppoe:
  set log Phase Chat LCP IPCP CCP tun command
  set radius /etc/ppp/radius.conf
  set speed sync
  set timeout 240
  set ctsrts off
  set accmap 000a0000
  enable lqr
  set cd 5
  enable pap chap
  set ifaddr HISADDR 192.168.0.253 # .253 is the server's end
#############################################################
### /etc/ppp/radius.conf ####################################
auth 192.168.0.1 secretkey 5 3
#############################################################
Запуск сервера PPPoE:
/usr/libexec/pppoed -p \* -l pppoe fxp0
Настройка FreeRADIUS
Для начала надо собрать FreeRADIUS из портов или исходников. Пакет не подойдет, т.к. там отсутствуют необходимые заголовочные файлы для сборки нашего собственного модуля.
cd /usr/ports/net/freeradius/
make && make install
Переходим в дистрибутив NeTAMS и копируем наш модуль rlm_netams куда следует; потом собираем:
cd ~/netams/addon/
cp -rp rlm_netams /usr/ports/net/freeradius/work/freeradius-1.0.1/src/modules/
cd /usr/ports/net/freeradius/work/freeradius-1.0.1/src/modules/rlm_netams
gmake
gmake install
Правим конфигурацию FreeRADIUS, чтобы использовать локальный сервер доступа с правильными паролями:
### /usr/local/etc/raddb/clients.conf #######################
client 192.168.0.1 {
        secret = secretkey
        shortname = pppoe_server
        }
#############################################################
И чтобы использовать наш rlm_netams:
### /usr/local/etc/raddb/radius.conf #######################
...
modules {
	...
	netams {
		server = "192.168.0.1"	# netams server IP
		port  = 20001   		# netams server port
		login = "freeradius"	# netams access username
		password = "ABCDEF" 	# netams access password
		swap-inout = "yes" 		# swap IN and OUT counters for accounting
	}
}

authorize {
	...
	netams
}
	
authenticate {
	...
	netams
}
#############################################################
Настройка NeTAMS
Очень желательно добавить специального пользователя, от имени которого будет идти подключение к NeTAMS:
### /usr/local/etc/netams.cfg ###############################
user oid 0832ED name freeradius password ABCDEF permit radius
#############################################################
Если вы хотите использовать авторизацию доступа к веб-страницам со статистикой через mod_auth_radius, измените:
### /usr/local/etc/netams.cfg ###############################
service html
...
htaccess radius
...
#############################################################
Настройка Apache (опционально)
Берем mod_auth_radius отсюда: http://www.freeradius.org/mod_auth_radius/
Компилируем, ставим:
apxs -i -a -c mod_auth_radius.c
Настраиваем апач:
...
<IfModule mod_auth_radius.c>
AddRadiusAuth 192.168.0.1:1812 secretkey 5:3
AddRadiusCookieValid 5
</IfModule>
...
<Location /stat>
AllowOverride All
</Location>
...
Запускаем все хозяйство. Допустим, в конфигурационном файле у нас присутствует юнит с именем client1 и паролем abc, у него установлен адрес 192.168.0.111, и есть политика фильтрации с именем filter1 и OID ABCFEF.

Можно проверить работоспособность NeTAMS через утилиту netamsctl:
~#netamsctl radius auth nas login client1 password abc nas-id TEST
1 2
Framed-IP-Address: 192.168.0.111
Filter-ID: ABCFEF filter1
Здесь в первой строке вывода число "1" означает "успешно", далее "2" говорит от том, что последуют две строки параметров.
Первая строка передает IP-адрес этого юнита, Вторая - OID и имя фильтра (может быть затем использовано вашим скриптом if-up). В случае неправильного пароля:
~#netamsctl radius auth nas login client1 password abcef nas-id TEST
0 password incorrect for client1
В обоих случаях информация о событии попадет в лог-файл и таблицу EVENTS базы SQL.

Узнать, как происходит работа RADIUS-сервера, что кому куда передается, можно запустив этот сервер с ключом -X:
/usr/local/sbin/radiusd -X

TODO

  • Сделать обработку аккаунтинга, поступающего от NAS-сервера. Видимо, для этого придется сделать новый тип data-source.
  • Протестировать работу сервера доступа Cisco (никто не хочет дать тестовый доступ?)
  • Сделать более жестким ограничение на тип передаваемого фильтра: сделать новый target radius-filter XXX. Сделать пример скрипта, который этот XXX обрабатывает.
  • Сделать аналог rlm_netams для другого RADIUS-сервера? FreeRADIUS считается наиболее распространенным.

Рейтинг@Mail.ru