- Начало работы
- Интеграция
- HTTP API
- Single Sign-On
- OpenID Connect
- RADIUS адаптер
- LDAP адаптер
- Портал самообслуживания
- MULTIFACTOR Directory Sync
- Windows Logon
- Регистрация пользователей
- .NET Core
- 1с-Bitrix24
- 1с-плагин двухфакторной аутентификации
- 1С:Предприятие с системой единого входа на базе OIDC
- ADFS
- ASP.NET
- Ansible AWX
- Atlassian Cloud
- BearPass
- BI.ZONE ZTNA
- Check Point VPN
- Cisco ASA VPN
- Citrix Gateway
- Deckhouse Stronghold
- Exchange ActiveSync
- FortiGate VPN
- HRBOX
- Huawei Cloud
- Huawei VPN
- Ideco
- Infrascope
- Grafana
- Keycloak
- Let's Encrypt Windows Server
- Linux logon (GUI/SSH)
- Linux SSH
- Linux SUDO
- Microsoft Entra ID
- MikroTik L2TP VPN
- NGate VPN
- Network Policy Server (NPS)
- Nextcloud
- OpenVPN
- OpenVPN + AD
- OpenVPN Access Server
- OpenVPN pfSense
- Outlook Web Access (OWA)
- Palo Alto GlobalProtect
- Passwork
- RD Gateway (RDGW)
- RdWeb
- Redmine
- Starvault
- Solar SafeInspect
- UserGate VPN
- VMware Horizon Cloud
- VMware Horizon View
- VMware vCloud Director
- VMware vSphere
- Vault
- ViPNET
- Windows VPN
- WordPress
- Yandex.Cloud
- Yandex 360
- Zabbix
- АйТи-Бастион
- Континент 4 VPN
- МТС Линк (бывш. webinar.ru)
- С-Терра VPN
- Точка доступа Wi-Fi
- ФПСУ-IP/Клиент
- Пользовательское соглашение об использовании программного обеспечения «МУЛЬТИФАКТОР»
- Политика в отношении обработки персональных данных при использовании сайта https://multifactor.ru/
- Пользовательское соглашение об использовании мобильного приложения «MULTIFACTOR»
- Политика в отношении обработки персональных данных
- Согласие на обработку персональных данных пользователей сайта https://multifactor.ru/
- Лицензионное соглашение
- Политика оплаты
- Результаты проведения специальной оценки условий труда (СОУТ)
Настройка среды единого входа (SSO) на основе Kerberos
В MULTIFACTOR SelfService Portal реализована поддержка Kerberos-аутентификации, обеспечивающая прозрачный вход пользователей (Single Sign-On) в корпоративной среде.
При доступе к приложению браузер автоматически получает сервисный билет (Service Ticket) от контроллера домена и передаёт его в HTTP-заголовке Authorization: Negotiate.
Приложение обрабатывает полученный Kerberos-токен и выполняет его криптографическую проверку с использованием keytab-файла, содержащего ключ сервисной учётной записи, зарегистрированной в Active Directory.
В случае успешной проверки из токена извлекается доменное имя пользователя, которое используется для его идентификации и авторизации в системе SSP.
При этом передача пароля пользователя по сети не осуществляется.
Схема работы
- Пользователь выполняет вход в ОС Windows с учетными данными домена Active Directory (AD).
- Центр распространения ключей (KDC) , функционирующий на контроллере AD, выдает билет для получения билетов (TGT) после успешной аутентификации.
- TGT сохраняется в кэше подсистемы безопасности Windows (LSA) рабочей станции для последующего использования.
- При открытии URL
https://app.example.comбраузер с использованием механизма согласования протоколов (SPNEGO) запрашивает сервисный билет для целевого приложения и передает его в заголовкеAuthorization: Negotiate, обеспечивая единый вход (SSO) . - Обратный прокси-сервер (Nginx) транслирует запрос в приложение без изменения заголовка.
- Приложение SelfService Portal (SSP) выполняет криптографическую проверку токена с использованием файла ключей сервисной учетной записи (keytab)
- Из расшифрованного токена извлекается идентификатор субъекта Kerberos пользователя в формате
user@EXAMPLE.COM(UPN) для идентификации в системе. - После чего пользователь получает доступ к SSP без повторного ввода логина и пароля.
Состав окружения и требования
Типовой состав окружения
Компонент |
Назначение |
AD Domain Controller (Windows Server 2019) |
Kerberos KDC |
AD Service account |
svc_ssp |
Ubuntu 22.04 server |
Хост приложения |
Nginx 1.18 |
Reverse proxy |
VPN клиент (например OpenVPN3) |
Доступ к корпоративной сети |
Chrony |
Синхронизация времени |
Linux users |
srv_user (приложение), www-data (Nginx) |
Linux group |
ssp-group (members: srv_user, www-data) |
Требования
Категория |
Требование |
Описание |
|---|---|---|
Сеть |
Доступность DC-контроллера |
Сервер Ubuntu должен иметь доступ к контроллеру домена (DC) по внутреннему IP-адресу через корпоративный VPN |
Сеть |
DNS-резолвинг |
На сервере Ubuntu должен быть настроен корректный резолвинг доменных имен контроллеров домена |
Доступность AD |
DNS |
Контроллер домена должен предоставлять DNS-сервис для разрешения имен и SRV-записей |
Доступность AD |
KDC |
Контроллер домена должен предоставлять сервис центра распространения ключей (Key Distribution Center) |
Доступность AD |
LDAP |
Контроллер домена должен предоставлять LDAP-сервис для доступа к каталогу Active Directory |
Время |
Синхронизация времени |
Разница во времени между сервером Ubuntu и контроллером домена не должна превышать 5 минут |
Время |
Chrony |
Для синхронизации времени на сервере Ubuntu должен быть установлен и настроен пакет Chrony (или NTP) |
Учетные записи |
Service Account |
Сервисная учетная запись должна быть создана в Active Directory для проверки Kerberos-билетов |
Учетные записи |
keytab-файл |
Для сервисной учетной записи должен быть сгенерирован и размещен на сервере keytab-файл |
Браузер |
Доверенные зоны |
Для работы Kerberos в браузере URL приложения должен быть добавлен в зону локальной интрасети или доверенных узлов |
Nginx |
Отключение HTTP/2 |
Kerberos-аутентификация несовместима с HTTP/2. Для виртуального хоста приложения HTTP/2 должен быть отключен, используется HTTP/1.1 |
Nginx |
Режим проксирования |
Nginx выполняет функции обратного прокси без изменения заголовка |
Приложение |
SPNEGO-модуль |
SPNEGO-модуль Nginx не используется. Проверка Kerberos-токенов реализована на уровне приложения |
Проверка DNS
Проверка
cat /etc/resolv.conf
Должен использоваться AD DNS.
nslookup <AD_DOMAIN> nslookup <DC_HOSTNAME>
Проверка портов Kerberos
nc -zv <DC_HOST> 88 nc -zv <DC_HOST> 389 nc -zv <DC_HOST> 636
Синхронизация времени (chrony)
chronyc tracking
Если chrony не установлен
apt install chrony
Конфигурация:
/etc/chrony/chrony.conf
Добавить AD NTP сервер:
server <DC_HOST> iburst prefer
Перезапуск:
systemctl restart chrony
Проверка:
chronyc sources
Для настройки среды единого входа (SSO) на основе Kerberos Вам потребуется установить и настроить MULTIFACTOR SelfService Portal
Установка и конфигурация Kerberos клиента
Установка компонента
Выполните установку пакета krb5-user используя следующую команду:
apt install krb5-user
Конфигурация Kerberos
Файл конфигурации Kerberos находится по пути /etc/krb5.conf.
Откройте его в редакторе:
sudo nano /etc/krb5.conf
После открытия файла приведите его к следующему виду:
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = true
ticket_lifetime = 24h
forwardable = true
rdns = false
[realms]
EXAMPLE.COM = {
kdc = dc01.example.com
admin_server = dc01.example.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
Где:
default_realm— домен Kerberos по умолчанию.dns_lookup_realm— отключает поиск имени realm через DNS.dns_lookup_kdc— включает автоматический поиск KDC (контроллера домена) через DNS.ticket_lifetime— время жизни билета (в данном случае 24 часа).forwardable— разрешает передачу билетов.rdns— отключает обратное DNS-разрешение (повышает совместимость).
Настройка переменной окружения KRB5_KTNAME
Для того чтобы MULTIFACTOR SelfService Portal мог использовать keytab-файл, расположенный не по пути стандартному пути, необходимо добавить переменную окружения KRB5_KTNAME в конфигурацию systemd-сервиса. Эта переменная указывает стандартному механизму Kerberos MIT Krb5 на файл ключей, который будет использоваться для расшифровки входящих билетов.
Отредактируйте файл конфигурации systemd-сервиса
sudo nano /etc/systemd/system/ssp.service
Добавьте переменную в секцию [Service]
Environment="KRB5_KTNAME=/opt/multifactor/kerberos/app.keytab"
Файл должен выглядеть следующим образом:
[Unit] Description=Self Service Portal [Service] WorkingDirectory=/opt/multifactor/ssp/app ExecStart=/usr/bin/dotnet /opt/multifactor/ssp/app/MultiFactor.SelfService.Linux.Portal.dll Restart=always RestartSec=10 KillSignal=SIGINT TimeoutStopSec=90 SyslogIdentifier=ssp-service User=mfa Environment=ASPNETCORE_ENVIRONMENT=production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false Environment="KRB5_KTNAME=/opt/multifactor/kerberos/app.keytab" [Install] WantedBy=multi-user.target
Затем сохраните файл и перезапустите службы:
sudo systemctl daemon-reload sudo systemctl restart ssp.service
Проверка работы Kerberos
После настройки клиента Kerberos необходимо проверить корректность его работы. Ниже приведены основные команды для управления и проверки билетов.
Получение билета TGT (Ticket Granting Ticket)
Для получения билета используйте команду kinit, указав имя пользователя Active Directory:
kinit <AD_USER> #kinit ivanov@EXAMPLE.COM
После выполнения команды система запросит пароль указанного пользователя. При успешной аутентификации будет получен билет TGT.
Проверка полученных билетов
Для просмотра информации о текущих билетах Kerberos используйте команду:
klist
Вывод команды будет иметь следующий вид:
Ticket cache: FILE:/tmp/krb5cc_1000 Default principal: ivanov@EXAMPLE.COM Valid starting Expires Service principal 03/25/2026 10:00:00 03/26/2026 10:00:00 krbtgt/EXAMPLE.COM@EXAMPLE.COM
Команда отображает:
- Кэш билетов
- Основного субъекта (principal)
- Время начала и окончания действия билетов
Очистка кэша билетов
Для удаления всех полученных билетов и завершения сеанса Kerberos выполните:
kdestroy
Эта команда очищает кэш билетов, что эквивалентно «выходу из системы» Kerberos.
Дополнительные команды
Команда |
Описание |
|---|---|
|
Отобразить билеты в формате Kerberos 5 |
|
Показать флаги билетов (forwardable, renewable и др.) |
|
Очистить все кэши билетов (включая другие сеансы) |
|
Получить билет с временем жизни 12 часов |
Создание сервисного аккаунта в AD для Kerberos аутентификации Nginx
Сервисный аккаунт (Service Account) используется веб-сервером Nginx для проверки Kerberos-тикетов при аутентификации пользователей. Аккаунт не предназначен для интерактивного входа и имеет строгие ограничения в соответствии с принципами минимально необходимых привилегий.
Требования к сервисному аккаунту
Требование |
Обоснование |
|---|---|
Неинтерактивный пользователь |
Исключает использование учетной записи для входа в систему |
Пароль не истекает |
Обеспечивает бесперебойную работу сервиса без необходимости регулярной ротации пароля в конфигурации Nginx |
Использование только для Kerberos (SPN) |
Аккаунт регистрируется с Service Principal Name для поддержки Kerberos-аутентификации |
Создание пользователя
Среда выполнения
- Контроллер домена: Windows Server 2019
- Оснастка: Active Directory Users and Computers
Создание учетной записи
- Откройте оснастку Active Directory Users and Computers.
- Перейдите в нужное Organizational Unit (OU), где размещаются сервисные аккаунты.
- Нажмите Next.
- Выполните: Action → New → User
- Заполните поля:
- First name:
svc_ssp(или оставить пустым) - User logon name:
svc_ssp - Нажмите Next.
Настройка пароля
Установите надежный пароль и задайте следующие параметры:
Параметр |
Действие |
|---|---|
User must change password at next logon |
Снять |
User cannot change password |
Установить |
Password never expires |
Установить |
Конфигурация свойств учетной записи
После создания пользователя откройте его свойства:
- Перейдите на вкладку Account.
- В разделе Account options установите:
| Параметр | Значение |
|---|---|
| Password never expires | Включено |
| User cannot change password | Включено |
| Do not require Kerberos preauthentication | Не включать (оставить отключенным) |
Важно
Включение параметра
Do not require Kerberos preauthenticationсоздает уязвимость (атаки типа AS-REP Roasting) и не требуется для работы сервисного аккаунта.
Рекомендации по безопасности
Для минимизации рисков компрометации учетной записи соблюдайте следующие меры:
| Мера | Описание | Реализация |
|---|---|---|
| Исключение из Domain Users | Снижает объем привилегий по умолчанию | При необходимости создать отдельную группу для сервисных аккаунтов или оставить без членства в группах |
| Запрет интерактивного входа | Предотвращает использование учетной записи для входа в систему | Настроить через Group Policy или ограничения на контроллере домена (Deny log on locally Deny log on through Remote Desktop Services) |
| Ограничение рабочих станций | Аккаунт может использоваться только с указанных хостов | На вкладке Account → Logon Workstations → указать сервер(а) Nginx |
Проверка создания аккаунта
Для верификации корректного создания учетной записи выполните в PowerShell на контроллере домена:
Get-ADUser svc_ssp -Properties PasswordNeverExpires, CannotChangePassword, ServicePrincipalNames, LogonWorkstations
Результат должен быть следующим:
PasswordNeverExpires— True.CannotChangePassword— True.ServicePrincipalNames— должен содержать настроенные SPN (если они уже зарегистрированы).LogonWorkstations— содержит имя сервера Nginx.
Настройка Intranet Zone для поддержки Kerberos SSO
Для корректной работы Single Sign-On (SSO) на базе Kerberos веб-браузеры должны доверять сайту и передавать учетные данные текущего пользователя.
Поэтому необходимо провести настройку доверенных зон и параметров аутентификации через групповые политики (Group Policy) для браузеров Internet Explorer, Chrome и Edge.
Важно
Kerberos-аутентификация в браузере работает только для сайтов, добавленных в доверенные зоны (Intranet Zone).
Среда настройки
Компонент |
Значение |
|---|---|
Платформа |
Windows (контроллер домена или сервер с установленными средствами управления Group Policy) |
Оснастка |
Group Policy Management Console (GPMC) |
Целевые браузеры |
Internet Explorer, Microsoft Edge (Chromium), Google Chrome |
Настройка назначения сайта в зону (Site to Zone Assignment)
Данная политика добавляет сайт в зону локальной интрасети (Intranet Zone):
Откройте следующий путь в Group Policy:
Computer Configuration → Administrative Templates → Windows Components → Internet Explorer → Internet Control Panel → Security Page
и включите параметр Site to Zone Assignment List.
Далее нажмите Show.
Добавьте запись:
- Name of item:
http://app.example.com— URL или домен сайта, который необходимо добавить в доверенную зону. Можно указывать как полный адрес, так и шаблон (например,*.example.com) - Value:
1— код зоны безопасности:1— зона локальной интрасети (Intranet Zone)
Включение автоматической аутентификации в зоне Intranet
Откройте следующий путь в Group Policy:
User Configuration → Administrative Templates → Windows Components → Internet Explorer → Internet Control Panel → Security Page → Intranet Zone
и включите параметр Logon → Automatic logon with current username and password
Настройка для браузеров Chrome и Edge
Браузеры Google Chrome и Microsoft Edge (на базе Chromium) используют собственные политики для настройки Kerberos-аутентификации, но могут наследовать настройки Internet Explorer при определенных условиях.
Политики Chrome / Edge
Политика |
Значение |
Назначение |
|---|---|---|
AuthServerAllowlist |
|
Список серверов, для которых разрешена Kerberos-аутентификация |
AuthNegotiateDelegateAllowlist |
|
Список серверов, которым разрешено делегирование учетных данных |
Также политики можно задать через реестр:
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome] "AuthServerAllowlist"="*.example.com" "AuthNegotiateDelegateAllowlist"="*.example.com" [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge] "AuthServerAllowlist"="*.example.com" "AuthNegotiateDelegateAllowlist"="*.example.com"
Проверка настроек
После применения групповых политик выполните проверку:
gpupdate /force
- Откройте браузер и перейдите по адресу
http://app.example.com. - Проверьте, что аутентификация прошла автоматически (без запроса логина и пароля).
- В инструментах разработчика браузера (F12) на вкладке Network проверьте наличие заголовка
Authorization: Negotiate.
Создание Service Principal Name (SPN) для Nginx
Service Principal Name (SPN) связывает сервис (в данном случае Nginx) с учетной записью сервисного аккаунта. SPN необходим клиентам для идентификации сервиса при запросе Kerberos-тикетов.
Создание SPN
Выполните команду от имени администратора:
setspn -S HTTP/app.example.com svc_ssp
Где:
-S— добавляет SPN (проверяет на уникальность)HTTP/app.example.com— SPN: тип сервиса и FQDN сервераsvc_ssp— Имя сервисного аккаунта
Проверка SPN
Для проверки корректности создания выполните:
setspn -L svc_ssp
Вывод должен иметь следующий вид:
Registered ServicePrincipalNames for CN=svc_ssp,...
HTTP/app.example.com
Генерация и установка keytab для Nginx
Keytab-файл содержит ключи сервисного аккаунта и позволяет Nginx выполнять Kerberos-аутентификацию без интерактивного ввода пароля.
Генерация keytab на контроллере домена
Выполните команду от имени администратора:
ktpass ^ -out app.keytab ^ -princ HTTP/app.example.com@EXAMPLE.COM ^ -mapuser svc_ssp@EXAMPLE.COM ^ -crypto AES256-SHA1 ^ -ptype KRB5_NT_PRINCIPAL ^ -pass *
Где:
-out— имя выходного файла keytab-princ— principal (SPN + realm)-mapuser— сервисный аккаунт-crypto— тип шифрования keytab-ptype— тип principal-pass *— интерактивный ввод пароля аккаунта
Важно
Тип шифрования, указанный в keytab
-crypto, должен строго соответствовать типу шифрования, который использует сервисный аккаунт svc_ssp в Active Directory.
Возможные значения параметра -crypto:
AES256-SHA1 (рекомендуется) AES128-SHA1 RC4-HMAC-NT
Как выбрать правильное значение:
- Проверьте настройки аккаунта
svc_sspв оснастке «Active Directory Users and Computers» на вкладкеAccountв разделеAccount options. - Если включены опции:
This account supports Kerberos AES 128/256 bit encryption→ используйтеAES256-SHA1илиAES128-SHA1. - Если опции AES не включены (что является менее безопасным, но иногда необходимым для совместимости со старыми системами) → контроллер домена по умолчанию будет использовать тип
RC4-HMAC-NT. В этом случае в командеktpassнеобходимо указать-crypto RC4-HMAC-NT.
Установка keytab на сервер Nginx
Создайте следующую директорию:
sudo mkdir /opt/app/kerberos
Скопируйте сгенерированный файл на сервер Nginx:
cp /path/to/app.keytab /opt/app/kerberos/app.keytab
Настройте права доступа следующим образом:
chown srv_user:ssp-group /opt/app/kerberos chmod 750 /opt/app/kerberos chmod 640 /opt/app/kerberos/app.keytab
Проверка keytab
Просмотр содержимого keytab:
klist -k /opt/app/kerberos/app.keytab
Ожидаемый вывод: отображение principal и версии ключа.
Проверка получения билета через keytab:
kinit -k -t /opt/app/kerberos/app.keytab HTTP/app.example.com
Проверка доступа от имени пользователя приложения:
sudo -u srv_user klist -k /opt/app/kerberos/app.keytab
Команда подтверждает, что пользователь приложения имеет доступ к чтению keytab.
Признаки успешной проверки:
Команда |
Успешный результат |
|---|---|
|
Отображается |
|
Команда завершается без ошибок |
|
Файл читается, principal отображается |
Конфигурация Nginx для Kerberos-аутентификации
Настройка Nginx в качестве прокси-сервера с поддержкой Kerberos-аутентификации.
Важно
Аутентификация реализована на уровне приложения (не через SPNEGO-модуль Nginx).
Настройка конфигурации
Откройте файл конфигурации для редактирования:
sudo nano /etc/nginx/conf.d/ssp.conf
Конфигурация должна иметь следующий вид:
server {
# DNS имя сервера с порталом
server_name app.example.com;
location / {
# http://<host>:<port> Kestrel
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
listen 80;
}
Данная конфигурация:
- Слушает входящие запросы на порту 80
- Принимает запросы для домена ( в данном случае
app.example.com) - Перенаправляет (проксирует) все запросы на локальный сервер, работающий на порту 5000
- Передает оригинальный заголовок Host и реальный IP-адрес клиента
Настройте и сохраните файл конфигурации и выполните проверку на наличие ошибок:
nginx -t
Вывод должен быть следующим:
nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезапустите Nginx:
systemctl restart nginx
Проверьте статус он должен быть active (running):
systemctl status nginx
Важно
Kerberos-аутентификация (механизм Negotiate/GSSAPI) не работает с HTTP/2, так как требует особенностей HTTP/1.1 (connection-based authentication). Поэтому HTTP/2 должен быть отключён для данного virtual host.
| Неправильно | Правильно |
|---|---|
listen 443 ssl http2; | listen 443 ssl; |
Типовые проблемы
Clock skew — рассинхронизация времени
Ошибка:
Clock skew too great
Время на клиенте и контроллере домена должно совпадать с точностью до 5 минут.
Проверьте и настройте время:
chronyc tracking
SPN mismatch — неправильный SPN
Ошибка:
Server not found in Kerberos database
Проверьте SPN у сервисного аккаунта:
setspn -L svc_ssp
SPN должен быть: HTTP/app.example.com
Ошибка keytab — проблемы с keytab
Проверьте содержимое keytab:
klist -k /opt/app/kerberos/app.keytab
Должен отображаться principal HTTP/app.example.com@EXAMPLE.COM.
Полная проверка среды
Выполните по порядку:
Шаг |
Что проверяем |
Команда |
|---|---|---|
1 |
VPN (если используется) |
|
2 |
Время |
|
3 |
Получение билета пользователя |
|
4 |
Просмотр билетов |
|
5 |
Проверка keytab |
|