Настройка Freeradius в связке с FreeIPA на Rocky Linux
Используемые термины: Freeradius, FreeIPA.
Так как Rocky Linux реализован на базе CentOS, данная инструкция подойдет и для последнего. Предполагается, что у нас уже настроен FreeIPA, в противном случае, читаем также инструкцию Установка и использование FreeIPA на CentOS.
Подготовка системы
Базовая настройка Freeradius
Настройка аутентификации через LDAP
Подготовка FreeIPA
Настройка Freeradius
Диагностика проблем
Подготовка сервера
Для корректной работы Freeradius с сервером LDAP необходимо настроить время, брандмауэр и отключить SELinux.
1. Время
Устанавливаем сервис для синхронизации времени и запускаем его:
yum install chrony
systemctl enable chronyd --now
Задаем часовой пояс:
timedatectl set-timezone Europe/Moscow
* в данном примере задается часовой пояс по московскому времени. Полный перечень вариантов можно посмотреть командой timedatectl list-timezones.
2. Firewalld
Создаем правило для разрешения сервиса radius (порты 1812 и 1813):
firewall-cmd --permanent --add-service=radius
firewall-cmd --reload
3. SELinux
В нашей инструкции мы просто отключим SELinux
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
* при желании настроить SELinux может оказаться полезной инструкция Настройка SELinux в CentOS.
4. Имя сервера
Задаем имя нашему серверу:
hostnamectl set-hostname freeradius.dmosk.ru
Установка и настройка Freeradius
Установим сам Freeradius и настроим его для аутентификации с использованием конфигурационного файла.
Установка выполняется командой:
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 правильный. Сервер работает.
Freeradius + FreeIPA
Как говорилось выше, мы рассмотрим процесс аутентификации с LDAP на базе FreeIPA. Необходимо выполнить настройку как на стороне последнего, так и сервера RADIUS.
Подготовка LDAP
Все, что от нас требуется — создать отдельную учетную запись со стандартными правами. Это делается в веб-интерфейсе управления FreeIPA.
Переходим в раздел Идентификация - Пользователи:
Справа кликаем по Добавить:
Заполняем поля и сохраняем настройки.
После создания учетной записи необходимо войти под ней через веб-интерфейс и поменять пароль:
Готово. Переходим к настройкам Freeradius.
Настройка Freeradius
Устанавливаем дополнение к Freeradius для работы с ldap:
yum install freeradius-ldap
Активируем установленный модуль:
ln -s /etc/raddb/mods-available/ldap /etc/raddb/mods-enabled/ldap
Открываем на редактирование файл ldap:
vi /etc/raddb/mods-available/ldap
Внесем некоторые настройки в конфигурацию:
ldap {
...
server="ldap://ipa01.dmosk.ru"
server="ldap://ipa02.dmosk.ru"
...
#port=389
port=636
...
identity="uid=freeradius,cn=users,cn=accounts,dc=dmosk,dc=ru"
password=freeradius135
...
base_dn="cn=users,cn=accounts,dc=dmosk,dc=ru"
...
user {
...
base_dn="${..base_dn}"
...
filter="(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
...
}
...
tls {
...
start_tls=yes
...
}
...
}
* где:
- server — перечисление наших серверов FreeIPA. Если их несколько, создаем несколько строчек.
- port — порт, на котором слушает наш LDAP. Как правило, это 389 или 636 с TLS.
- identity — путь до учетной записи пользователя, под которой мы будем подключаться к Freeradius. Это та учетная запись, которую мы создали по инструкции выше.
- password — пароль для учетной записи, которую мы используем в опции identity.
- base_dn — базовый путь в ldap для поиска объектов.
- в секции user проверяем, чтобы значения для двух параметров base_dn и filter были такие.
- start_tls — задаем, если используем TLS (порт 636). Иначе, оставляем закомментированным.
Теперь настроим Freeradius, чтобы он выполнял аутентификацию в LDAP.
Открываем файл:
vi /etc/raddb/sites-enabled/default
Снимаем комментарий для строк:
Auth-Type LDAP {
ldap
}
Открываем следующий файл:
vi /etc/raddb/users
В начало добавим строку:
DEFAULT Auth-Type = ldap
Перезапускаем сервис:
systemctl restart radiusd
Готово, можно проверить:
radtest ldap_user ldap_password localhost 1812 testing123
Мы должны увидеть что-то на подобие:
Sent Access-Request Id 115 from 0.0.0.0:33371 to 127.0.0.1:1812 length 79
User-Name = "ldap_user"
User-Password = "ldap_password"
NAS-IP-Address = 192.168.0.18
NAS-Port = 1812
Message-Authenticator = 0x00
Cleartext-Password = "ldap_password"
Received Access-Accept Id 115 from 127.0.0.1:1812 to 127.0.0.1:33371 length 20
Решение проблем
Если в процессе настройки у нас возникла ошибка, необходимо сначала просмотреть логи freeradius:
tail -f /var/log/radius/radius.log
Если в данном логе нет ничего интересного, то останавливаем работу freeradius:
systemctl stop radiusd
И запускаем его в режиме отладки:
radiusd -X
Состояние работы сервиса будет выведено на экран.