===== Связка FreeRADIUS + Active Directory ===== Здесь мы настроим связку FreeRADIUS с контроллерами домена Windows, чтобы авторизовать и аутентифицировать пользователей AD. Для связки с доменом Windows нам потребуется настроить Samba. 1. Обновим информацию о пакетах: apt-get update 2. Установим freeradius: sudo apt install freeradius 3. Проверим, что он запущен: ps -ax | grep free 4. На всякий случай проверим hostname и установим нужный, если требуется: hostname -f hostnamectl set-hostname new_hostname 5. Устанавливаем самбу и другие необходимые пакеты одной командой: apt-get install samba samba-common winbind libnss-winbind krb5-user 6. Проверяем - запущена ли самба ps -ax | grep smb Если нужно перезапустить самбу, выполняем: sudo systemctl restart nmbd 7. Настраиваем конфиг самбы в секции //global//. Здесь //workgroup// - имя домена Windows, //netbios name// - имя радиус-сервера. Разрешаем только mschapv2 и ntlmv2 и указываем риалм. /etc/samba/smb.conf [global] workgroup = ARASAKA security = ads netbios name = radius1 password server = * realm = arasaka.local ntlm auth = mschapv2-and-ntlmv2-only winbind use default domain = yes 8. Настраиваем kerberos realm в файле: /etc/krb5.conf [libdefaults] default_realm = ARASAKA.LOCAL [realms] ARASAKA.LOCAL = { kdc = dc01.arasaka.local kdc = dc02.arasaka.local admin_server = dc01.arasaka.local } [domain_realm] .arasaka.local = ARASAKA.LOCAL arasaka.local = ARASAKA.LOCAL 9. Вводим машину в домен и ОБЯЗАТЕЛЬНО перезагружаемся: net join -U jp :!: //При этом, есть вероятность, что конфигурирование krb5.conf не потребуется, т.к. информация о домене будет взята из самбы.// 10. Проверяем аутентификацию в домене: wbinfo -a jp%password :!: //Если на п.9 мы не перезагрузились - есть вероятность, что получим ошибку (например, USER NOT FOUND)// 11. Проверяем работу NTLM: ntlm_auth --request-nt-key --domain=ARASAKA --username=jp --password=password Должны получить ответ: NT_STATUS_OK: The operation completed successfully. (0x0) 12. Конфигурируем ntlm для freeradius в файле: /etc/freeradius/3.0/mods-enabled/ntlm_auth В нём указываем путь к бинарному файлу ntlm_auth и название домена: exec ntlm_auth { wait = yes program = "/usr/bin/ntlm_auth --request-nt-key --domain=ARASAKA.LOCAL --username=%{mschap:User-Name} --password=%{User-Password}" } 13. В двух (или больше, если есть) файлах добавляем опцию //ntlm_auth// в секцию //authenticate//. /etc/freeradius/3.0/sites-enabled/default /etc/freeradius/3.0/sites-enabled/inner-tunnel {{::freeradius_ntlm_auth_sites_enabled.jpg?direct&400|}} 14. Для тестов можно добавить в файл: /etc/freeradius/3.0/mods-config/files/authorize Строчку, чтобы все реквесты шли через ntlm_auth: DEFAULT Auth-Type = ntlm_auth После чего выполнить проверку: radtest user password localhost 0 testing123 Успешный результат сообщит нам о предоставлении доступа: Received Access-Accept Id 88 from 127.0.0.1:1812 to 127.0.0.1:40492 length 20 15. Если мы проводили тест, то удаляем строку из п. 14 в файле //authorize//. 16. В файле модуля mschap: /etc/freeradius/3.0/mods-enabled/mschap Конфигурируем ntlm_auth следующим образом: ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --allow-mschapv2 --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --domain=%{%{mschap:NT-Domain}:-ARASAKA.LOCAL} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}" 17. Перезапускаем freeradius и проверяем авторизацию с явным указанием mschap: systemctl restart freeradius radtest -t mschap user password localhost 0 testing123 18. Скорее всего мы получим ошибку примерно следующего содержания: MS-CHAP-Error = "\000E=691 R=1 C=33540d6659c2d6d1 V=2" (0) -: Expected Access-Accept got Access-Reject При этом, в логе freeradius скорее всего будет сообщение: /var/log/freeradius/radius.log Reading winbind reply failed! 19. В этом случае нам нужно поправить права модуля ntlm_auth на pipe winbindd. Останавливаем freeradius, добавляем его пользователя в группу winbindd, корректируем права и снова запускаем freeradius и прогоняем тест. systemctl stop freeradius usermod -a -G winbindd_priv freerad chown root:winbindd_priv /var/lib/samba/winbindd_privileged/ service freeradius start radtest -t mschap user password localhost 0 testing123 В этот раз тест должен быть успешным: Received Access-Accept Id 167 from 127.0.0.1:1812 to 127.0.0.1:48218 length 84 MS-CHAP-MPPE-Keys = 0x0000000000000000650992b66359427b440e9ac81b8f305b MS-MPPE-Encryption-Policy = Encryption-Allowed MS-MPPE-Encryption-Types = RC4-40or128-bit-Allowed 20. Теперь самое время сконфигурировать файл clients.conf, чтобы добавить какого-нибудь клиента. Например pfSense. В файле указываем ip-адрес RADIUS-клиента, секрет и другие параметры. client arasaka-pfsense { ipaddr = 10.88.88.2 proto = * secret = secret require_message_authenticator = no nas_type = other limit { max_connections = 1024 lifetime = 0 idle_timeout = 30 } } 21. Добавим наш RADIUS-сервер на pfSense, который мы только что сконфигурировали в качестве клиента как показано на скриншоте. {{:pfsense_radius_client_freeradius.jpg?direct&400|}} 22. Проверим аутентификацию через добавленный RADIUS прямо с pfSense, чтобы убедиться в том, что всё сделано верно. Открываем в главном меню: //Diagnostics -> Authentication// и вводим данные пользователя AD. {{::pfsense_radius_diag.jpg?direct&400|}} 23. Для дебага можно запускать freeradius с ключом X: freeradius -X Логи можно почитать в папке: /var/log/freeradius/ Если запуск службы будет неудачным, полезной также может оказаться команда: journalctl -xe {{tag>Debian Linux FreeRADIUS RADIUS Samba ActiveDirectory}}