Необходимо хоть как-то централизовать управление большим количеством wi-fi точек на предприятии. Для этого принято решение использовать freeradius с web мордой daloradius. Но так как бюджета на эти дела не выделено совсем, а в качестве точек доступа у нас tp-link, dlink и аж одна cisco small office то будем городить костыли ,учетки для авторизации будет вести freeradius а управлять скоростью и фильтрами сайтов , будет mikrotik rb1100ahx4, благо хоть он есть...
И так приступим.
Установим на сервер ubuntu 20.04 сам радиус сервер freeradius.
Создадим базу данных с именем 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.
Настроим наш сервер radius на работу с базой данных mysql:
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
}
Включим логирование, чтобы понимать кто и когда ломится на наши точки доступа.
находим секцию "log {" и правим в ней:
auth = yes
auth_reject = yes
auth_badpass = yes
Установим WEB морду daloradius.
Установим все зависимости:
Скачиваем 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
Настроим daloradius на работу с mysql:
$configValues['CONFIG_DB_PORT'] = '3306';
$configValues['CONFIG_DB_USER'] = 'radius';
$configValues['CONFIG_DB_PASS'] = 'PassWord';
$configValues['CONFIG_DB_NAME'] = 'radius';
Установим правильное разрешение для файла в папке Daloradius.
Рестартуем сервисы:
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 кусочка этой подсети для которой будет все разрешено.
Источники: