AAA с FreeRADIUS v2.0

Итак, начиная с версии 0.6.0 кардинально пересмотрена механика взаимодействия FreeRADIUS с Ubilling. Следовательно, решение описанное здесь больше не является актуальным.

Установка на FreeBSD 9.3 amd64

Первым делом установим сам FreeRADIUS с поддержкой MySQL и USER из портов (с 0.6.7 уже предустановлен и требует только включения в rc.conf):

# portsnap fetch extract
# cd /usr/ports/net/freeradius2
# make WITH_MYSQL=yes WITH_USER=yes BATCH=yes install clean

После успешного завершения установки добавим в `/etc/rc.conf`:

radiusd_enable="YES"

Далее заменим стандартные конфигурационные файлы нашими заготовками. Никто, кстати, не говорит, что вам нужно использовать строго наши заготовки, но никто ответственности не понесёт за вашу фантазию:

# cd /usr/local/www/apache24/data/billing
# cp -r ./docs/freeradius2/raddb/* /usr/local/etc/raddb/

По пути заливаем дамп таблиц FreeRADIUS в базу данных. Здесь предполагаем, что база Ubilling - stg, пользователь root, а потом еще и пароль рута попросят:

# mysql -u root -p stg < ./docs/freeradius2/dump.sql

Потом приступаем к конфигурированию соединения FreeRADIUS с БД Ubilling, редактируя следующие параметры в /usr/local/etc/raddb/sql.conf:

Параметр Описание
server Хост/IP сервера базы данных
port Порт сервера базы данных
login Пользователь
password Пароль
radius_db Имя базы данных

Если все закончили, можно попробовать запустить FreeRADIUS, но пока в debug-режиме:

# radiusd -X

И если вы увидели нечто похожее на код ниже - можно продолжать дальше…

... adding new socket proxy address * port 10049
Listening on authentication address * port 1812
Listening on accounting address * port 1813
Listening on command file /var/run/radiusd/radiusd.sock
Listening on authentication address 127.0.0.1 port 18120 as server inner-tunnel
Listening on proxy address * port 1814
Ready to process requests.

Включение поддержки FreeRADIUS самим Ubilling'ом

Всего лишь в `config/alter.ini` заменяем значение опции FREERADIUS_ENABLED:

FREERADIUS_ENABLED = 1

После этого вы сможете:

  1. Редактировать сети, указывая какие используют RADIUS, а какие нет (по-умолчанию - нет);
  2. Указывать для каждой сети как check так и reply атрибуты для всей сети или для каждого пользователя (галочка «Всем»)
  3. Указывать для каждого пользователя как check так и reply атрибуты с помощью «чёрной магии» в профиле пользователя

Настройка атрибутов

Для каждого случая возможны различные наборы атрибутов. Поэтому их настройка будет приводиться для отдельных решений в соответствующих разделах документации. Для добавления/редактирования атрибутов предусмотрена удобная форма на подобие этой:

Авторизация пользователей не по логину

Для некоторых систем, необходимо изменить стандартный способ авторизации по логину, используемый большинством программных решений (MPD5, Accel-PPP, IEEE 802.1x) на авторизацию по IP (например, Linux ISG) или MAC (например, MikroTik DHCP). Для этого, с релиза 0.6.1 rev 3933 предусмотрена удобная форма, которая позволит вам в 2 клика изменить все ключи в базе данных для какой либо сети. Для решений, где необходимо будет изменить стандартный способ авторизации по логину, мы сообщим нужное значение для этого параметра в документации.

Макросы

Макрос ({*}) Значение Поле MySQL
user[login] Логин пользователя `users`.`login`
user[Password] Пароль пользователя `users`.`Password`
user[Tariff] Тариф пользователя `users`.`Tariff`
user[state] Состояние пользователя
nethost[ip] IP пользователя `nethosts`.`ip`
nethost[mac] MAC пользователя `nethosts`.`mac`
network[id] ID сети `networks`.`id`
network[ip] IP сети `networks`.`desc` [*/]
network[cidr] CIDR сети `networks`.`desc` [/*]
network[start] Начальный IP сети `networks`.`start`
network[end] Конечный IP сети `networks`.`end`
network[desc] IP/CIDR сети `networks`.`desc`
switch[ip] IP адрес свитча `switches`.`ip`
switch[port] Номер порта `switchportassign`.`port`
speed[up] Скорость вверх `speeds`.`speedup`
speed[down] Скорость вниз `speeds`.`speeddown`

Заметка: Замена макроса происходит в любом месте значения атрибута, но только одного:

mpd-pipe  += "1=bw {speed[down]}Kbyte/s",
mpd-pipe  += "5=bw {speed[up]}Kbyte/s",

MPD5 породит для пользователя со скоростью 4000/2000 нечто такое:

ipfw pipe 10000 config bw 4000Kbyte/s
ipfw pipe 10001 config bw 2000Kbyte/s

Об учёте трафика

Сам сервер FreeRADIUS вести учёт трафика не будет! Трафик должен учитываться при помощи протокола NetFlow: сенсором будет выступать сам RADIUS-клиент, который будет отправлять статистику на коллектор, в нашем случае модуль cap_nf ядра системы. Как это сделать будет описано отдельно в документации для выбранного вами решения

Как проверить все ли хорошо?

При запущенном в одном окне

# radiusd -X 

делаем в соседнем что-то вроде

# radtest testlogin testpassword 127.0.0.1 0 dec0071981b1

Где testlogin и testpassword как несложно догадаться - логин/пароль существующего пользователя которого мы проверяем на авторизуемость, а dec0071981b1 это Radius secret нашего локального сервера доступа. Откуда он берется? А вот откуда:

Что мы должны увидеть в результате? А вот что-то такое:

root@test93x64:/usr/home/ubilling # radtest testlogin testpassword 127.0.0.1 0 dec0071981b1
Sending Access-Request of id 154 to 127.0.0.1 port 1812
	User-Name = "testlogin"
	User-Password = "testpassword"
	NAS-IP-Address = 127.0.0.1
	NAS-Port = 0
	Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=154, length=32
	Framed-IP-Address = 172.16.0.3
	Framed-IP-Netmask = 255.255.255.255

В случае если мы увидим что-то вроде

root@test93x64:/usr/home/ubilling # radtest testlogin testpassword 127.0.0.1 0 dec0071981b1
radclient:: Failed to find IP address for test93x64
radclient: Nothing to send.

стоит обратить внимание как минимум на /etc/hosts на тему добавления туда нашего хостнейма в виде

127.0.0.1              127.0.0.1              test93x64 test93x64.localdomain

Блокирование доступа должникам, отключенцам и отморозками

Для запрещения авторизации пользователям, которые заведомо должны быть отключены вы можете использовать кастомный дамп, следующим образом

# cd /usr/local/www/apache24/data/billing
# mysql -u root -p stg < ./docs/freeradius2/dump-ignore-debtors.sql
freeradius.txt · Последние изменения: 2015/05/10 14:30 — nightfly
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki