Radius Server. Аутентификация пользователей Wi-Fi на основе Freeradius + Active Directory

Краткое предисловие, что привело к появлению данной статьи.

Со стороны ИБ поступил запрос, что бы с табличек, расклеенных по офису, был убран SSID и пароль от рабочего Wi-Fi с доступом ко всем корпоративным ресурсам компании. Таблички заменили и сразу же встал вопрос, как сотрудникам узнать пароль и должны ли они его вообще знать, т.к. зная пароль его можно передать третьим лицам, а передав пароль третьему лицу теряется смысл скрытия SSID и пароля из общего доступа. Так и было принято решение о необходимости внедрения Radius сервера, чтобы каждый сотрудник проходил авторизацию по своей доменной учетной записи при подключении к Wi-Fi сети.

Процесс внедрения условно можно разделить на 2 этапа:

  •  Подготовка сервера и ввод его в домен
  • Установка, настройка и ввод в эксплуатацию Radius сервера.

1) Все действия происходят на сервере Debian 12 BookWorm. Если у вас другой дистрибутив или версия ОС, возможно вам понадобится адаптировать команды и пути к файлам под вашу версию.

2) Задайте статический ip адрес.

Приведите файл /etc/network/interfaces к следующему виду:

Где:

address – статический ip сервера и маска подсети

gateway – ip адрес шлюза по умолчанию

Для это откройте файл для редактирования: sudo nano /etc/network/interfaces

3) Сконфигурируйте ip адрес dns сервера и имя домена.

Приведите файл /etc/resolf.conf к виду:

Где:

nameserver – ip адрес вашего контроллера домена

search – доменное имя вашего домена

Для этого откройте файл для редактирования sudo nano /etc/resolf.conf

4) Убедитесь, что возвращаемые ip адреса корректные, а так же сам ответ приходит от dns сервера – контроллера домена.

Введите команду nslookup dc1.nnnn.local

Вывод должен быть примерно следующим:

Где:

Server – ip адрес сервера от которого получен ответ

Name – имя сервера

Address – ip адрес сервера, имя которого было в запросе

Введите команду nslookup 10.151.1.86 для проверки PTR записи dns сервера

Вывод должен быть примерно следующим:

Где видно, что ip адрес сервера 10.151.1.86 разрешается в имя dc1.nnnn.local

5) Установите “chrony” для синхронизации времени с контроллером домена.

Введите команду sudo apt install chrony

Конфигурационный файл chrony находится по пути /etc/chrony/chrony.conf

Откройте файл для редактирования: sudo nano /etc/chrony/chrony.conf

Приведите конфигурационный файл к следующему виду:

______________________________________________________________________________________________________

# Welcome to the chrony configuration file. See chrony.conf(5) for more

# information about usuable directives.

# This directive specify the location of the file containing ID/key pairs for

# NTP authentication.

keyfile /etc/chrony/chrony.keys

# This directive specify the file into which chronyd will store the rate

# information.

driftfile /var/lib/chrony/chrony.drift

# Uncomment the following line to turn logging on.

#log tracking measurements statistics

# Log files location.

logdir /var/log/chrony

# Stop bad estimates upsetting machine clock.

maxupdateskew 100.0

# This directive tells ‘chronyd’ to parse the ‘adjtime’ file to find out if the

# real-time clock keeps local time or UTC. It overrides the ‘rtconutc’ directive.

hwclockfile /etc/adjtime

# This directive enables kernel synchronisation (every 11 minutes) of the

# real-time clock. Note that it can’t be used along with the ‘rtcfile’ directive.

rtcsync

# Step the system clock instead of slewing it if the adjustment is larger than

# one second, but only in the first three clock updates.

makestep 1 3

# ipaddress of this Unix domain member

bindcmdaddress 10.151.1.33

# The source, where we are receiving the time from

server DC1.nnnn.local    iburst

server DC2.nnnn.local iburst

______________________________________________________________________________________________________

Где:

bindcmdaddress 10.151.1.33 – ip адрес radius сервера

server DC1.nnnn.local – имя локального ntp сервера, в нашем случае контроллера домена

server DC2.nnnn.local – имя локального ntp сервера, в нашем случае контроллера домена

6) Установите Samba.

Введите команду sudo apt install acl attr samba winbind libpam-winbind libnss-winbind krb5-config krb5-user dnsutils python3-setproctitle

7) Отредактируйте конфигурационный файл krbconf, предварительно сделав его резервную копию.

Введите команду sudo cp /etc/krb5.conf /etc/krb5.conf.bak

Откройте файл для редактирования sudo nano /etc/krb5.conf

Приведите файл к следующему состоянию:

______________________________________________________________________________________________________

[libdefaults]

     default_realm = NNNN.LOCAL

     clockskew = 300

     v4_instance_resolve = false

     v4_name_convert = {

          host = {

                rcmd = host

                ftp = ftp

          }

          plain = {

                something = something-else

          }

     }

[realms]

     NNNN.LOCAL = {

          kdc = NNNN.LOCAL  # контроллер домена или домен

          admin_server = NNNN.LOCAL  # контроллер домена или домен

     }

[domain_realm]

     .nnnn.local = NNNN.LOCAL

______________________________________________________________________________________________________

8) Отредактируйте файл hosts.

Откройте файл для редактирования sudo nano /etc/hosts

Приведите файл к следующему виду:

______________________________________________________________________________________________________

127.0.0.1       localhost

10.151.1.33     freeradius.nnnn.local freeradius

______________________________________________________________________________________________________

Где адрес 127.0.0.1 должен разрешаться только на “localhost”, а ip адрес radius сервера 10.151.1.33 должен разрешаться в FQDN и короткое имя сервера.

9) Отредактируйте конфигурационный файл smb.conf, предварительно сделав его резервную копию.

Введите команду sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

Откройте файл для редактирования sudo nano /etc/samba/smb.conf

Приведите файл к следующему виду:

______________________________________________________________________________________________________

[global]

       workgroup = NNNN

       server string = Radius Server

       security = ads

       ;hosts allow = 192.168.0. 127.

       log file = /var/log/samba/log.%m

       max log size = 500

       password server = DC1.NNNN.LOCAL  # контроллер домена или домен

       encrypt passwords = yes

       realm = NNNN.LOCAL

       socket options = TCP_NODELAY

       os level = 1

       ntlm auth = mschapv2-and-ntlmv2-only

       winbind use default domain = true

       unix charset = koi8-r

       dos charset = cp866

       winbind use default domain = yes

       winbind uid = 10000-15000

       winbind gid = 10000-15000

       winbind enum users = yes

       winbind enum groups = yes

______________________________________________________________________________________________________

10) Перезагрузите сервер.

Введите команду sudo reboot

11) Добавьте сервер в домен.

Введите команду sudo net ads join -U admin

Где “admin” – доменная учетная запись пользователя с правами на добавление компьютеров в домен.

Введите пароль от учетной записи sudo

Введите пароль от учетной записи “admin”

12) Перезагрузить сервер.

Введите команду sudo reboot

13) Проверить, что сервер видит учетные записи домена.

Введите команду wbinfo -u

В выводе должен быть перечень учетных записей домена

Введите команду sudo wbinfo -a test33%ABcd1234!

где:

test33 – доменная учетная запись

ABcd1234! – пароль от учетной записи test33

Вывод команды должен быть примерно такой:

В выводе команды должно быть видно, что аутентификация пользователя прошла успешно – authentication succeeded

Введите команду ntlm_auth –request-nt-key –domain=NVBS.LOCAL –username=test33 –password=ABcd1234!

Вывод команды должен быть примерно такой:

В выводе команды не должно быть ошибок

На этом этапе мы завершили настройку samba и убедились, что наш сервер находится в домене и готов аутентифицировать пользователей по протоколу ntlm.

Можно переходить к настройке FreeRadius.

14) Установите FreeRadius.

Введите команду sudo apt install freeradius

15) Отредактируйте конфигурационный файл ntlm_auth, предварительно создав его резервную копию.

Файл находится по пути /etc/freeradius/3.0/mods-available/ntlm_auth

Введите команду sudo su

Введите пароль от sudo

Введите команду cp /etc/freeradius/3.0/mods-available/ntlm_auth /etc/freeradius/3.0/mods-available/ntlm_auth.bak

Введите команду nano /etc/freeradius/3.0/mods-available/ntlm_auth

Приведите файл к следующему виду:

______________________________________________________________________________________________________

exec ntlm_auth {

        wait = yes

        program = “/usr/bin/ntlm_auth –request-nt-key –domain=NNNN.LOCAL –username=%{mschap:User-Name} –password=%{User-Password}”

}

______________________________________________________________________________________________________

Эта конфигурация сообщает серверу, что нужно запустить ntlm_auth аутентификацию с именем пользователя и паролем, полученным из Access-Request.

16) Отредактируйте конфигурационный файл /etc/freeradius/3.0/sites-enabled/default, предварительно создав его резервную копию.

Как и в предыдущем пункте, файл default является ссылкой на файл /etc/freeradius/3.0/sites-available/default

Введите команду cp /etc/freeradius/3.0/sites-available/default /etc/freeradius/3.0/sites-available/default.bak чтобы создать резервную копию.

Введите команду nano /etc/freeradius/3.0/sites-enabled/default чтобы открыть конфигурационный файл.

В секцию “authenticate” добавьте ntlm_auth, что бы получилось примерно следующее:

______________________________________________________________________________________________________

authenticate {

               …

               Auth-Type PAP {

                Pap

}

ntlm_auth

}

______________________________________________________________________________________________________

17) Отредактируйте конфигурационный файл /etc/freeradius/3.0/sites-enabled/inner-tunnel

Этот файл так же является ссылкой на файл /etc/freeradius/3.0/sites-available/inner-tunnel

Введите команду cp /etc/freeradius/3.0/sites-available/inner-tunnel /etc/freeradius/3.0/sites-available/inner-tunnel.bak чтобы создать резервную копию.

Введите команду nano /etc/freeradius/3.0/sites-enabled/inner-tunnel чтобы открыть конфигурационный файл.

Как и в предыдущем пункте добавьте в секцию “authenticate” ntlm_auth чтобы получилась примерно следующая конфигурация:

______________________________________________________________________________________________________

authenticate {

               …

               Auth-Type PAP {

                Pap

}

ntlm_auth

}

______________________________________________________________________________________________________

18) Отредактируйте файл users

Для последующей отладки и тестирования отредактируйте файл /etc/freeradius/3.0/users

Введите команду nano /etc/freeradius/3.0/users

Добавьте первой строкой DEFAULT   Auth-Type = ntlm_auth чтобы получилось примерно следующее:

19) Запустите сервер в режиме отладки.

Введите команду exit чтобы выйти из окружения su

Введите команду sudo systemctl stop freeradius.service чтобы остановить службу

Введите команду sudo freeradius -X чтобы запустить сервер в режиме отладки

Дождитесь пока загрузятся все модули и конфигурации и на экране появится “ Ready to process requests.”

20) Запустите тест.

В новом окне терминала введите команду sudo radtest  test33 ABcd1234!  localhost 0 testing123

Где:

test33 – доменная учетная запись

ABcd1234! – пароль от учетной записи test33

testing123 – пароль по умолчанию для freeradius

Вывод должен быть подобен следующему: Received Access-Accept id 12 from 127.0.0.1:1812 to 127.0.0.1:55600 length=20

На самом сервере Вы так же должны увидеть лог успешной аутентификации подобно следующему примеру:

21) Удалите тестовый метод аутентификации из файла users.

Введите команду sudo su чтобы перейти в режим su.

Введите команду nano /etc/freeradius/3.0/users чтобы открыть конфигурационный файл

Удалите строку DEFAULT   Auth-Type = ntlm_auth

22) Отредактируйте конфигурационный файл mschap, предварительно сделав его резервную копию.

Файл находится по пути /etc/freeradius/3.0/mods-available/mschap

Введите команду cp /etc/freeradius/3.0/mods-available/mschap /etc/freeradius/3.0/mods-available/mschap.bak чтобы создать резервную копию.

Введите команду nano /etc/freeradius/3.0/mods-available/mschap чтобы открыть файл.

Найдите и раскомментируйте строку “use_mppe = yes”

Найдите и раскомментируйте строку “ require_encryption = yes ”

Найдите и раскомментируйте строку “ require_strong = yes ”

Найдите и раскомментируйте строку начинающуюся с “ntlm_auth = ”

Приведите строку к виду, чтобы получилось примерно следующее:

______________________________________________________________________________________________________

ntlm_auth = “/usr/bin/ntlm_auth –request-nt-key –allow-mschapv2 –username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} –challenge=%{%{mschap:Challenge}:-00} –nt-response=%{%{mschap:NT-Response}:-00}”

______________________________________________________________________________________________________

23) Запустите тест.

Выйдите из режима su

Введите команду exit

Введите команду sudo freeradius -X чтобы запустить сервер в режиме отладки

В другом терминале введите команду sudo radtest -t mschap test33 ABcd1234! localhost 0 testing123

Где:

test33 – доменная учетная запись

ABcd1234 – пароль от учетной записи test33

testing123 – пароль по умолчанию

Вы должны увидеть отказ “Access-Reject”, а в терминале сервера ошибку “mschap: ERROR: Program returned code (1) and output ‘Reading winbind reply failed! (0xc0000001)’” и ” mschap: ERROR: Reading winbind reply failed! (0xc0000001)”

24) Назначте права доступа.

Ошибка из предыдущего пункта связана с отсутствием прав доступа пользователя freerad от имени которого работает radius к директории winbindd_priveleged, находящейся по пути /var/lib/samba/winbindd_priveleged.

На втором терминале, где Вы запускали команду “radtest” введите команду sudo su, чтобы перейти в окружение su.

Введите команду usermod -aG winbindd_priv freerad чтобы добавить пользователя freerad в группу winbindd_priv.

Введите команду exit чтобы выйти из окружения su.

На первом терминале перезапустите сервер в режиме отладки.

На втором терминале повторно запустите команду sudo radtest -t mschap test33 ABcd1234! localhost 0 testing123

Тест должен пройти без ошибок и вывод должен иметь примерно следующий вид:

На первом терминале, завершите режим отладки и введите команду sudo systemctl start freeradius.service чтобы запустить сервис в штатном режиме.

Radius сервер готов к эксплуатации.

Scroll to Top