Sys-Admin Forum

Аутентификация на оборудовании на основе Radius + AD

Для удобства организации доступа к сетевым устройствам удобно использовать централизованную схему аутентификации на основе протокола Radius или tacacs+ (DIAMETER не рассматриваем в принципе, я не видел устройств с его поддержкой для наших целей).
Поскольку tacacs+ поддерживается не таким большим количеством оборудования (например, его нет в Mikrotik, я НЕГОДУЮ!), то будем авторизовываться через radius.
Radius - сетевой протокол, предназначенный для обеспечения централизованной аутентификации, авторизации и учёта (Authentication, Authorization, and Accounting, AAA) пользователей, подключающихся к различным сетевым службам, FreeRADIUS — RADIUS сервер с открытым исходным кодом.
Рассмотрим настройку сервера FreeRADIUS для работы с доменом Active Directory, для организации доступа к сети на основании учетных записей доменных пользователей. FreeRADIUS устанавливается на сервер под CentOS 6.10, файрвол и selinux отключены.

  1. Обязательно указываем DNS, отвечающий за домен
[[email protected] ~]$ cat /etc/resolv.conf
search test.local
nameserver 10.0.0.16
nameserver fe80::16
  1. Устанавливаем необходимые зависимости:
sudo yum -y install authconfig samba samba-winbind samba-client pam_krb5 krb5-workstation net-tools bind-utils samba-winbind-clients freeradius freeradius-krb5
  1. Запускаем интерфейс для настройки источников системной аутентификации
sudo authconfig-tui

Запускается псевдо-графическая оболочка для настройки
На странице “Authentication Configuration” выбираем “User Information -> Use Winbind”, “Authentication -> Use Kerberos”

Далее в меню “Kerberos Settings” указываем “Realm”, “KDC” и “Admin Server”. Ставим оба переключателя “Use DNS to”

В “Winbind Settings” выбираем “Security Model” -> ads, опять указываем домен (Netbios-имя), контроллер домена, область и оболочку по-умолчанию в зависимости от необходимости.

  1. Запускаем демоны и добавляем их в автозагрузку
[[email protected] ~]$ sudo service smb start
Starting SMB services:                                     [  OK  ]
[[email protected] ~]$ sudo service nmb start
Starting NMB services:                                     [  OK  ]
[[email protected] ~]$ sudo chkconfig smb on
[[email protected] ~]$ sudo chkconfig nmb on
  1. Присоединяем сервер к домену
[[email protected] ~]$ sudo net ads join -U Administrator
Enter Administrator"s password:
Using short domain name -- TEST
Joined "AUTH" to dns domain "test.local"
No DNS domain configured for freeradius. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER
  1. Запускаем демон winbind
[[email protected] ~]$ sudo service winbind start
Starting Winbind services:                                 [  OK  ]
[[email protected] ~]$ sudo chkconfig winbind on

ОЧЕНЬ ВАЖНО!!! Необходимо добавить права radius’у на доступ к winbind.

sudo usermod -a -G wbpriv radiusd
  1. Проверяем доступ к AD
[[email protected] ~]$ wbinfo -u
TEST\administrator
TEST\guest
TEST\krbtgt
  1. Проверяем аутентификацию ntlm
[[email protected] ~]$ ntlm_auth --request-nt-key --domain=TEST.LOCAL --username=Administrator --password=PaSsWoRd
NT_STATUS_OK: Success (0x0)
  1. Идем в файл /etc/raddb/modules/ntlm_auth прописываем правильные значения
[[email protected] ~]$ sudo cat /etc/raddb/modules/ntlm_auth
exec ntlm_auth {
        wait = yes
         program = "/usr/bin/ntlm_auth --request-nt-key --domain=TEST.LOCAL  --username=%{mschap:User-Name} --password=%{User-Password}"
}

Идём в /etc/raddb/modules/mschap, расскомментируем строку и добавим домен

ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --domain=TEST.LOCAL --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"

Правим конфигурацию виртуальных сервров Freeradius

[[email protected] ~]$ sudo cat /etc/raddb/sites-enabled/default
        ...
authenticate {
        ...
        ntlm_auth
        ...
}

В файл /etc/raddb/users добавляем следующую секцию

DEFAULT     Auth-Type = ntlm_auth

Создаем клиента для Freeradius

cat /etc/raddb/clients.conf
client 10.0.0.0/8 {
        secret          = VeRySeCrEt
        nas_type        = other
}
  1. Проверяем работу. Для этого открываем ещё одну консоль. В первой запускаем freeradius в режиме отладки:
[[email protected] ~]$ sudo radiusd -X

А во второй пытаемся авторизоваться

[[email protected] ~]radtest -t mschap Administrator "пароль" 10.0.0.1 1812 VeRySeCrEt
Sending Access-Request of id 120 to 10.0.0.1 port 1812
        User-Name = "Administrator"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 1812
        Message-Authenticator = 0x00000000000000000000000000000000
        MS-CHAP-Challenge = 0xf9bf25a95e383336
        MS-CHAP-Response = 0x0001000000000000000000000000000000000000000000000000b66d6382f418a816ea310841a43f80fcc4c7d80a515fe939
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=120, length=84
        MS-CHAP-MPPE-Keys = 0x000000000000000052c4e2d09dee0a860679da01746bc1290000000000000000
        MS-MPPE-Encryption-Policy = 0x00000001
        MS-MPPE-Encryption-Types = 0x00000006
  1. Но это ещё не всё. Нехорошо, если под любой учёткой секретаря можно зайти на устройство. Поэтому добавим в файлы /etc/raddb/mods-enabled/ntlm_auth и в /etc/raddb/modules/mschap в строку с указанием ключей для команды ntlm_auth следующую конструкцию
--require-membership-of="TEST\GROUP_NAME"