Настройка 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. Предполагается, что мы работает в домене remontka.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.remontka.local’

port = 636
start_tls = yes

identity = ‘uid=freeradius,cn=users,cn=accounts,dc=remontka,dc=local’
password = freeradius_password

base_dn = ‘cn=users,cn=accounts,dc=remontka,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

В разделе 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=remontka,dc=local))»

}

}

* в данном примере мы закомментировали строку, которая шла по умолчанию и фильтровала запись по uid , и добавили (memberOf=cn=wifi,cn=groups,cn=accounts,dc=remontka,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 .

EnglishRussianUkrainian