Настройка EAP-TTLS + Freeradius + FreeIPA для авторизации на WiFi под Rocky Linux

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

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

Ранее в инструкции Настройка EAP + Freeradius + FreeIPA для авторизации на WiFi было рассказано, как можно настроить авторизацию с использованием EAP-MSCHAP2. Данный метод является универсальным, но требует расширение схемы FreeIPA и хранение пароля в виде хеша, что может не соответствовать политики компании. Мы рассмотрим вариант, при котором аутентификация работает без дополнительных настроек на стороне FreeIPA. Но метод TTLS не является столь же универсальным, что и MSCHAP2 — подключение для старых версий Android, Windows 7 и устройств Apple без использования дополнительного программного обеспечения не будет работать.

В моем примере настройка Freeradius будет выполняться на сервере под управлением Rocky Linux 8. Предполагается, что мы работает в домене dmosk.local. Также мы не будем рассматривать установку и настройку Freeradius и FreeIPA. Ссылки на соответствующие инструкции можно найти в конце данной статьи.

Подготовка LDAP

Как говорилось выше, настройка на стороне FreeIPA будет минимальной. Нам нужно только создать учетную запись, от которой будет выполняться подключение с Freeradius к активному каталогу. Для этого будет достаточно создать любого пользователя с минимальными правами. Например:

ipa user-add freeradius --first=freeradius --last=freeradius --password

Система запросит пароль — вводим дважды любой временный (его нужно будет изменить). Учетная запись будет создана, по при первом входе будет требовать сменить пароль. Нам это помешает, поэтому сразу сменим его:

kinit freeradius

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

Я столкнулся с проблемой использования некоторых спецсимволов в пароле. Нам нужно будет указать последний в конфигурационном файле Freeradius, что может привести к ошибке парсинга конфига. Если мы столкнемся с такой же проблемой, просто меняем пароль на другой, использую другие спецсимволы.

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

ipa user-mod freeradius --setattr=krbPasswordExpiration=20301231000000Z

* в данном примере до конца 2030 года.

Настройка сервера RADIUS

Мы отдельно рассмотрим настройку различных компонентов сервера Freeradius.

1. Настройка ldap

Устанавливаем дополнение к Freeradius для работы с ldap, а также дополнительные утилиты:

yum install freeradius-ldap freeradius-utils

Активируем установленный модуль:

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

Открываем на редактирование файл ldap:

vi /etc/raddb/mods-available/ldap

Внесем некоторые изменения в настройки конфигурации:

ldap {

        ...

        server = 'ldap://ipa-server.dmosk.local'

        ...

        port = 636
        start_tls = yes

        ...

        identity = 'uid=freeradius,cn=users,cn=accounts,dc=dmosk,dc=local'
        password = freeradius_password

        ...

        base_dn = 'cn=users,cn=accounts,dc=dmosk,dc=local'
    
        ...
}

* где:

  • server — перечисление наших серверов FreeIPA. Если их несколько, создаем несколько строчек. Стоит отметить, что система не принимает в качестве имени алиасы — перечисляем конкретные серверы freeipa по их хостнеймам.
  • port — порт для подключения к FreeIPA. В нашем примере используется безопасный порт.
  • start_tls — использовать STARTTLS для подключения к FreeIPA.
  • identity — путь до учетной записи пользователя, под которой мы будем подключаться к Freeradius. 
  • password — пароль для учетной записи, которую мы используем в опции identity.
  • base_dn — базовый путь в ldap для поиска объектов.

2. Настройка EAP

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

vi /etc/raddb/mods-available/eap

Приводим следующие настройки к виду:

eap eap-client {
        ...
        default_eap_type = ttls
        ...
        ttls {
                tls = tls-common
                default_eap_type = md5
                copy_request_to_tunnel = no
                use_tunneled_reply = yes
                virtual_server = "inner-tunnel"
        }
}

* где:

  • default_eap_type — какой по умолчанию использовать тип EAP использовать, если он не указан явно.
  • tls — определяет секцию конфигурации, которую необходимо использовать. tls-common является конфигурацией из коробки.
  • copy_request_to_tunnel — определяет необходимость копирования дополнительных атрибутов в туннель при прохождении аутентификации.
  • use_tunneled_reply — отправка атрибутов ответов внутри туннеля на основе имени пользователя.
  • virtual_server — отправка туннельных запросов через специальный виртуальный сервер.

3. Настройка site default

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

vi /etc/raddb/sites-enabled/default

Приводим к виду некоторые строки:

authorize {
        ...
        ldap
        if ((ok || updated) && User-Password) {
                update {
                        control:Auth-Type := ldap
                }
        }
        ...
}

authenticate {
        ...
        Auth-Type LDAP {
                ldap
        }
        ...
}

* в данном примере мы сняли комментарий с метода ldap, а также дописали условие if.

4. Настройка inner-tunnel

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

vi /etc/raddb/sites-enabled/inner-tunnel

Редактируем:

authorize {
        ...
        filter_inner_identity
        ...
        ldap
        if ((ok || updated) && User-Password) {
                update {
                        control:Auth-Type := ldap
                }
        }
        ...
}

authenticate {
        ...
        Auth-Type LDAP {
                ldap
        }
        ...
}

*  как и в примере выше, мы сняли комментарий с метода ldap, а также дописали условие if.

5. Запуск и проверка

После выполнения вышеперечисленных настроек, перезапустим сервис:

systemctl restart radiusd

Пробуем пройти авторизацию с использованием учетной записи LDAP:

radtest ldap_user 'ldap_password' localhost 1812 testing123

* где ldap_user и ldap_password — соответственно, логин и пароль от любой учетной записи во FreeIPA. Обратите внимание, что пароль в кавычках — на практике, если пароль имеет некоторые спецсимволы, Freeradius может его неправильно интерпретировать. Кавычки помогают решить проблему.

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

Sent Access-Request Id 255 from 0.0.0.0:43376 to 127.0.0.1:1812 length 80
    User-Name = "ldap_user"
    User-Password = "ldap_password"
    NAS-IP-Address = 192.168.1.15
    NAS-Port = 1812
    Message-Authenticator = 0x00
    Cleartext-Password = "ldap_password"
Received Access-Accept Id 255 from 127.0.0.1:1812 to 127.0.0.1:43376 length 20

Received Access-Accept говорит о том, что проверка прошла успешно.

Если при запуске сервиса или при выполнении radtest мы получаем ошибку, запускаем radius в режиме отладки:

radiusd -X

Настройка контроллера

Большинство беспроводных точек доступа умеют проверять подлинность пользователя с помощью сервера RADIUS. Для этого необходимо выбрать метод проверки WPA-Enterprise. В данной инструкции мы рассмотрим подробнее пример настройки контроллера Unifi.

1. Донастройка Freeradius

Перед тем, как перейти к настройке точки доступа или контроллера, открываем файл:

vi /etc/raddb/clients.conf

И добавляем запись:

client wifi-controller1 {
        ipaddr = 192.168.1.0/24
        secret = secret_phrase
}

* в данном примере мы разрешаем запрашивать аутентификацию через наш сервер Freeradius для всех устройств в подсети 192.168.1.0/24. Если необходимо ограничить доступ до конкретных устройств, то создаем несколько аналогичных записей. Также необходимо указать пароль подключения в директиве secret — в нашем примере secret_phrase.

После внесения изменения, перезапускаем радиус сервер:

systemctl restart radiusd

2. Настройка контроллера

В данной инструкции мы не будем рассматривать подробности установки и настройки контроллера Unifi от Ubiquiti. Также в нашем примере будет использоваться старый интерфейс (на момент обновления инструкции, новый интерфейс был еще недостаточно функционален, однако, настройка RADIUS может быть выполнена и в нем).

И так, заходим на контроллер и переходим в раздел Settings (значок шестеренки) - Wireless Networks:

Переходим к списку настроенных сетей WiFi

Справа от нужной сети WiFi нажимаем EDIT:

Открываем настройки WiFi

В разделе Security выбираем WPA Enterprise, в разделе RADIUS Profile кликаем по кнопке Create new RADIUS profile:

Выбираем WPA Enterprise и переходим к созданию профиля RADIUS

В открывшемся окне вводим имя профиля, вводим адрес нашего сервера RADIUS и секрет, который установили при настройке clients.conf:

Прописываем настройки для сервера RADIUS

* в нашем примере сервер Freeradius имеет IP-адрес 192.168.1.15, в качестве секрета мы установили secret_phrase.

Готово. Сохраняем настройки WiFi на контроллере.

Настройка клиентов

Мы не будем подробно разбирать ход настройки клиентов — просто перечислим нюансы для различных операционных систем.

Система Описание настройки WiFi
Windows 11 и 10 Настройка выполняется штатно. Система понимает, что необходимо использовать TTLS.
Windows 8 Необходимо в настройках беспроводного подключения выбрать TTLS.
Windows 7 Требуется установка стороннего программного обеспечения для поддержки TTLS.
Android Переходим в расширенные настройки и выбираем 1-й метод TTLS, 2-й — PAP. На некоторых устройствах в настройке сертификата выбираем принимать все или не проверять.
Linux Настройка выполняется штатно. В настройках необходимо указать TTLS и метод PAP.
iOS, iPhone OS Конфигурирование с помощью профиля, полученного утилитой Apple Configurator 2.

Фильтрация по группам FreeIPA

Ранее мы рассмотрели простой вариант поиска пользователей. Мы можем ограничить список с помощью групп безопасности. Например, давайте сделаем так, чтобы только пользователи группы wifi смогли подключаться к беспроводной сети.

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

vi /etc/raddb/mods-available/ldap

В разделе ldapuser приводим настройку filter к виду:

ldap {
        ...
        user {
                ...
                ##filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
                filter = "(&(uid=%{%{Stripped-User-Name}:-%{User-Name}})(memberOf=cn=wifi,cn=groups,cn=accounts,dc=dmosk,dc=local))"
                ...
        }
        ...
}

* в данном примере мы закомментировали строку, которая шла по умолчанию и фильтровала запись по uid, и добавили (memberOf=cn=wifi,cn=groups,cn=accounts,dc=dmosk,dc=local) — фильтр по группе wifi.

Перезапускаем сервис radiusd:

systemctl restart radiusd

Можно проверять.

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

Также могут оказаться полезными следующие инструкции:

1. Установка и использование FreeIPA на CentOS.

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

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

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

5. Настройка EAP + Freeradius + FreeIPA для авторизации на WiFi.

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

Да            Нет