Установка сервера Freeradius на CentOS 8

Thank you for reading this post, don't forget to subscribe!

Цель дан­ной инструк­ции — пока­зать при­мер раз­вер­ты­ва­ния и исполь­зо­ва­ния сер­ве­ра аутен­ти­фи­ка­ции на базе про­то­ко­ла RADIUS с помо­щью Freeradius. Мы выпол­ним его уста­нов­ку на CentOS 8 — в ито­ге мы получим:

  • RADIUS-сер­вер на базе Freeradius 3.
  • Хра­не­ние поль­зо­ва­те­лей как в обыч­ном фай­ле, так и СУБД MariaDB/MySQL.
  • Веб-интер­фейс для управ­ле­ния записями.

Подготовка сервера

Для кор­рект­ной рабо­ты Freeradius необ­хо­ди­мо настро­ить бранд­мау­эр и отклю­чить SELinux.

1. Firewalld

Созда­ем пра­ви­ло для раз­ре­ше­ния сер­ви­са radius (пор­ты 1812 и 1813):

firewall-cmd --permanent --add-service=radius

firewall-cmd --reload

2. SELinux

В нашей инструк­ции мы про­сто отклю­чим SELinux

setenforce 0

sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

Установка и настройка Freeradius

Уста­нов­ка в CentOS выпол­ня­ет­ся командой:

dnf install freeradius freeradius-utils

* мы уста­но­вим не толь­ко сам freeradius, но и ути­ли­ты для рабо­ты с ним.

Раз­ре­шим авто­за­пуск сер­ви­са и запу­стим его:

systemctl enable radiusd

systemctl start radiusd

Откры­ва­ем файл:

vi /etc/raddb/users

… и в самый низ добавляем:

test Cleartext-Password := "test123"

* мы созда­ли поль­зо­ва­те­ля test с паро­лем test123.

Пере­чи­ты­ва­ем кон­фиг radius:

systemctl reload radiusd

Дела­ем тесто­вый запрос:

radtest test test123 localhost 1218 testing123

* где:

  • test — учет­ная запись, кото­рую мы проверяем.
  • test123 — пароль от учет­ной запи­си test.
  • localhost — сер­вер, к кото­ро­му мы обра­ща­ем­ся (в нашем слу­чае, локальный).
  • 1218 — порт, на кото­ром слу­ша­ет запро­сы freeradius.
  • testing123 — пароль для под­клю­че­ния кли­ен­том к сер­ве­ру radius. Дан­ный пароль созда­ет­ся по умол­ча­нию для локаль­ных запросов.

Мы долж­ны уви­деть ответ на подобие:


Received Access-Accept Id 87 from 127.0.0.1:1812 to 127.0.0.1:56554 length 20

Access-Accept гово­рит нам о том, что пароль для поль­зо­ва­те­ля test пра­виль­ный. Сер­вер работает.

Запрос с другого узла

Сле­ду­ю­щим эта­пом доба­вим воз­мож­ность делать запро­сы к сер­ве­ру RADIUS с дру­го­го узла сети. Пред­по­ло­жим, что мы хотим отпра­вить запрос на про­вер­ку с дру­го­го сер­ве­ра Linux (Windows, Ubuntu или CentOS — не важ­но). Если мы попы­та­ем­ся про­ве­рить дан­ные для аутен­ти­фи­ка­ции командой:

radtest test test123 192.168.1.15 1218 testing123

* где 192.168.1.15 — IP-адрес сер­ве­ра RADIUS.

… то мы не полу­чим ответ. Для это­го нуж­но доба­вить узел, с кото­ро­го отправ­ля­ют­ся запро­сы к кли­ен­ты freeradius. Откры­ва­ем на сер­ве­ре файл:

vi /etc/raddb/clients.conf

Доба­вим:

client client1 {
ipaddr      = 192.168.1.17
secret      = password
}

* где client1 — про­из­воль­ное назва­ние для кли­ен­та; ipaddr — его IP-адрес; secret — пароль для авто­ри­за­ции на freeradius.

Пере­за­пус­ка­ем служ­бу radiusd:

systemctl restart radiusd

Теперь мож­но выпол­нить запрос на уда­лен­ном узле командой:

radtest test test123 192.168.1.15 1218 password

Хранение записей в MariaDB

Исполь­зо­ва­ние базы дан­ных в каче­стве хра­ни­ли­ща логи­нов и паро­лей поз­во­лит управ­лять ими без необ­хо­ди­мо­сти пере­за­пус­кать сер­вис. Но самое глав­ное — дает воз­мож­ность исполь­зо­вать раз­лич­ные гра­фи­че­ские пане­ли управления.

Установка и настройка СУБД

Уста­нав­ли­ва­ем MariaDB и модуль mysql для Freeradius:

dnf install mariadb-server freeradius-mysql

Раз­ре­ша­ем авто­за­пуск и запус­ка­ем MariaDB:

systemctl enable mariadb --now

Созда­ем пароль для учет­ной запи­си mysql-root:

mysqladmin -u root password

Захо­дим в обо­лоч­ку mysql:

mysql -uroot -p

Созда­ем базу дан­ных для freeradius:

CREATE DATABASE radius DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

* дан­ной коман­дой мы созда­дим базу radius.

Созда­ем поль­зо­ва­те­ля и даем ему пра­ва на создан­ную базу:

GRANT ALL ON radius.* TO radius@localhost IDENTIFIED BY 'radius123';

* в дан­ном при­ме­ре мы созда­ли поль­зо­ва­те­ля radius, кото­ро­му мож­но под­клю­чать­ся к СУБД с локаль­но­го сер­ве­ра; выда­ли пра­ва на любые дей­ствия с базой radius; в каче­стве паро­ля зада­ли radius123.

Отклю­ча­ем­ся от mysql:

> \q

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

mysql -u root -p radius < /etc/raddb/mods-config/sql/main/mysql/schema.sql

* вво­дим пароль для поль­зо­ва­те­ля mysql-root.

Созда­дим пер­во­го пользователя:

mysql -u root -p -e "INSERT INTO radius.radcheck (username, attribute, op, value) VALUES ('testsql', 'Cleartext-Password', ':=', 'test123');"

Настройка Freeradius

Раз­ре­ша­ем модуль sql для freeradius:

ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled/

Откры­ва­ем его на редактирование:

vi /etc/raddb/mods-available/sql

Редак­ти­ру­ем следующее:


driver = "rlm_sql_mysql"

dialect = "mysql"

Сни­ма­ем ком­мен­та­рии и так­же редактируем:

server = "localhost"
port = 3306
login = "radius"
password = "radius123"

Пере­за­пус­ка­ем freeradius:

systemctl restart radiusd

Про­ве­ря­ем:

radtest testsql test123 localhost 1218 testing123

Веб-интерфейс

Один из попу­ляр­ных гра­фи­че­ских интер­фей­сов для рабо­ты с Freeradius — daloRADIUS. Это веб-при­ло­же­ние, напи­сан­ное на PHP. Соот­вет­ствен­но, для его рабо­ты мы настро­им веб-сервер.

NGINX

Для уста­нов­ки вво­дим команду:

dnf install nginx

Раз­ре­ша­ем запуск nginx и стар­ту­ем его:

systemctl enable nginx --now

Откры­ва­ем пор­ты в брандмауэре:

firewall-cmd --permanent --add-service=http

firewall-cmd --permanent --add-service=https

firewall-cmd --reload

Запус­ка­ем бра­у­зер и пере­хо­дим по адре­су http://<IP-адрес сер­ве­ра freeradius> — долж­на запу­стить­ся стар­то­вая стра­ни­ца NGINX:

PHP и PHP-FPM

Уста­нав­ли­ва­ем php с компонентами:

dnf install php php-fpm php-mysqlnd php-gd php-xml php-mbstring

На момент напи­са­ния инструк­ции, в репо­зи­то­рии CentOS 8 не было паке­та php-pear-DB, кото­рый необ­хо­дим для рабо­ты daloRADIUS. Для его уста­нов­ки загру­жа­ем пакет уста­нов­ки репо­зи­то­рия REMI:

wget http://rpms.remirepo.net/enterprise/8/remi/x86_64/remi-release-8.1-2.el8.remi.noarch

Уста­нав­ли­ва­ем его:

rpm -Uvh remi-release*rpm

Теперь мож­но уста­но­вить php-pear-DB:

dnf --enablerepo=remi install php-pear-DB

Созда­ем индекс­ный файл в кор­не­вой дирек­то­рии nginx:

vi /usr/share/nginx/html/index.php

<?php

phpinfo();

?>

Сно­ва запус­ка­ем бра­у­зер и пере­хо­дим по адре­су http://<IP-адрес сер­ве­ра freeradius> — долж­на запу­стить­ся стра­ни­ца с инфор­ма­ци­ей о PHP:

Установка daloRADIUS

Пере­хо­дим на стра­ни­цу послед­не­го рели­за daloRADIUS. Копи­ру­ем ссыл­ку на архив с порталом:

С помо­щью ско­пи­ро­ван­ной ссыл­ки загру­жа­ем архив на сервере:

wget https://github.com/lirantal/daloradius/archive/1.1-2.tar.gz

Созда­ем ката­лог в руто­вой пап­ке веб-сервера:

mkdir /usr/share/nginx/html/daloradius

Рас­па­ко­вы­ва­ем ска­чан­ный архив в создан­ную директорию :

tar zxvf 1.1-2.tar.gz -C /usr/share/nginx/html/daloradius --strip-components 1

Откры­ва­ем кон­фи­гу­ра­ци­он­ный файл daloradius:

vi /usr/share/nginx/html/daloradius/library/daloradius.conf.php

Пра­вим настрой­ки для под­клю­че­ния к базе radius:


$configValues['CONFIG_DB_ENGINE'] = 'mysqli';
$configValues['CONFIG_DB_HOST'] = 'localhost';
$configValues['CONFIG_DB_PORT'] = '3306';
$configValues['CONFIG_DB_USER'] = 'radius';
$configValues['CONFIG_DB_PASS'] = 'radius123';
$configValues['CONFIG_DB_NAME'] = 'radius';

* мне при­шлось поме­нять зна­че­ния для CONFIG_DB_USER и CONFIG_DB_PASS.

Вно­сим изме­не­ния в базу radius:

mysql -u root -p radius < /usr/share/nginx/html/daloradius/contrib/db/fr2-mysql-daloradius-and-freeradius.sql

mysql -u root -p radius < /usr/share/nginx/html/daloradius/contrib/db/mysql-daloradius.sql

Сно­ва запус­ка­ем бра­у­зер и пере­хо­дим по адре­су http://<IP-адрес сер­ве­ра freeradius>/daloradius — мы уви­дим стра­ни­цу для вхо­да в систе­му. Вво­дим поль­зо­ва­те­ля administrator и пароль radius:

Лог ошибок и запросов

По умол­ча­нию, Freeradius отправ­ля­ет лог в файл radius.log — запу­стить непре­рыв­ный про­смотр лога мож­но командой:

tail -f /var/log/radius/radius.log

Если нужен более дета­ли­зи­ро­ван­ный отчет о ходе рабо­ты RADIUS, мож­но запу­стить сер­вис в режи­ме отлад­ки. Для это­го оста­нав­ли­ва­ем рабо­ту службы:

systemctl stop radiusd

… и запускаем:

radiusd -X