- Что дальше
- Edit EAP from mods-available/eap to include
- Edit client.conf to include the ip or network of your APs
- Eap_peap: error: tls alert write:fatal:protocol version
- Freeradius
- Linux
- Non-samsung
- Prepare freeipa for aaa authentication
- Samsung
- Возможные вопросы
- Возможные проблемы
- Как будет выполняться настройка
- Контроллер ubiquiti
- Настройка freeipa
- Настройка атрибута ipanthash
- Настройка клиентов
- Настройка сервера radius
- Немного о методах eap
- Создание и настройка сервисной учетной записи
- Настройка сервера RADIUS
- Создание ролей и привилегий
Что дальше
Описание настройки WiFi не входит в рамки данной инструкции. В двух словах, выполняем следующие шаги:
- На WiFi контроллере или точке доступа указываем тип проверки подлинности с использованием RADIUS. В качестве последнего указываем его IP-адрес, а также парольную фразу, которую планируем использовать для проверки подлинности.
- На Freeradius в конфигурационном файле clients.conf создаем раздел с указанием IP-адреса устройства, с которого будет отправляться запрос на проверку подлинности, также указываем парольную фразу.
- Подключаемся к WiFi с использованием учетных данных, хранимых во FreeIPA.
Edit EAP from mods-available/eap to include
default_eap_type = leap
...
leap {
default_eap_type = mschapv2
copy_request_to_tunnel = no
use_tunneled_reply = no
virtual_server = "inner-tunnel"
}
...
peap {...
default_eap_type = mschapv2
...
}6. edit sites-available/default and sites-available/inner-tunnel to include (which seems to be default in Freeradius 3)
authorize{
...
-ldap
...}Edit client.conf to include the ip or network of your APs
client myNASS1 { ipaddr = 192.168.2.10 proto = * secret = foobar123 require_message_authenticator = yes nas_type = other limit { max_connections = 16 lifetime = 0 idle_timeout = 30 } }
Eap_peap: error: tls alert write:fatal:protocol version
При подключении некоторых устройств мы можем получить ошибку:
Причина: по умолчанию, eap настроен на использование TLS версии 1.2. Если устройство, с которого мы подключаемся использует версию протокола выше или ниже, то мы получим ошибку.
Решение: в настройках RADIUS-сервера есть возможность указать, какие версии TLS должны поддерживаться. Открываем конфигурационный файл:
vi /etc/raddb/mods-available/eap
Приводим к следующему виду опции:
* в данном примере указаны не самые лучшие параметры с точки зрения безопасности. Лучше всего отказаться от TLS 1.0 и 1.1. — для этого, как правило, необходимо установить обновления на клиентском устройстве.
Перезагружаем freeradius:
systemctl restart radiusd
Freeradius
FreeRadius будем поднимать на CentOS 7.6. Здесь ничего сложного, ставим обычным способом.
yum install freeradius freeradius-utils freeradius-ldap -yLinux
Я проверял на Ubuntu 18.04, 18.10, Fedora 29, 30.
Для начала, скачиваем себе сертификат. Я не нашел в Linux, есть ли возможность использовать системные сертификаты и есть ли там вообще такое хранилище.
Будем подключаться по домену. Поэтому нужен сертификат удостоверяющего центра, у которого был приобретен наш сертификат.
Все подключение делается в одном окне. Выбираем нашу сеть:
anonymous — clientdomain — домен, на который выпущен сертификат
Non-samsung
C 7 версии при подключении WiFi можно использовать системные сертификаты, указав только домен:
domain — домен, на который выпущен сертификатanonymous — client
Prepare freeipa for aaa authentication
[root@ipa /]#yum install freeipa-server-trust-adipa-adtrust-instal
confirm all including SID release. Rezults show like below
Samsung
Как уже писал выше, Samsung-устройства не умеют использовать системные сертификаты при подключении WiFi, и у них нет возможности подключаться по домену. Поэтому надо вручную добавить корневой сертификат центра сертификации (ca.pem, берем на Radius сервере). Вот здесь будет использовать самоподписанный.
Скачиваем сертификат себе на устройство и устанавливаем его.
Когда сертификат установлен, можно переходить к подключению:
сертификат — указываем тот, который устанавливалианонимный пользователь — guest
Возможные вопросы
В:
как передавать профиль/сертификат сотруднику?
О: Все сертификаты/профили я храню на фтп с доступом через веб. Поднял гостевую сеть с ограничением по скорости и доступом только в интернет, за исключением фтп. Аутентификация держится 2 дня, после чего сбрасывается и клиент остается без интернета. Т.о. когда сотрудник хочет подключиться к WiFi, сначало он подключается к гостевой сети, заходит на фтп, скачивает нужный ему сертификат или профиль, устанавливает их, и после может подключаться к корпоративной сети.
В: почему не использовать схему с MSCHAPv2? она же более безопасная!
О: во-первых, такая схема хорошо работает на NPS (Windows Network Policy System), в нашей реализации необходимо дополнительно настраивать LDAP (FreeIpa) и хранить хэши паролей на сервере. Доп. настройки делать не желательно, т.к. это может привести к различным проблемам сихронизации УЗ. Во-вторых, хеш представляет собой MD4, так что это не особо повышает безопасность
В: можно ли авторизовывать устройтсва по mac-адресам?
О: НЕТ, это не безопасно, злоумышленник может подменить мак-адреса, и тем более авторизация по мак-адресам не поддерживается на многих устройствах
В: зачем вообще все эти сертификаты использовать? можно же и без них подключаться
Возможные проблемы
Для диагностики проблем, удобнее всего запускать freeradius в режиме дебага. Для этого сначала остановим его:
systemctl stop radiusd
После запускаем радиус командой:
radiusd -X
После проведения диагностики не забываем снова запустить сервис:
systemctl start radiusd
Рассмотрим проблему, с которой столкнулся я.
Как будет выполняться настройка
Для выполнения задачи по настройке авторизации на WiFi через RADIUS сервер может использоваться множество решений. Какие-то из них более удобные в настройке, какие-то в эксплуатации. В данной инструкции сделан упор на максимальное удобство со стороны пользователя.
Фреймворк аутентификации EAP включает в себя множество протоколов. Одним из самых популярных является PEAP (EAP-TLS) — его поддержка реализована в большинстве устройств.
Для работы с FreeIPA нам подойдет MSCHAP, но для его использования потребуется небольшое расширение схемы и добавление поля хранения хэша пароля. Сервер RADIUS (в нашем случае, Freeradius) будет его вытаскивать и сравнивать с хэшем введенного пароля.
Перейдем к реализации задуманного.
Контроллер ubiquiti
На контроллере поднимаем отдельную сеть. Пусть будет 192.168.2.0/24Идем в настройки -> профиль. Cоздаем новый:
Прописываем адрес и порт radius-сервера и пароль, который прописывали в файле clients.conf:
Создаем новое имя беспроводной сети. В качестве метода аутентификации выбираем WPA-EAP (Enterprise) и указываем созданный radius-профиль:
Все сохраняем, применяем и идем дальше.
Настройка freeipa
На стороне сервера LDAP нам необходимо:
- Добавить атрибут ipaNTHash для хранения в нем хэша пароля
- Создать роли и привилегии для возможности читать данный атрибут.
- Создать сервисный аккаунт и предоставить ему права на чтение атрибута ipaNTHash.
В нашем примере будет использоваться домен test.local.
Настройка атрибута ipanthash
Начнем с установки пакета:
yum install freeipa-server-trust-ad
Данный пакет необходим для запуска утилиты ipa-adtrust-install, с помощью которой мы создаем атрибут ipaNTHash:
ipa-adtrust-install –add-sids
Настройка клиентов
Начнем с самого сложного!
Настройка сервера radius
Устанавливаем дополнение к 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
Внесем некоторые изменения в настройки конфигурации:
Немного о методах eap
Прежде чем приступить к выполнению задачи, надо определиться какой метод аутентификации будем использовать в нашем решении.
Из википедии:
EAP — фреймворк аутентификации, который часто используется в беспроводных сетях и соединениях точка-точка. Формат был впервые описан в RFC 3748 и обновлён в RFC 5247.
EAP используется для выбора метода аутентификации, передачи ключей и обработки этих ключей подключаемыми модулями называемыми методами EAP. Существует множество методов EAP, как определенных вместе с самим EAP, так и выпущенных отдельными производителями. EAP не определяет канальный уровень, он только определяет формат сообщений. Каждый протокол использующий EAP имеет собственный протокол инкапсуляции сообщений EAP. Сами методы:
- LEAP — проприетарный протокол, разработан CISCO. Найдены уязвимости. В настоящее время не рекомендуется использовать
- EAP-TLS — хорошо поддерживаемый среди вендоров беспроводных соединений. Является безопасным протоколом, поскольку является преемником SSL стандартов. Настройка клиентской достаточно сложна. Нужен клиентский сертификат помимо пароля. Поддерживается во многих системах
- EAP-TTLS — широко поддерживается во многих системах, предлагает хорошую безопасность, используя PKI сертификаты только на сервере аутентификации
- EAP-MD5 — другой открытый стандарт. Предлагает минимальную безопасность. Уязвим, не поддерживает взаимную аутентификацию и генерацию ключей
- EAP-IKEv2 — основан на Internet Key Exchange Protocol version 2. Обеспечивает взаимную аутентификацию и установление сеансового ключа между клиентом и сервером
- PEAP — совместное решение CISCO, Microsoft и RSA Security как открытый стандарт. Широко доступен в продуктах, обеспечивает очень хорошую безопасность. Схож с EAP-TTLS, требуя только сертификат на серверной стороне
- PEAPv0/EAP-MSCHAPv2 — после EAP-TLS, это второй широко используемый стандарт в мире. Используется клиент-серверная взаимосвязь в Microsoft, Cisco, Apple, Linux
- PEAPv1/EAP-GTC — создан Cisco как альтернатива PEAPv0/EAP-MSCHAPv2. Не защищает аутентификационные данные в любом случае. Не поддерживаются в Windows OS
- EAP-FAST — метод, разработанный Cisco для исправления недостатков LEAP. Использует Protected Access Credential (PAC). Полностью не доработан
Из всего этого разнообразия, выбор все таки не велик. От метода аутентификации требовалось: хорошая безопасность, поддержка на всех устройствах (
Windows 10
, macOS, Linux,
AndroidiOS
) и, собственно, чем проще, тем лучше. Поэтому выбор пал на EAP-TTLS в связке с протоколом PAP.
Возможно возникнет вопрос — Зачем же использовать PAP? ведь он передает пароли в открытом виде?
Создание и настройка сервисной учетной записи
Создадим пользователя, с помощью которого Freeradius будет подключаться к FreeIPA и получать доступ к атрибуту ipaNTHash.
Вводим:
ipa service-add ‘freeradius/ipa-server.test.local’
* где freeradius — имя сервисного аккаунта; ipa-server.test.local — FQDN-имя сервера IPA.
Создаем keytab-файл:
ipa-getkeytab -p ‘freeradius/ipa-server.test.local’ -s ipa-server.test.local -k /root/radiusd.keytab
* в данном примере файл будет сохранен по пути /root/radiusd.keytab.
Проверим файл:
kinit -t /root/radiusd.keytab -k freeradius/ipa-server.test.local
klist
Мы должны увидеть что-то на подобие:
Также выполним who a mi в LDAP:
ldapwhoami -Y GSSAPI
Ответ должен быть на подобие:
* freeradius/ipa-server.test.local@test.local,cn=services,cn=accounts,dc=test,dc=local — полный путь учетной записи в LDAP. Он нам понадобиться для дальнейшей настройки.
Теперь зададим пароль для сервисного аккаунта. Для этого создаем ldif файл:
vi freeradius.ldif
* где krbprincipalname указывает на полный путь к сервисной учетной записи, а userPassword — пароль, который мы хотим ей задать.
Применяем настройки из файла:
ldapmodify -f ./freeradius.ldif -D ‘cn=Directory Manager’ -W -H ldap://localhost -Z
Система запросит пароль для учетной записи администратора FreeIPA — после мы должны увидеть сообщение:
modifying entry “krbprincipalname=freeradius/ipa-server.test.local@test.local,cn=services,cn=accounts,dc=test,dc=local”
Проверим, выполнив запрос:
ldapwhoami -Z -D ‘krbprincipalname=freeradius/ipa-server.test.local@test.local,cn=services,cn=accounts,dc=test,dc=local’ -W
Система от нас потребует пароль для сервисной учетной записи (в нашем примере, my_password) — вводим его. Мы должны получить что-то на подобие:
dn: krbprincipalname=freeradius/ipa-server.test.local@test.local,cn=services,cn=accounts,dc=test,dc=local
Снова получаем билет для привилегированного пользователя:
kinit admin
Добавляем сервисный аккаунт в роль Radius server:
ipa role-add-member –services=’freeradius/ipa-server.test.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:
vi /etc/raddb/mods-available/ldap
Внесем некоторые изменения в настройки конфигурации:
* где:
- server — перечисление наших серверов FreeIPA. Если их несколько, создаем несколько строчек.
- identity — путь до учетной записи пользователя, под которой мы будем подключаться к Freeradius.
- password — пароль для учетной записи, которую мы используем в опции identity.
- base_dn — базовый путь в ldap для поиска объектов.
- control:NT-Password — атрибут, в котором Freeradius должен найти пароль пользователя.
Настраиваем модуль EAP:
vi /etc/raddb/mods-available/eap
Достаточно внести изменение в одной строке:
default_eap_type = mschapv2
Перезапускаем сервис:
systemctl restart radiusd
Для проверки устанавливаем утилиту freeradius-utils:
yum install freeradius-utils
И вводим команду:
radtest -t mschap test test12345 localhost:1812 0 testing123
Создание ролей и привилегий
Нам необходимо создать настройки безопасности для возможности предоставить доступ к атрибуту ipaNTHash. Разберемся с этим по шагам.
1. Создаем разрешение:
