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

Обновлено Обновлено: Опубликовано Опубликовано:

Используемые термины: FreeradiusCentOS.

Цель данной инструкции — показать пример развертывания и использования сервера аутентификации на базе протокола 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

* при желании настроить SELinux может оказаться полезной инструкция Настройка SELinux в CentOS.

Установка и настройка 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 1812 testing123

* где:

  • test — учетная запись, которую мы проверяем.
  • test123 — пароль от учетной записи test.
  • localhost — сервер, к которому мы обращаемся (в нашем случае, локальный).
  • 1812 — порт, на котором слушает запросы 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 1812 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 1812 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 1812 testing123

Если авторизация пройдет успешно, мы должны увидеть «Access-Accept»:

...
rad_recv: Access-Accept packet from ...
...

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

Один из популярных графических интерфейсов для работы с 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:

Стартовая страница 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:

Страница phpinfo

Установка daloRADIUS

Переходим на страницу последнего релиза 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:

Вход на daloRADIUS

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

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

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

Из коробки, логирование запросов отключено. Для включения открываем файл:

vi /etc/raddb/radiusd.conf

И приводим к виду директиву:

auth = yes

Данный параметр включит логирование удачных и неудачных авторизаций. Также мы можем ограничить вывод с помощью параметров:

auth_accept = yes
auth_reject = yes

* где auth_accept — только успешные запросы, auth_reject — неудачные.

Если нам нужно, чтобы в лог попадали пароли, то используем:

auth_badpass = yes
auth_goodpass = yes

* где auth_badpass — для неудачных запросов, auth_goodpass — выполненных успешно.

Не забываем перезапустить сервис:

systemctl reload radiusd

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

systemctl stop radiusd

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

radiusd -X

Читайте также

Другие инструкции, связанные с Freeradius:

1. Как настроить Freeradius для работы с LDAP (Active Directory) и MySQL одновременно

2. Настройка Freeradius для хранения radpostauth в альтернативной базе MySQL

# CentOS # Безопасность # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет