Настройка EAP-TTLS + Freeradius + FreeIPA для авторизации на WiFi под Rocky Linux
Используемые термины: Freeradius, FreeIPA, WiFi.
Ранее в инструкции Настройка EAP + Freeradius + FreeIPA для авторизации на WiFi было рассказано, как можно настроить авторизацию с использованием EAP-MSCHAP2. Данный метод является универсальным, но требует расширение схемы FreeIPA и хранение пароля в виде хеша, что может не соответствовать политики компании. Мы рассмотрим вариант, при котором аутентификация работает без дополнительных настроек на стороне FreeIPA. Но метод TTLS не является столь же универсальным, что и MSCHAP2 — подключение для старых версий Android, Windows 7 и устройств Apple без использования дополнительного программного обеспечения не будет работать.
В моем примере настройка Freeradius будет выполняться на сервере под управлением Rocky Linux 8. Предполагается, что мы работает в домене dmosk.local. Также мы не будем рассматривать установку и настройку Freeradius и FreeIPA. Ссылки на соответствующие инструкции можно найти в конце данной статьи.
Создание учетной записи FreeIPA
Настройка Freeradius
LDAP
EAP
Site Default
Inner-Tunnel
Тестовый запуск
Настройка контроллера для подключения к 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 нажимаем EDIT:
В разделе Security выбираем WPA Enterprise, в разделе RADIUS Profile кликаем по кнопке Create new RADIUS profile:
В открывшемся окне вводим имя профиля, вводим адрес нашего сервера RADIUS и секрет, который установили при настройке clients.conf:
* в нашем примере сервер 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
В разделе ldap - user приводим настройку 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.