Содержание страницы
Аутентификация — это процесс подтверждения личности. Для сетевых взаимодействий аутентификация подразумевает идентификацию одной стороны другой стороной. Существует множество способов использования аутентификации в сетях: простые пароли, сертификаты, токены одноразовых паролей (OTP), биометрическое сканирование.
Аутентификация
Подготовка
Round-Robin записи в DNS для котроллеров домена Active Directory
У многих используется несколько котроллеров домена Active Directory.
В данном случае 2 контроллера dc1.notdev.local – 192.168.10.11 и dc2.notdev.local – 192.168.10.12. Для повышения отказоустойчивости работы сервисов которые нуждаются в указании конкретного сервера, соответствующие записи Round-Robin, dc.notdev.local – 192.168.10.11 и dc.notdev.local – 192.168.10.12, что позволят указывать dc.notdev.local в роли сервера аутентификации.
PTR запись в DNS для VPN сервера
Создайте на DNS серверах, PTR-запись VPN сервера.
Для использования Kerberos-аутентификации необходимо убедиться, что на серверах DNS присутствует PTR-запись для каждого контроллера домена Active Directory.
Установить локальные DNS сервера
Отредактируйте nano /etc/resolv.conf
search notdev.local
nameserver 192.168.10.11
nameserver 192.168.10.12
Варианты установки
- Установка и настройка отдельных служб Kerberos и SSSD
- Установка и настройка только SSSD для использования нужного способа аутентификации, например: Kerberos, LDAP, AD DC, AD DC + Samba, FreeIPA и другие
Настройка OpenConnect VPN Server
Отредактируйте ocserv.conf согласно вашей конфигурации, nano /etc/ocserv/ocserv.conf
Для удалённых клиентов, которые не могут получить билет находясь за пределами организации с Active Directory или на мобильных устройствах. Используется PAM аутентификация. Для этого может потребуется настроить /etc/pam.d/ocserv. Ниже приведен конфигурации SSSD PAM + Kerberos.
auth = "pam"
Аутентификация с помощью билетов Kerberos. Кроме того, опция keytab явно устанавливает общий ключ OCServ с KDC.
Опция tgt-freshness-time указывает допустимое для аутентификации VPN время жизни билета Kerberos (TGT) в секундах. Пользователю придется проходить повторную аутентификацию, если это время будет превышено. По сути, это предотвращает использование VPN в течение всего времени жизни билета Kerberos. Опция require-local-user-map=true позволяет обращается не к локальному vpn.notdev.local имени сервера а к внешнему vpn.notdev.ru для осуществления аутентификации по билету Kerberos.
# без ограничений по времени жизни Kerberos ticket
enable-auth = "gssapi[keytab=/etc/host.keytab,require-local-user-map=true]"
# 24 часа
enable-auth = "gssapi[keytab=/etc/host.keytab,require-local-user-map=true,tgt-freshness-time=86400]"
Включение прокси-сервера MS-KKDCP на OCServ. Вам нужно будет заменить KERBEROS.REALM на вашу область и IP-адрес KDC. Этот прокси позволит клиенту получать билеты Kerberos через OCServ. Последний шаг необязателен, если ваши клиенты могут получать билеты другими способами.
kkdcp = /KdcProxy KERBEROS.REALM tcp@KDC-IP-ADDRESS:88
kkdcp = "/KdcProxy NOTDEV.LOCAL [email protected]:88"
kkdcp = "/KdcProxy NOTDEV.LOCAL [email protected]:88"
Обязательно ограничьте возможность авторизоваться на сервере по ssh с учетной записью, которая выдается для VPN пользователей
# Disable login to VPN server
default_shell = /usr/sbin/nologin
override_shell = /usr/sbin/nologin
Синхронизация времени с контроллером домена
apt install -y ntp ntpdate
Добавляем в секцию server ntp.your-provider.example свои сервера времени
Отредактируйте ntp.conf, для Debian 9/10/11 /etc/ntp.conf, а Debian 12 /etc/ntpsec/ntp.conf
# You do need to talk to an NTP server or two (or three). #server ntp.your-provider.example server dc1.notdev.local server dc2.notdev.local
Останавливаем службу NTP, выполняем синхронизацию с указанным сервером и запускаем службу NTP.
service ntp stop ntpdate dc.notdev.local # ntpdate[10465]: adjust time server 192.168.10.11 offset +0.048560 sec service ntp start
Состояние активного NTP-сервера отображается командой.
ntpq -p # remote refid st t when poll reach delay offset jitter #============================================================================== #-dc1.notdev.loc XX.XX.XX.XX 2 u 506 512 377 0.711 +52.723 6.169 #-dc2.notdev.loc YY.YY.YY.YY 3 u 474 512 377 1.148 +22.318 7.211
Создание keytab-файла для сервиса OCServ
Подключитесь к контроллеру домена Active Directory. В оснастке Domains Users and Computers создайте пользователя с именем ocserv с паролем qwerty123. Запустите командную строку или PowerShell от имени администратора и выполните одну из команд.
Достаточно создать keytab-файл используя шифрование RC4-HMAC-NT
ktpass -princ HOST/[email protected] -mapuser [email protected] -pass qwerty123 -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -out host.keytab
Но можно создать используя все доступные алгоритмы для большей совместимости
ktpass -princ HOST/vpn[email protected] -mapuser ocserv@NOTDEV.LOCAL -pass qwerty123 -crypto ALL -ptype KRB5_NT_PRINCIPAL -out host.keytab
ktpass -princ HOST/<имя сервера с сервисом OCServ в нижнем регистре>@<realm Active Directory в верхнем регистре> -mapuser ocserv@<realm Active Directory в верхнем регистре> -crypto <тип шифрования, рекомендуется указать RC4-HMAC-NT или ALL для совместимости> -ptype KRB5_NT_PRINCIPAL -pass <пароль пользователя ocserv> -out host.keytab
Должен быть ТОЛЬКО ОДИН пользователь, сопоставленный одной записью SPN (HOST/<имя сервера с сервисом OCServ в нижнем регистре>@<realm Active Directory в верхнем регистре>). Если несколько разных пользователей сопоставленных с записью SPN, то проверка подлинности Kerberos будет ВСЕГДА НЕУДАЧНОЙ.
Скопируйте файл host.keytab в директорию /etc/
SSSD – System Security Services Daemon
SSSD — это системный демон. Его основная функция — предоставление доступа к локальным или удаленным ресурсам идентификации и аутентификации через общую структуру, которая может обеспечить кэширование и офлайн-поддержку системы. Он предоставляет несколько интерфейсов, включая модули NSS и PAM или интерфейс D-Bus.
Ключевая настройка SSSD может комбинироваться, рекомендуется использовать Kerberos + SSSD, в секции домена рекомендуется дополнительно указать блок подключения krb5 описанный в 2. Вариант Установка и настройка только SSSD. Поверх данной настройки можно добавить двухфакторную проверку подлинности.
При использовании аутентификации Kerberos можно использовать фильтры simple, ad и ladp при соответствующей настройке фильтров и сопутствующих параметров.
Многие используют Kerberos+Samba+SSSD, но использование Samba и добавление сервера к контроллеру домена Active Directory может добавить некоторые неудобства при восстановлении из резервной копий или других проблемах с доступностью DC. Исключив использование Samba можно упростить работу с учетными записями в контроллере домена Active Directory.
1. Вариант установки Kerberos + SSSD
Установка и настройка Kerberos
apt install -y krb5-config krb5-user libsasl2-modules-gssapi-mit ldap-utils
Резервная копия конфигурации Kerberos
cp /etc/krb5.conf{,.bak}
Отредактируйте nano /etc/krb5.conf
[libdefaults] default_realm = NOTDEV.LOCAL default_keytab_name = /etc/host.keytab dns_lookup_kdc = yes dns_lookup_realm = yes kdc_timesync = 1 ccache_type = 4 ticket_lifetime = 24h forwardable = true proxiable = true # Windows 2003 #default_tgs_enctypes = rc4-hmac des-cbc-crc des-cbc-md5 #default_tkt_enctypes = rc4-hmac des-cbc-crc des-cbc-md5 #permitted_enctypes = rc4-hmac des-cbc-crc des-cbc-md5 # Windows 2008 with AES default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 # Windows 2012 R2 with DES3 #default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 des3-hmac-sha1 #default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 des3-hmac-sha1 #permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 des3-hmac-sha1 [realms] NOTDEV.LOCAL = { kdc = dc1.notdev.local kdc = dc2.notdev.local admin_server = dc1.notdev.local admin_server = dc2.notdev.local default_domain = notdev.local
auto_to_local = DEFAULT } [domain_realm] .notdev.local = NOTDEV.LOCAL notdev.local = NOTDEV.LOCAL
.NOTDEV.LOCAL = NOTDEV.LOCAL
NOTDEV.LOCAL = NOTDEV.LOCAL
Проверка аутентификации
kinit [email protected]
#Password for [email protected]: klist
#Ticket cache: FILE:/tmp/krb5cc_0 #Default principal: [email protected] # #Valid starting Expires Service principal #04/21/2022 19:36:42 07/15/2024 05:36:42 krbtgt/[email protected] #renew until 07/15/2024 19:36:36 kdestroy
kinit -Vvkt /etc/host.keytab HOST/[email protected]
#Using default cache: /tmp/krb5cc_0
#Using principal: HOST/[email protected]
#Using keytab: /etc/host.keytab
#Authenticated to Kerberos v5
kinit -kV -p HOST/vpn.notdev.local
#Using default cache: /tmp/krb5cc_0 #Using principal: HOST/[email protected] #Authenticated to Kerberos v5 klist
#Ticket cache: FILE:/tmp/krb5cc_0 #Default principal: HOST/[email protected] # #Valid starting Expires Service principal #04/21/2022 19:46:46 07/15/2024 05:46:46 krbtgt/[email protected] #renew until 07/15/2024 19:46:46
klist -k -e
#Keytab name: FILE:/etc/host.keytab
#KVNO Principal
#---- --------------------------------------------------------------------------
#3 HOST/[email protected] (DEPRECATED:des-cbc-crc)
#3 HOST/[email protected] (DEPRECATED:des-cbc-md5)
#3 HOST/[email protected] (DEPRECATED:arcfour-hmac)
#3 HOST/[email protected] (aes256-cts-hmac-sha1-96)
#3 HOST/[email protected] (aes128-cts-hmac-sha1-96)
kdestroy
Установка и настройка SSSD
SSD предоставляет набор демонов для управления доступом к удаленным каталогам и механизмам аутентификации, таким как LDAP, Kerberos или FreeIPA. Он предоставляет интерфейс NSS и PAM к системе и подключаемую внутреннюю систему для подключения к нескольким различным источникам учетных записей.
apt install -y sssd sssd-ad sssd-krb5 sssd-ldap sssd-tools
Создать конфигурационный файл и назначить корректные права
touch /etc/sssd/sssd.conf
chmod 600 /etc/sssd/sssd.conf
Минимальная конфигурация для работы с Kerberos, в параметрах domains и ad_domain указываем домен который указывали в настройках Kerberos /etc/krb5.conf в default_realm.
nano /etc/sssd/sssd.conf
[sssd]
services = nss, pam
domains = NOTDEV.LOCAL
config_file_version = 2
debug_level = 1
[domain/NOTDEV.LOCAL]
ad_domain = NOTDEV.LOCAL
ad_server = dc.notdev.local
ad_backup_server = dc1.notdev.local, dc2.notdev.local
ad_hostname = vpn.notdev.local
# Disable enumeration to improve processing speed
enumerate = false
id_provider = ad
auth_provider = ad
# Disallows password changes
chpass_provider = none
# Restrict authorization only if the user is a member of a group
# via access provider = ad
#access_provider = ad
#ad_access_filter = (memberOf=cn=vpn,dc=notdev,dc=local)
# FIX [ad_gpo_access_done] (0x0040): GPO-based access control failed
#ad_gpo_access_control = disabled
# via access provider = simple
#access_provider = simple
#simple_allow_groups = [email protected]
# NOT cache credentials
cache_credentials = false
# Home dir
fallback_homedir = /home/%d/%u
override_homedir = /home/%d/%u
# Disable login to VPN server
default_shell = /usr/sbin/nologin
override_shell = /usr/sbin/nologin
debug_level = 1
[nss]
entry_negative_timeout = 0
debug_level = 1
[pam]
debug_level = 1
Проверка аутентификации
getent passwd vpn-test-user
#vpn-test-user:*:1173202995:1173200513:vpn-test-user:/home/NOTDEV.LOCAL/vpn-test-user:/usr/sbin/nologin
2. Вариант установки только SSSD
SSD предоставляет набор демонов для управления доступом к удаленным каталогам и механизмам аутентификации, таким как LDAP, Kerberos или FreeIPA. Он предоставляет интерфейс NSS и PAM к системе и подключаемую внутреннюю систему для подключения к нескольким различным источникам учетных записей.
apt install -y sssd sssd-ad sssd-krb5 sssd-ldap sssd-tools
Создать конфигурационный файл и назначить корректные права
touch /etc/sssd/sssd.conf
chmod 600 /etc/sssd/sssd.conf
Минимальная конфигурация для работы с Kerberos, в параметрах domains и ad_domain указываем домен который указывали в Kerberos в default_realm.
nano /etc/sssd/sssd.conf
[sssd]
services = nss, pam
domains = NOTDEV.LOCAL
config_file_version = 2
debug_level = 1
[domain/NOTDEV.LOCAL]
ad_domain = NOTDEV.LOCAL
ad_server = dc.notdev.local
ad_backup_server = dc1.notdev.local, dc2.notdev.local
ad_hostname = vpn.notdev.local
# Disable enumeration to improve processing speed
enumerate = false
id_provider = ad
auth_provider = ad
# Disallows password changes
chpass_provider = none
krb5_realm = NOTDEV.LOCAL
krb5_server = dc.notdev.local
krb5_backup_server = dc1.notdev.local, dc2.notdev.local
krb5_validate = true
krb5_keytab = /etc/host.keytab
krb5_store_password_if_offline = false
# Restrict authorization only if the user is a member of a group
# via access provider = ad
#access_provider = ad
#ad_access_filter = (memberOf=cn=vpn,dc=notdev,dc=local)
# FIX [ad_gpo_access_done] (0x0040): GPO-based access control failed
#ad_gpo_access_control = disabled
# via access provider = simple
#access_provider = simple
#simple_allow_groups = [email protected]
# NOT cache credentials
cache_credentials = false
# Home dir
fallback_homedir = /home/%d/%u
override_homedir = /home/%d/%u
# Disable login to VPN server
default_shell = /usr/sbin/nologin
override_shell = /usr/sbin/nologin
debug_level = 1
[nss]
entry_negative_timeout = 0
debug_level = 1
[pam]
debug_level = 1
Проверка аутентификации
getent passwd vpn-test-user
#vpn-test-user:*:1173202995:1173200513:vpn-test-user:/home/NOTDEV.LOCAL/vpn-test-user:/usr/sbin/nologin
Контроль доступа
Рекомендуемый способ подключения клиента GNU/Linux к домену Active Directory — использование поставщика AD . Однако в конфигурации поставщика Active Directory по умолчанию проверяется только истечение срока действия учетной записи. Очень часто администратору необходимо дополнительно ограничить доступ к клиентской станции, ограничив доступ определенным пользователем, группой пользователей или используя какой-либо другой механизм фильтрации. Для этого администратору необходимо использовать альтернативного поставщика контроля доступа. Однако ни один из альтернативных вариантов не обеспечивает полную требуемую функциональность для всех пользователей, разрешенных поставщиком AD, более того, их сложно настроить. Эта страница дизайна предлагает расширение поставщика доступа AD для решения этих проблем.
Simple
Поставщик простого доступа предоставляет или запрещает доступ на основе содержимого списков разрешений и запретов. Существуют отдельные списки для имен пользователей и групп, а также разрешенных и запрещенных объектов.
Пример: Конфигурация, которая предоставляет доступ пользователю с именем tux и группе с именем vpn.
access_provider = simple
simple_allow_users = tux
simple_allow_groups = vpn@notdev.local
Плюсы:
- Легко настроить
- Realmd предоставляет интерфейс для настройки простого провайдера доступа с помощью CLI
Минусы:
- Срок действия аккаунта не проверяется
- Нет возможности объединить несколько предложений
- Не соответствует структуре LDAP, используемой Active Directory
LDAP
Поставщик доступа LDAP предлагает способ настройки решения о контроле доступа на основе соответствия пользователя предварительно настроенному фильтру. Более того, поставщик доступа LDAP также предлагает цепочку других проверок на основе LDAP. Для среды AD применяется только проверка срока действия учетной записи.
Пример: Конфигурация, которая разрешает доступ тем пользователям, которые являются членами группы с именем vpn. И имеют допустимый домашний каталог, установленный с помощью ldap_access_filter директивы. Пользователи, которые соответствуют настроенному фильтру, также проверяются на предмет того, истек ли их срок действия ( ldap_access_order содержит expire).
ldap_schema = ad
ldap_id_mapping = true
ldap_sasl_mech = gssapi
ldap_sasl_authid = HOST/[email protected]
ldap_access_order = filter, expire
ldap_account_expire_policy = ad
ldap_krb5_init_creds = true
access_provider = ldap
ldap_access_filter = (memberOf=cn=vpn,dc=notdev,dc=local)
Плюсы:
- Позволяет администратору основывать контроль доступа на настраиваемом фильтре LDAP, что позволяет комбинировать несколько условий
- Условия не ограничиваются именами пользователей или членством в группах
Минусы:
- Конфигурация должна включать несколько низкоуровневых настроек LDAP
- Администратору необходимо объединить поставщиков AD и LDAP
- Проверку срока действия учетной записи необходимо настраивать отдельно
- Нет поддержки для пользователей из доверенных доменов AD
- Нет интеграции с realmd
AD
Поставщик доступа AD предлагает способ настройки решения о контроле доступа на основе соответствия пользователя предварительно настроенному фильтру. Который сначала сопоставит запись с фильтром ad_access_filter в этом параметре. Если запись совпадет, то учетная запись будет проверена на предмет истечения срока действия.
Пример: Конфигурация, которая разрешает доступ тем пользователям, которые являются членами группы с именем vpn. И имеют допустимый домашний каталог, установленный с помощью ad_access_filter директивы.
access_provider = ad
ad_access_filter = (memberOf=cn=vpn,dc=notdev,dc=local)
# Исправление ошибки [ad_gpo_access_done] (0x0040): GPO-based access control failed
ad_gpo_access_control = disabled
Плюсы:
- Простая и интуитивно понятная настройка. Настраивается только один тип провайдера
- Разумные настройки по умолчанию — всегда проверяет срок действия, а также проверяет фильтр доступа, если настроено соответствующим образом
- Будет поддерживать пользователей и группы из доверенных доменов, используя существующую инфраструктуру поставщика AD
Минусы:
- Нет интеграции с realmd
В имени группы возможно использование групп с пробелами и русскими символами, но у вас могут возникнуть проблемы
simple_allow_groups = Доступ [email protected]
ldap_access_filter = (memberOf=CN=Доступ VPN,DC=notdev,DC=local)
ad_access_filter = (memberOf=CN=Доступ VPN,DC=notdev,DC=local)
Дополнительные настройки
- Как установить и настроить OpenConnect VPN Server с поддержкой Let’s Encrypt
- Аутентификация пользователей в OpenConnect VPN Server – AD, Kerberos
- Безопасность OpenConnect VPN Server
- Мониторинг пользовательской активности OpenConnect VPN Server
Дополнительная информация
- System-Level Authentication Guide
- How to setup ocserv for PAM authentication
- Integrating OCServ with Microsoft AD
- Using Kerberos authentication with OCServ
- How to setup OCServ for RADIUS authentication
- Two factor authentication with OCServ
- Integrating with a Windows server using the AD provider
- Adding the ad_access_filter option
- GPO-Based Access Control
- Integrating with a Windows server using the LDAP provider
- Active Directory: Использование LDAP-фильтров