Аутентификация wi fi radius

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

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

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

Наша инструкция будет разбита на подразделы:

Как будет выполняться настройка

Для выполнения задачи по настройке авторизации на WiFi через RADIUS сервер может использоваться множество решений. Какие-то из них более удобные в настройке, какие-то в эксплуатации. В данной инструкции сделан упор на максимальное удобство со стороны пользователя.

Фреймворк аутентификации EAP включает в себя множество протоколов. Одним из самых популярных является PEAP (EAP-TLS) — его поддержка реализована в большинстве устройств. Данный протокол, в свою очередь, работает совместно с такими методами аутентификации, как EAP-MSCHAPv2 и EAP-GTС.

Для работы с FreeIPA нам подойдет MSCHAP, но для его использования потребуется небольшое расширение схемы и добавление поля хранения хэша пароля. Сервер RADIUS (в нашем случае, Freeradius) будет его вытаскивать и сравнивать с хэшем введенного пароля.

Перейдем к реализации задуманного.

Настройка FreeIPA

На стороне сервера LDAP нам необходимо:

  1. Добавить атрибут ipaNTHash для хранения в нем хэша пароля
  2. Создать роли и привилегии для возможности читать данный атрибут.
  3. Создать сервисный аккаунт и предоставить ему права на чтение атрибута ipaNTHash.

В нашем примере будет использоваться домен dmosk.local.

Настройка атрибута ipaNTHash

Начнем с установки пакета:

yum install freeipa-server-trust-ad

Данный пакет необходим для запуска утилиты ipa-adtrust-install, с помощью которой мы создаем атрибут ipaNTHash:

Команда запросит пароль для пользователя admin:

После мы получим предупреждение о существовании файла smb.conf и о том, что команда ipa-adtrust-install его заменит. Соглашаемся на изменения:

WARNING: The smb.conf already exists. Running ipa-adtrust-install will break your existing samba configuration.

Do you wish to continue? [no]: yes

На все последующие вопросы можно ответить по умолчанию, нажав Enter. Ждем окончания операции. Теперь при смене пароля или создании нового пользователя, у учетной записи будет добавлен атрибут ipaNTHash.

Чтобы в этом убедиться нужно поменяем пароль у существующей записи:

Читайте также:  Вай фай поддержка размещенной сети нет

ipa user-mod test —password

* в данном примере мы работаем с учетной записью test.

Если мы создаем новую запись, необходимо сразу после этого также поменять пароль.

Теперь проверяем, что у нашей учетной записи есть нужный нам атрибут:

ldapsearch -H ldap://localhost -x -D ‘cn=Directory Manager’ -W -LLL -Z ‘(uid=test)’ ipaNTHash

* в данном примере мы обращаемся к серверу LDAP localhost и вытаскиваем данные по учетной записи test. Чтобы не получать множество данных, мы фильтруем, вытаскивая только атрибут ipaNTHash.

Система запросит пароль — вводим его от учетной записи администратора FreeIPA. Мы должны получить, примерно, такой ответ:

Enter LDAP Password:
dn: uid=test,cn=users,cn=compat,dc=dmosk,dc=local

dn: uid=test,cn=users,cn=accounts,dc=dmosk,dc=local
ipaNTHash:: b1hf+P9igLWcziUv21AOuA==

* где b1hf+P9igLWcziUv21AOuA== — хэш пароля.

Создание ролей и привилегий

Нам необходимо создать настройки безопасности для возможности предоставить доступ к атрибуту ipaNTHash. Разберемся с этим по шагам.

ipa permission-add ‘ipaNTHash reader’ —attrs=ipaNTHash —type=user —right=read

  • ipaNTHash reader — имя разрешения.
  • attrs — атрибут, для которого действует разрешение.
  • type — тип учетной записи, для которой будет применимо разрешение.
  • right — уровень прав.

ipa privilege-add ‘Radius services’ —desc=’Radius privileges’

* данной командой мы создадим привилегию с именем Radius services.

3. Добавим созданное разрешение в созданную привилегию:

ipa privilege-add-permission ‘Radius services’ —permissions=’ipaNTHash reader’

ipa role-add ‘Radius server’ —desc=’Radius server role’

* где Radius server — имя роли.

5. Добавим в созданную роль созданную привилегию:

ipa role-add-privilege —privileges=’Radius services’ ‘Radius server’

Итого, мы получили роль Radius server, в которую входит привилегия Radius services, в которую входит разрешение ipaNTHash reader для чтения атрибута ipaNTHash.

Создание и настройка сервисной учетной записи

Создадим пользователя, с помощью которого Freeradius будет подключаться к FreeIPA и получать доступ к атрибуту ipaNTHash.

ipa service-add ‘freeradius/ipa-server.dmosk.local’

* где freeradius — имя сервисного аккаунта; ipa-server.dmosk.local — FQDN-имя сервера IPA.

ipa-getkeytab -p ‘freeradius/ipa-server.dmosk.local’ -s ipa-server.dmosk.local -k /root/radiusd.keytab

* в данном примере файл будет сохранен по пути /root/radiusd.keytab.

kinit -t /root/radiusd.keytab -k freeradius/ipa-server.dmosk.local

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

Default principal: freeradius/ipa-server.dmosk.local@DMOSK.LOCAL

Valid starting Expires Service principal
08/23/2021 12:48:14 08/24/2021 12:48:14 krbtgt/DMOSK.LOCAL@DMOSK.LOCAL

Также выполним who a mi в LDAP:

Читайте также:  Самый лучший wi fi репитер

Ответ должен быть на подобие:

SASL/GSSAPI authentication started
SASL username: freeradius/ipa-server.dmosk.local@DMOSK.LOCAL
SASL SSF: 256
SASL data security layer installed.
dn: krbprincipalname=freeradius/ipa-server.dmosk.local@dmosk.local,cn=services,cn=accounts,dc=dmosk,dc=local

* freeradius/ipa-server.dmosk.local@dmosk.local,cn=services,cn=accounts,dc=dmosk,dc=local — полный путь учетной записи в LDAP. Он нам понадобиться для дальнейшей настройки.

Теперь зададим пароль для сервисного аккаунта. Для этого создаем ldif файл:

dn: krbprincipalname=freeradius/ipa-server.dmosk.local@dmosk.local,cn=services,cn=accounts,dc=dmosk,dc=local
changetype: modify
add: objectClass
objectClass: simpleSecurityObject

add: userPassword
userPassword: my_password

* где krbprincipalname указывает на полный путь к сервисной учетной записи, а userPassword — пароль, который мы хотим ей задать.

Применяем настройки из файла:

ldapmodify -f ./freeradius.ldif -D ‘cn=Directory Manager’ -W -H ldap://localhost -Z

Система запросит пароль для учетной записи администратора FreeIPA — после мы должны увидеть сообщение:

modifying entry «krbprincipalname=freeradius/ipa-server.dmosk.local@dmosk.local,cn=services,cn=accounts,dc=dmosk,dc=local»

ldapwhoami -Z -D ‘krbprincipalname=freeradius/ipa-server.dmosk.local@dmosk.local,cn=services,cn=accounts,dc=dmosk,dc=local’ -W

Система от нас потребует пароль для сервисной учетной записи (в нашем примере, my_password) — вводим его. Мы должны получить что-то на подобие:

Снова получаем билет для привилегированного пользователя:

Добавляем сервисный аккаунт в роль Radius server:

ipa role-add-member —services=’freeradius/ipa-server.dmosk.local’ ‘Radius server’

С настройкой FreeIPA мы закончили и можем переходить к настройке Freeradius.

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

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

yum install freeradius-ldap

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

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

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

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

identity = ‘krbprincipalname=freeradius/ipa-server.dmosk.local@dmosk.local,cn=services,cn=accounts,dc=dmosk,dc=local’
password = my_password

update .
control:NT-Password := ‘ipaNTHash’
.
>

  • server — перечисление наших серверов FreeIPA. Если их несколько, создаем несколько строчек.
  • identity — путь до учетной записи пользователя, под которой мы будем подключаться к Freeradius.
  • password — пароль для учетной записи, которую мы используем в опции identity.
  • base_dn — базовый путь в ldap для поиска объектов.
  • control:NT-Password — атрибут, в котором Freeradius должен найти пароль пользователя.

Достаточно внести изменение в одной строке:

systemctl restart radiusd

Для проверки устанавливаем утилиту freeradius-utils:

yum install freeradius-utils

radtest -t mschap test test12345 localhost:1812 0 testing123

* где test и test12345 — логин и пароль для учетной записи во FreeIPA. Именно для нее в данной инструкции выше был создан хэш пароля.

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

Читайте также:  Тормозит wi fi ноутбука

Sent Access-Request Id 21 from 0.0.0.0:41315 to 127.0.0.1:1812 length 130
User-Name = «test»
MS-CHAP-Password = «test12345»
NAS-IP-Address = 192.168.0.15
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = «test12345»
MS-CHAP-Challenge = 0x6b2080f016c3f741
MS-CHAP-Response = 0x00010000000000000000000000000000000000000000000000002d6f06ec5b2599ccb515706c9ec15e0fbc7b026f79a08418
Received Access-Accept Id 21 from 127.0.0.1:1812 to 127.0.0.1:41315 length 84
MS-CHAP-MPPE-Keys = 0x0000000000000000cbbed686042e794f17cda4b9c54f3487
MS-MPPE-Encryption-Policy = Encryption-Allowed
MS-MPPE-Encryption-Types = RC4-40or128-bit-Allowed

Что дальше

Описание настройки WiFi не входит в рамки данной инструкции. В двух словах, выполняем следующие шаги:

  1. На WiFi контроллере или точке доступа указываем тип проверки подлинности с использованием RADIUS. В качестве последнего указываем его IP-адрес, а также парольную фразу, которую планируем использовать для проверки подлинности.
  2. На Freeradius в конфигурационном файле clients.conf создаем раздел с указанием IP-адреса устройства, с которого будет отправляться запрос на проверку подлинности, также указываем парольную фразу.
  3. Подключаемся к WiFi с использованием учетных данных, хранимых во FreeIPA.

Возможные проблемы

Для диагностики проблем, удобнее всего запускать freeradius в режиме дебага. Для этого сначала остановим его:

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

После проведения диагностики не забываем снова запустить сервис:

Рассмотрим проблему, с которой столкнулся я.

eap_peap: ERROR: TLS Alert write:fatal:protocol version

При подключении некоторых устройств мы можем получить ошибку:

(18) eap_peap: ERROR: TLS Alert write:fatal:protocol version
tls: TLS_accept: Error in error
(18) eap_peap: ERROR: Failed in __FUNCTION__ (SSL_read): error:14209102:SSL routines:tls_early_post_process_client_hello:unsupported protocol
(18) eap_peap: ERROR: System call (I/O) error (-1)
(18) eap_peap: ERROR: TLS receive handshake failed during operation
(18) eap_peap: ERROR: [eaptls process] = fail
(18) eap: ERROR: Failed continuing EAP PEAP (25) session. EAP sub-module failed

Причина: по умолчанию, eap настроен на использование TLS версии 1.2. Если устройство, с которого мы подключаемся использует версию протокола выше или ниже, то мы получим ошибку.

Решение: в настройках RADIUS-сервера есть возможность указать, какие версии TLS должны поддерживаться. Открываем конфигурационный файл:

Приводим к следующему виду опции:

tls-config tls-common .
# disable_tlsv1_2 = no
disable_tlsv1_1 = no
disable_tlsv1 = no
.
tls_min_version = «1.0»
tls_max_version = «1.3»
.
>

* в данном примере указаны не самые лучшие параметры с точки зрения безопасности. Лучше всего отказаться от TLS 1.0 и 1.1. — для этого, как правило, необходимо установить обновления на клиентском устройстве.

systemctl restart radiusd

Источник

Оцените статью
Adblock
detector