Храним пользователей FreeRADIUS в безе данных

FreeRADIUS сервер

Всем привет!
Вторая часть материала по настройке FreeRADIUS сервера
Первая часть материала рассказала, как настроить RADIUS сервер для авторизации на WI-FI точках доступа с хранением пользователей в текстовом файле.
В этой части мы настроим связку FreeRADIUS с базой данных MySQL, установим NGINX, PHP и web-интерфейс для добавления-удаления пользователей.

Итак мы имеем настроенный FeeRADIUS с хранением пользователей в текстовом файле users
Считаем, что на сервере больше ничего не установлено, пойдем с конца и установим в таком порядке:

  1. NGINX — как WEB-сервер
  2. PHP с PHP-FPM — сам PHP и CGI модуль для обработки PHP в NGINX
  3. MySQL — база данных в которой будем хранить пользователей RADIUS
  4. DaloRADIUS — WEB-интерфейс к базе данных RADIUS

Как и в прошлой статье все будем ставить через порты FreeBSD

Обновляем порты:

# portsnap fetch update

Ставим NGINX:

# cd /usr/ports/www/nginx
# make install clen

В конфиге в принципе оставляем все по умолчанию, я лично убираю поддержку IPv6 и модули проксирования для почты

Т.к. DaloRADIUS давно не разрабатывается, в PHP7.2 мне не удалось его запустить, т.к. синтаксис языка изменился, ковыряться в исходниках желания у меня не было, поэтому ставим PHP версии 5.6:

# cd /usr/ports/lang/php56
# make install clean

В опциях оставляем все по умолчанию, я снимаю только поддержку IPv6
Ставим модули PHP:

# cd /usr/ports/lang/php56-extension
# make install clean

В опциях указываем поддержку
[X]  CURL
[X] GD
[X]  MySQLi
[X] SESSION
[X] GD
[X] MBSTRING
Ставим еще модуль для PHP:

# cd /usr/ports/databases/pear-DB
# make install clean

Настроим PHP:

# cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

Укажем нашу timezone (указываем свою:))

# vi /usr/local/etc/php.ini
date.timezone = Europe/Moscow

Разрешаем запуск php-fpm:

# echo php_fpm_enable=\"YES\" >> /etc/rc.conf

Стартуем php_fpm:

# /usr/local/etc/rc.d/php-fpm start

Проверим:

# sockstat | grep 9000
www      php-fpm    11229 0  tcp4   127.0.0.1:9000        *:*
www      php-fpm    11228 0  tcp4   127.0.0.1:9000        *:*
root     php-fpm    11227 8  tcp4   127.0.0.1:9000        *:*

Настроим NGINX и создадим конфигурацию виртуального WEB-сервера для обслуживания  DaloRADIUS:
Добавим в конфигурационный файл NGINX информацию откуда брать дополнительные конфигурации хостов:

# vi /usr/local/etc/nginx/nginx.conf
В САМОМ КОНЦЕ ПЕРЕД ЗАКРЫВАЮЩЕЙ СКОБКОЙ ПИШЕМ
include /usr/local/etc/nginx/conf.d/*.conf;

Теперь NGINX будет брать дополнительные конфигурации из директории usr/local/etc/nginx/conf.d/ с расширением .conf, на мой взгляд так удобней нежели писать все хосты в один nginx.conf, один конфиг — один хост.
Создаем директорию для конфигураций:

# mkdir /usr/local/etc/nginx/conf.d

Создаем файл конфигурации:

# vi /usr/local/etc/nginx/conf.d/freeradius.conf

В который пишем примерно следующее, вам собственно только имя сервера поменять (MYNAME) придется, в остальном конфиг рабочий:

server {
        listen 80;
        server_name radius.MYNAME.ru;
        root /usr/local/www/daloradius/;
        error_log /var/log/nginx/daloradius/error.log info;
        access_log /var/log/nginx/daloradius/access.log;

location / {
        index index.php;
}


location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;

}
}

Создадим директорию для лог файлов нашего виртуального хоста:

# mkdir /var/log/nginx/daloradius/

Небольшое отступление, для следующего шага нам необходим установленный unzip (экстрактор zip файлов) в системе, проверьте пожалуйста вывод команды unzip
Если не найдено, то надо поставить:

# cd /usr/ports/archivers/zip && make install clean

Создадим временную директорию в своем профиле, скачаем DaloRADIUS, распакуем, переименуем, перенесем в нужное место и удалим хвосты:

# mkdir ~username/tmp
# cd ~username/tmp
# fetch https://github.com/lirantal/daloradius/archive/master.zip
# unzip master.zip
# mv daloradius-master/ daloradius
# mv daloradius /usr/local/www
# chown -R www:www /usr/local/www/daloradius
# cd ../ && rm -rf tmp

Проверим корректность конфигурации NGINX:

# nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

Разрешим и запустим NGINX:

# echo nginx_enable=\"YES\" >> /etc/rc.conf
# /usr/local/etc/rc.d/nginx start

Ставим MySQL:

# cd /usr/ports/databases/mysql57-server
# make install conf

Разрешаем запуск MySQL и стартуем:

# echo mysql_enable=\"YES\" >> /etc/rc.conf
# /usr/local/etc/rc.d/mysql-server start

В версии MySQL 5.7 для пользователя root создается рандомный пароль, который можно посмотреть:

# less /root/.mysql_secret

Создаем базу radius и пользователя radius с паролем radiuspassword в MySQL:

# mysql -u root -p
CREATE DATABASE radius;
GRANT ALL ON radius.* TO radius@localhost IDENTIFIED BY "radiuspassword";
FLUSH PRIVILEGES;
\q

Импортируем схемы базы данных:

# mysql -u radius radius -p < /usr/local/etc/raddb/mods-config/sql/main/mysql/schema.sql
# mysql -u radius radius -p < /usr/local/www/daloradius/contrib/db/fr2-mysql-daloradius-and-freeradius.sql
# mysql -u radius radius -p < /usr/local/www/daloradius/contrib/db/mysql-daloradius.sql

Связываем FreeRADIUS с MySQL:

# ln -s /usr/local/etc/raddb/mods-available/sql /usr/local/etc/raddb/mods-enabled/
# vi /usr/local/etc/raddb/mods-enabled/sql
driver = "rlm_sql_mysql"
dialect = "mysql"
server = "localhost"
port = 3306
login = "radius"
password = "radiuspassword"
radius_db = "radius"
read_clients = yes

Передергиваем FreeRADIUS:

# /usr/local/etc/rc.d/radiusd restart

Проверяем корректность просмотром лога:

# tail -n 1 /var/log/radius.log
Thu Sep 20 16:14:32 2018 : Info: Ready to process requests

Связываем DaloRADIUS с базой данных:

# vi /usr/local/www/daloradius/library/daloradius.conf.php
$configValues['CONFIG_DB_HOST'] = 'localhost';
$configValues['CONFIG_DB_PORT'] = '3306';
$configValues['CONFIG_DB_USER'] = 'radius';
$configValues['CONFIG_DB_PASS'] = 'radiuspassword';
$configValues['CONFIG_DB_NAME'] = 'radius';

Заходим по адресу http://radius.MYNAME.ru
Авторизуемся:
login: Administrator
password: radius
В CONFIG—>Language Settings можно установить русский язык
Идем в Management добавляем пользователя и пробуем авторизоваться

Ну собственно все:)

P.S.

На мой взгляд решение ставить DaloRADIUS так себе:)
Во первых проект заброшен, во вторых для меня он избыточен.
С моим количеством пользователей, я спокойно могу обойтись хранением пользователей в файле, но с наличием базы и фронтенда к ней, появляется возможность легко делегировать управление пользователями любому лицу. Будет время напишу свою мини-админку.

UPDATE 17.10.2019 Проект Daloradius ожил, выкатили новый билд version 1.1-2 / 08 Aug 2019
В поставке с ним идут обновленные схемы sql contrib/db/mysql-daloradius.sql при установке этой версии используйте эту схему для MySQL (иначе будут ошибки при использовании схем из поставок FreeRadius3)

Рейтинг
( 1 оценка, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.