Freeradius + Daloradius на ubuntu 20.04 для wi-fi корпоративной сети

Необходимо хоть как-то централизовать управление большим количеством wi-fi точек на предприятии. Для этого принято решение использовать freeradius с web мордой daloradius. Но так как бюджета на эти дела не выделено совсем, а в качестве точек доступа у нас tp-link, dlink и аж одна cisco small office то будем городить костыли ,учетки для авторизации будет вести freeradius а управлять скоростью и фильтрами сайтов , будет mikrotik  rb1100ahx4, благо хоть он есть...

И так приступим.

Установим на сервер ubuntu 20.04 сам радиус сервер freeradius.

apt-get install freeradius freeradius-mysql mysql-server mysql-client

Создадим базу данных с именем radius, пользователя MySQL с именем radius, разрешим права доступа на базу данных radius пользователю radius.

CREATE DATABASE radius CHARACTER SET UTF8 COLLATE UTF8_BIN;

CREATE USER 'radius'@'%' IDENTIFIED BY 'PassWord';

GRANT ALL PRIVILEGES ON radius.* TO 'radius'@'%';

FLUSH PRIVILEGES;

QUIT;

Импортируем шаблон базы данных для нашей новой базы.

apt install locate

mysql -u radius -p radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql

Создадим символическую ссылку для включения модуля Freeradius MySQL.

ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/

Настроим наш сервер radius на работу с базой данных mysql:

nano /etc/freeradius/3.0/mods-enabled/sql
sql {
driver = "rlm_sql_mysql"
dialect = "mysql"
server = "localhost"
port = 3306
login = "radius"
password = "PassWord"
radius_db = "radius"
acct_table1 = "radacct"
acct_table2 = "radacct"
postauth_table = "radpostauth"
authcheck_table = "radcheck"
groupcheck_table = "radgroupcheck"
authreply_table = "radreply"
groupreply_table = "radgroupreply"
usergroup_table = "radusergroup"
delete_stale_sessions = yes
pool {
start = ${thread[pool].start_servers}
min = ${thread[pool].min_spare_servers}
max = ${thread[pool].max_servers}
spare = ${thread[pool].max_spare_servers}
uses = 0
retry_delay = 30
lifetime = 0
idle_timeout = 60
}
read_clients = yes
client_table = "nas"
group_attribute = "SQL-Group"
$INCLUDE ${modconfdir}/${.:name}/main/${dialect}/queries.conf
}

Включим логирование, чтобы понимать кто и когда ломится на наши точки доступа.

nano /etc/freeradius/3.0/radiusd.conf

находим секцию "log {" и правим в ней:

auth = yes

auth_reject = yes

 auth_badpass = yes

service freeradius restart

Установим WEB морду daloradius.

Установим все зависимости:

apt-get install apache2 php libapache2-mod-php php-mysql unzip php-pear php-db php-mail php-gd php-common php-mail-mime

Скачиваем daloradius, распаковываем в директорию нашего apache.
wget https://github.com/lirantal/daloradius/archive/master.zip

unzip master.zip

mv daloradius-master /var/www/html/daloradius

Импортируйте шаблон базы данных Daloradius в MySQL.

cd /var/www/html/daloradius/contrib/db/

mysql -u radius -p radius < fr2-mysql-daloradius-and-freeradius.sql

mysql -u radius -p radius < mysql-daloradius.sql

В моей версии не хватало одного столбца в radacct

ALTER TABLE radacct ADD acctupdatetime datetime NULL default NULL AFTER acctstarttime;

Настроим daloradius на работу с mysql:

nano /var/www/html/daloradius/library/daloradius.conf.php

$configValues['CONFIG_DB_PORT'] = '3306';

$configValues['CONFIG_DB_USER'] = 'radius';

$configValues['CONFIG_DB_PASS'] = 'PassWord';

$configValues['CONFIG_DB_NAME'] = 'radius';

Установим правильное разрешение для файла в папке Daloradius.

chown www-data.www-data /var/www/html/daloradius/* -R

Рестартуем сервисы:

service freeradius restart
service apache2 restart
systemctl enable freeradius

Проверим доступ к daloradius:

http://192.168.1.2/daloradius

login: administrator

pass: radius

Как же пользоваться этой чудо web мордой я до конца не разбирался, так как оборудование у меня примитивное, поэтому краткие настройки тут:

Управление с помощью daloradius.

На вкладке HOME в разделе Logs в Radius Log можно посмотреть лог радиус сервера, там кто, когда логинелся, кому отказано, кому разрешено, а главное их  mac адреса, и если у нас есть клиент который тупит и не правильно пишет пароль мы это видим, если это вип клиент который подключен впервые мы можем взять его мак и по нему дат супер права на Mikrotik.

  • Добавим первую точку доступа.

Вкладка Management -> NAS -> New Nas

Заполняем поля:

Nas IP/host (IP адрес точки доступа)

Nas Secret (секретный ключ, он же указывается и на точке)

Nas Type (модель нашей точки, для ddwrt это other)

NAS Shortname (имя точки, как она будет называться в радиус сервере)

  • Добавим первую группу для ограничение доступа пользователей только на определенные точки доступа.

Вот тут логика "железная" - группа для пользователя создается во вкладке Profiles.

Вкладка Management -> Profiles -> New Profiles

Заполняем поля:

Profile Name (имя профиля, оно же имя группы)

Vendor: dictionary.rfc2865 (словарь)

Attribute: Nas-IP-Address (атрибут который сравнивает ip с которого пришел запрос на авторизацию, ip точки доступа)

Жмем add Attribute, внизу добавится наш атрибут заполняем поля:

Value: (ip адрес точки доступа)

Op: == (оператор)

Target: check (проверять запрос на подключение, reply - при ответе)

Добавим еще атрибут:

Vendor: dictionary.freeradius.internal (словарь)

Attribute: Auth-Type

Жмем add Attribute, внизу добавится наш атрибут заполняем поля:

Value: Reject

Op:  := 

Target: check

Этим самым создадим правило которое будет отбрасывать логины с  точки доступа с ip который мы написали выше. Пользователь может состоять в нескольких группах, тем самым будет заблокирован на нескольких точках доступа.

  • Добавим первого пользователя.

Вкладка Management -> Users-> New User

Заполняем поля:

Username (login для авторизации)

Password (пароль),

Password Type (в каком виде хранятся пароли Cleartext-Password)

Group (выбираем группу для пользователя)

Настроим Mikrotik.

  • Создадим пул адресов для DHCP

IP->Pool->"+"

name wifi-pool

Address 192.168.1.12-192.168.1.254

OK

  • Настроим DHCP сервер

IP->DHCP server

Вкладка DHCP->"+"

name: wifi-dhcp

interface:  eth1

Adress Pool: wifi-pool

Вкладка Networks->"+"

Adress: 192.168.1.0/24

Gateway: 192.168.1.1

DNS Server: 192.168.1.2

Ну а про ограничение доступа к ресурсам для этой подсети писать не буду это отдельная тема, так же как и для вип клиентов просто жесткая привязка mac адреса к выдаваемому ip c кусочка этой подсети для которой будет все разрешено. 

Источники:

https://techexpert.tips/ru/freeradius-ru/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-freeradius-%D1%81-%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D0%B5%D0%B9-mysql-%D0%B2-ubuntu-linux/