User Tools

Site Tools


связка_freeradius_active_directory

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

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, который мы только что сконфигурировали в качестве клиента как показано на скриншоте.

22. Проверим аутентификацию через добавленный RADIUS прямо с pfSense, чтобы убедиться в том, что всё сделано верно.

Открываем в главном меню: Diagnostics → Authentication и вводим данные пользователя AD.

23. Для дебага можно запускать freeradius с ключом X:

 freeradius -X

Логи можно почитать в папке:

 /var/log/freeradius/

Если запуск службы будет неудачным, полезной также может оказаться команда:

 journalctl -xe
связка_freeradius_active_directory.txt · Last modified: 2022/11/09 15:35 by jp