===== Связка 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}}