Диагностика проблем Kerberos-аутентификации при настройке технологии единого входа, протокола LDAP и Squid в Kaspersky Web Traffic Security
Показать приложения и версии, для которых применима статья
- Kaspersky Web Traffic Security 6.2 Virtual Appliance (версия 6.2.0.155);
- Kaspersky Web Traffic Security 6.2 Standalone (версия 6.2.0.155);
- Kaspersky Web Traffic Security 6.1 (версия 6.1.0.4762).
Если у вас возникли ошибки Kerberos-аутентификации при работе с Kaspersky Web Traffic Security (далее KWTS), перед обращением в техническую поддержку «Лаборатории Касперского» вы можете выполнить диагностику проблемы и попробовать решить ее самостоятельно.
Механизм Kerberos-аутентификации на основе keytab-файлов используется в следующих функциональных областях приложения:
- Аутентификация с помощью технологии единого входа и синхронизации LDAP (SSO) — для подключения пользователей и администраторов к веб-интерфейсу приложения.
- Соединение с LDAP-сервером — для синхронизации кеша LDAP с контроллерами домена. Кеш используется при создании правил. Если KWTS имеет информацию для входа пользователя для данного сеанса, предоставленную прокси-сервером, трафик может быть сопоставлен с теми правилами, которые определены, например, группами в Active Directory.
- Настройка интеграции сервиса Squid с Active Directory — для автоматического прохождения пользователями аутентификации на прокси-сервере без запроса на вход.
Если появляется приглашение для входа, значит, проверка подлинности протокола Kerberos не удалась.
Создание keytab-файла
Keytab-файл создается на сервере контроллера домена или на компьютере под управлением Windows Профессиональная, Windows Корпоративная или Windows Server, входящем в домен, под учетной записью с правами администратора домена или администратора предприятия.
Учитывайте следующие особенности при создании keytab-файла:
- Keytab-файлы для технологии единого входа и LDAP — это разные файлы, они создаются для разных служебных учетных записей по своим отдельным инструкциям.
- Для корректной работы технологии единого входа и интеграции сервиса Squid Proxy все адреса узлов кластера приложения должны быть настроены в DNS. Для каждого узла кластера системное имя хоста (hostname) должно соответствовать имени в DNS.
- Keytab-файл для соединения с LDAP-сервером необходимо создать без привязки Service Principal Name (SPN).
- Для корректной работы соединения с LDAP-сервером у всех контроллеров домена Active Directory должны быть настроены прямые и обратные (PTR) записи в DNS, которые должны соответствовать друг другу.
Подробнее о создании keytab-файлов:
- для аутентификации через соединение с LDAP-сервером;
- для аутентификации через технологию единого входа и прокси-сервер.
При создании keytab-файла обратите внимание на регистр символов, используемый для ввода команды в каждой конкретной инструкции для технологии единого входа или LDAP.
Корректные значения выглядят следующим образом:
Настройка браузера
Для корректной аутентификации с помощью технологии единого входа выполните предварительную настройку в браузере по инструкции ниже.
На устройствах корпоративной сети используйте средства централизованного управления политиками и настройками ОС и браузера, а также технологию WPAD (Web Proxy Autodiscovery Protocol).
Примеры локальной настройки:
- Выполните системные настройки ОС для работы браузеров:
- Нажмите
+ R на клавиатуре. - Введите в диалоговом окне inetcpl.cpl и нажмите ОК.
- Перейдите на вкладку Безопасность в окне Свойства обозревателя.
- Выберите зону Местная интрасеть и нажмите Сайты.
- Убедитесь, что для зоны «Местная интрасеть» в параметре безопасности Проверка подлинности пользователя → Вход установлено значение Автоматический вход в сеть только в зоне интрасети.
- Нажмите Дополнительно и добавьте FQDN-адреса KWTS в список веб-сайтов. Не используйте IP-адреса и короткие доменные имена.
- Нажмите Закрыть.
- Нажмите ОК, чтобы сохранить изменения конфигурации местной интрасети.
- Перейдите на вкладку Подключения и нажмите Настройка сети.
- Установите флажок Использовать прокси-сервер для локальных подключений и укажите адрес узла KWTS, к которому будет подключаться устройство, в блоке Прокси-сервер.
- Перезапустите браузер для применения настроек.
- Нажмите
- Дополнительно настройте соединение, если вы используете браузер Mozilla Firefox:
- Откройте новую вкладку Firefox и перейдите по адресу about:config в адресной строке.
- Введите network.negotiate-auth в текстовом поле поиска.
- Дважды нажмите на параметры network.negotiate-auth.trusted-uris и network.negotiate-auth.delegation-uris и введите адрес KWTS. Если адресов несколько, разделите их запятой.
- Нажмите ОК.
- Настройте параметры подключения к прокси-серверу по инструкции.
Как KWTS подключается к LDAP-серверам с помощью keytab-файла
В KWTS отсутствует поле для указания адреса LDAP-сервера. Для подключения к LDAP-серверу приложение считывает REALM (имя realm-домена, например EXAMPLE.COM) из keytab-файла, затем отправляет DNS-запросы к адресам с типом SRV-записи:
_kerberos._tcp.example.com
LDAP-серверы перечислены в _ldap._tcp.example.com, порт по умолчанию: 389.
Запрос _kerberos._tcp.example.com необходим для протокола Kerberos, порт по умолчанию: 88.
В SSH-консоли на узле кластера приложения вы можете проверить такие запросы с помощью команд:
dig srv _kerberos._tcp.example.com
В результатах выполнения команд вы можете увидеть список контроллеров домена, порты, вес и приоритет.
Попытка соединения выполняется с каждым адресом из списка по очереди и с задержкой до тех пор, пока соединение не будет успешно установлено или список не будет исчерпан.
Диагностика протоколов LDAP и Kerberos
Чтобы диагностировать проблемы синхронизации с LDAP-сервером:
- Включите трассировку KWTS с уровнем отладки по инструкции.
- Нажмите Синхронизировать в параметрах соединения с LDAP-сервером по инструкции, чтобы воспроизвести проблему.
- Примерно через 10-20 минут, в зависимости от размера доменов и их количества, вы можете:
- проверить журнал на узле с помощью команды:
grep LdapC /var/log/kwts-traces | less
- сохранить архив на рабочее место администратора и посмотреть журнал другим способом по инструкции.
- проверить журнал на узле с помощью команды:
- Выключите трассировку.
Если вы увидите ошибки, определите причину проблемы по таблице ниже.
| Ошибка | Причина |
|---|---|
| 25199 ERR cannot retrieve domain data from ldaperror resolving "_ldap._tcp.EXAMPLE.COM", res_query return -1 with 204800 as buffer answer size | В DNS отсутствуют SRV-записи для домена, указанного в keytab-файле. |
| 27327 ERR cannot retrieve domain data from ldapCheckFailedException - Kerberos error (-1765328230): Cannot find KDC for realm "EXAMPLE.COM" - Cannot get initial credentials using a key table. At /BUILD/PDK/core/ldap_cache.acme/kwts.linux-64/source/krb/kerberos_wrapper.cpp(175) | В DNS есть SRV-записи, но нет A-записей для контроллера домена. |
| 28015 ERR cannot retrieve domain data from ldapCheckFailedException - Kerberos error (-1765328230): Cannot find KDC for realm "EXAMPLE.COM" - Cannot get initial credentials using a key table. At /BUILD/PDK/core/ldap_cache.acme/kwts.linux-64/source/krb/kerberos_wrapper.cpp(175) | В DNS есть SRV- и A-записи, но отсутствуют PTR-записи для контроллера домена. |
| 28364 ERR cannot retrieve domain data from ldapCheckFailedException - Kerberos error (-1765328230): Cannot find KDC for realm "EXAMPLE.COM" - Cannot get initial credentials using a key table. At /BUILD/PDK/core/ldap_cache.acme/kwts.linux-64/source/krb/kerberos_wrapper.cpp(175) | PTR-запись в DNS не соответствует A-записи. |
| 40967 ERR cannot retrieve domain data from ldaperror resolving "_ldap._tcp.EXAMPLE.COM", res_query return 16623 with 12800 as buffer answer size | Слишком много SRV-записей, длинный ответ от DNS-сервера. |
| 32626 ERR cannot retrieve domain data from ldapCheckFailedException - Kerberos error (-1765328228): Cannot contact any KDC for realm 'EXAMPLE.COM' - Cannot get initial credentials using a key table. At /BUILD/PDK/core/ldap_cache.acme/kwts.linux-64/source/krb/kerberos_wrapper.cpp(175) | Невозможно подключиться к контроллеру домена, превышено время ожидания. |
| 33599 ERR cannot retrieve domain data from ldapCheckFailedException - Kerberos error (-1765328228): Cannot contact any KDC for realm 'EXAMPLE.COM' - Cannot get initial credentials using a key table. At /BUILD/PDK/core/ldap_cache.acme/kwts.linux-64/source/krb/kerberos_wrapper.cpp(175) | Невозможно подключиться к контроллеру домена, отказано в соединении. |
| 36512 ERR cannot retrieve domain data from ldapCheckFailedException - Kerberos error (-1765328237): KDC reply did not match expectations - Cannot get initial credentials using a key table. At /BUILD/PDK/core/ldap_cache.acme/kwts.linux-64/source/krb/kerberos_wrapper.cpp(175) | Домен в keytab-файле указан в нижнем регистре. |
| 41421 ERR cannot retrieve domain data from ldapCheckFailedException - Kerberos error (-1765328360): Preauthentication failed - Cannot get initial credentials using a key table. At /BUILD/PDK/core/ldap_cache.acme/kwts.linux-64/source/krb/kerberos_wrapper.cpp(175) |
В keytab-файле указан неверный пароль служебной учетной записи, или пароль был изменен после создания keytab-файла. Замена пароля требует пересоздания keytab-файла, даже если пароль идентичен прежнему. Важно очистить SPN в атрибутах сервисного пользователя KWTS, чтобы не создать дубликат SPN-записи. |
| 42131 ERR cannot retrieve domain data from ldapCheckFailedException - Kerberos error (-1765328347): Clock skew too great - Cannot get initial credentials using a key table. At /BUILD/PDK/core/ldap_cache.acme/kwts.linux-64/source/krb/kerberos_wrapper.cpp(175) | Для служебной учетной записи, указанной в keytab-файле, время входа ограничено расписанием. |
| 42014 ERR cannot retrieve domain data from ldapCheckFailedException - LDAP error (10): Referral - Cannot perform LDAP search operation. At /BUILD/PDK/core/ldap_cache.acme/kwts.linux-64/source/ldap/connection.cpp(242) | Неправильно указана база поиска (Base DN). |
| 15832 ERR cannot retrieve domain data from ldapCheckFailedException - Kerberos error (-1765328378): Client ['HTTP/kwts5.test.local@TEST.LOCAL'](mailto:'HTTP/kwts5.example.com@EXAMPLE.COM) not found in Kerberos database - Cannot get initial credentials using a key table. At /BUILD/PDK/core/ldap_cache.acme/kwts.linux-64/source/krb/kerberos_wrapper.cpp(175) | SPN-запись, указанная в keytab-файле, не существует. |
|
Системное время на устройстве с KWTS не синхронизировано с контроллером домена. |
|
Невозможно подключиться к LDAP-серверу по TCP-порту 389. |
Диагностика аутентификации с помощью технологии единого входа
Файлы журналов, которые могут помочь в диагностике ошибок с использованием технологии единого входа, находятся в каталогах:
- /var/log/kaspersky/kwts/extra/webapi.log
- /var/log/kaspersky/kwts/extra/celery.log
Если вы увидите ошибки, определите причину проблемы по таблице ниже.
| Ошибка | Причина |
|---|---|
| Ошибка в webapi.log:
ERROR:root:GSSError: (('Unspecified GSS failure. Minor code may provide more information', 851968), ('Request ticket server HTTP/kwts.example.com@EXAMPLE.COM found in keytab but does not match server principal HTTP/dpc-kwts-01.example.com@', 100005)) [pid: 14648|app: 0|req: 701/53178] 10.199.5.19 () {50 vars in 4127 bytes} [Wed Oct 14 14:12:46 2020] GET /web/api/get-session-info?cb=1602673966446 => generated 224 bytes in 12 msecs (HTTP/1.1 403) 3 headers in 93 bytes (1 switches on core 0) |
В DNS-запросе есть две PTR-записи для IP-адреса KWTS. Запрос должен содержать только тот адрес, который подходит для FQDN, используемого для доступа к веб-интерфейсу KWTS. |
| Ошибка в webapi.log:
ERROR:root:GSSError: (('Unspecified GSS failure. Minor code may provide more information', 851968), ('Request ticket server HTTP/kwts.example.com@EXAMPLE.COM kvno 6 found in keytab but not with enctype rc4-hmac', 100005)) |
Keytab-файл был создан с помощью алгоритма шифрования AES-128 или AES-256, но этот алгоритм не был включен в свойствах служебной учетной записи в Active Directory. |
| Ошибка в webapi.log:
ERROR:root:GSSError: (('Unspecified GSS failure. Minor code may provide more information', 851968), ('Request ticket server HTTP/kwts.example.com@EXAMPLE.COM kvno 8 not found in keytab; keytab is likely out of date', 100005)) |
В keytab-файле указан неверный пароль служебной учетной записи, или пароль был изменен после создания keytab-файла. Замена пароля требует пересоздания keytab-файла, даже если пароль идентичен прежнему. Важно очистить SPN в атрибутах сервисного пользователя KWTS, чтобы не создать дубликат SPN-записи. |
| Ошибки в webapi.log:
HTTP/1.1 403 и HTTP/1.1 401 |
Вместо Kerberos используется устаревший протокол Negotiate/NTLM (в Firefox не указано имя домена Active Directory в параметрах network.negotiate-auth.trusted-uris и network.negotiate-auth.delegation-uris в about:config), или учетная запись, указанная в keytab-файле, заблокирована в Active Directory. Возможные причины блокировки учетной записи:
|
|
Ошибки в webapi.log:
|
Системное время на устройстве с KWTS не синхронизировано с контроллером домена. |
| Ошибка в celery.log:
./celery.log:[2020-06-02 18:00:47,860: ERROR/ForkPoolWorker-1] there are no valid principal for HTTP service on kwts.example.com host in keytab data; : ('Principal not found in keytab', -1) Ошибка в webapi.log: ./webapi.log:ERROR:root:there are no valid principal for HTTP service on kwts.example.com host in keytab data; : ('Principal not found in keytab', -1) |
В keytab-файле нет SPN-записи для FQDN, который используется для доступа к веб-интерфейсу KWTS. |
Диагностика интеграции Squid Proxy
Файлы логов, которые могут помочь в диагностике ошибок интеграции Squid Proxy, находятся по пути:
- /var/log/squid/cache.log
- /var/log/squid/access.log
Если вы увидите ошибки, определите причину проблемы по таблицам ниже.
Ошибки в cache.log встроенного прокси-сервера в поставляемом образе (Appliance) KWTS
| Ошибка | Причина |
|---|---|
| negotiate_kerberos_auth: ERROR: gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information. Request ticket server HTTP/kwts.example.com@EXAMPLE.COM kvno 2 found in keytab but not with enctype rc4-hmac | Keytab-файл был создан с помощью алгоритма шифрования AES128 или AES256, но этот алгоритм не был включен в свойствах служебной учетной записи в Active Directory.
|
| negotiate_kerberos_auth: WARNING: received type 1 NTLM token 2020/06/03 12:20:41.050 kid4| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: received type 1 NTLM token; }} |
Учетная запись, указанная в keytab-файле, заблокирована в Active Directory, или время входа ограничено расписанием. Возможные причины блокировки учетной записи:
|
| negotiate_kerberos_auth: WARNING: received type 1 NTLM token 2020/06/03 12:07:46.509 kid4| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: received type 1 NTLM token; }} | Вместо Kerberos используется устаревший протокол Negotiate/NTLM (в Firefox не указано имя домена Active Directory в параметрах network.negotiate-auth.trusted-uris и network.negotiate-auth.delegation-uris в about:config). |
|
Системное время на устройстве с KWTS не синхронизировано с контроллером домена. |
|
В keytab-файле нет SPN-записи для устройства, к которому подключается пользователь. |
|
В keytab-файле указан неверный пароль пользователя, либо пароль был изменен после создания keytab-файла. Замена пароля требует пересоздания keytab-файла, даже если пароль идентичен прежнему. Важно очистить SPN в атрибутах сервисного пользователя KWTS, чтобы не создать дубликат SPN-записи. |
Ошибки в access.log при пакетной установке (Standalone) на внешнем прокси-сервере Squid
| Ошибка | Причина |
|---|---|
| ERROR: gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information. Request ticket server [HTTP/centos81.example.com@EXAMPLE.COM](mailto:HTTP/centos81.example.com@EXAMPLE.COM) kvno 4 enctype rc4-hmac found in keytab but cannot decrypt ticket | Keytab-файл был создан с помощью алгоритма шифрования RC4-HMAC, но в KWTS не включен legacy режим криптографии. |
| ERROR: gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information. Cannot find key for [HTTP/kwts1.example.com@EXAMPLE.COM](mailto:HTTP/kwts1.example.com@EXAMPLE.COM) kvno 4 in keytab
ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information. Cannot find key for [HTTP/kwts1.example.com@EXAMPLE.COM](mailto:HTTP/kwts1.example.com@EXAMPLE.COM) kvno 4 in keytab; }} |
Пользователь получил билет для старого номера версии ключа (KVNO), после чего был создан новый keytab-файл с большим KVNO и загружен в приложение. |
| ERROR: gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information. Cannot find key for [HTTP/kwts1.example.com@EXAMPLE.COM](mailto:HTTP/kwts1.example.com@EXAMPLE.COM) kvno 4 in keytab
ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message: gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information. Cannot find key for [HTTP/kwts1.example.com@EXAMPLE.COM](mailto:HTTP/kwts1.example.com@EXAMPLE.COM) kvno 4 in keytab; }} |
Был создан новый keytab-файл с большим номером версии ключа (KVNO), но не загружен в приложение. Пользователь получил билет после создания нового keytab-файла. |
Полезные команды
- Чтобы просмотреть список всех пользователей, для которых были созданы keytab-файлы с использованием SPN-записи, начинающейся с HTTP/, выполните команду в PowerShell на устройстве с установленным модулем Active Directory для Windows PowerShell, например, на контроллере домена:
Get-ADUser -Filter 'UserPrincipalName -like "HTTP/*"'
В выводе команды не должно быть дублирующихся SPN-записей. Удалите лишние SPN-записи в свойствах служебной учетной записи в Active Directory.
- Чтобы быстро определить, имеются ли дубликаты SPN-записей, выполните команду:
setspn -X
- Чтобы удалить SPN-запись для служебной учетной записи пользователя с именем control-user, выполните команду:
setspn -D HTTP/<полное доменное имя (FQDN) узла>@<пользователь> control-user
- Например:
setspn -D HTTP/kwts.example.com@EXAMPLE.COM control-user
- Чтобы получить текущий кеш билетов Kerberos, выполните на клиентском устройстве с ОС Windows команду:
klist
- Чтобы очистить кеш билетов Kerberos, выполните на клиентском устройстве с ОС Windows команду:
klist purge
- Чтобы вручную запросить билет, выполните на клиентском устройстве с ОС Windows команду:
klist get HTTP/kwts.example.com