Настройка Freeradius в связке с FreeIPA на Rocky Linux

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

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

Так как Rocky Linux реализован на базе CentOS, данная инструкция подойдет и для последнего. Предполагается, что у нас уже настроен FreeIPA, в противном случае, читаем также инструкцию Установка и использование FreeIPA на CentOS.

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

Для корректной работы 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.

Переходим в раздел Идентификация - Пользователи:

Переходим в панели управления FreeIPA в раздел управления пользователями

Справа кликаем по Добавить:

Кликаем по кнопке добавить

Заполняем поля и сохраняем настройки.

После создания учетной записи необходимо войти под ней через веб-интерфейс и поменять пароль:

Меняем пароль при первом входе под учетной записью 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

Состояние работы сервиса будет выведено на экран.

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

Да            Нет