Настраивая Squid часто сталкивался с ошибками при настойке авторизации через Kerberos и решая некоторые ошибки не мог найти их в интернете, а информации в логе было недостаточно для диагностирования причины.
Небольшая врезка по настройке лога
Синтаксис debug_options [Section,Level] [Section,Level] ...
В файле squid.conf:
debug_options ALL,1 33,2 28,2 50,2 # подробный лог для debug
Section: Номер раздела кода Squid:
ALL — означает все разделы.
33 — аутентификация
28 — ACL, 50 — DNS)
84— хелперы (external_acl)
Level: Уровень детализации от 0 (только критические ошибки) до 9 (полный дамп данных и трассировка функций).
# Вывод лога доступа в файл access_log stdio:/opt/squid/var/log/squid/access.log # Вывод лога ошибок и debug в файл cache_log stdio:/opt/squid/var/log/squid/cache.log
Ошибка "Minor code may provide more information. Bad encryption type"
# Из лога 2026/03/14 15:34:51 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message=gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information. Bad encryption type }} current master transaction: master54
Самая проблемная ошибка, т.к. сложно сразу сказать о причине ее появления.
"Могу предположить, что при смене keytab у пользователей были закешированы старые тикеты (tgs), и они отсылали их на squid без попытки получить новые (зашифрованные новым ключом) от kdc. Когда сквид получал данные - он не мог просто свою часть расшифровать и подтвердить подлинность пользователя. Т.е. klist purge (win) / kdestroy(nix) на клиенте мог помочь. К вечеру были получены новые билеты." - Нашел эту цитату на каком то форуме.
Процесс решения
# Узнать кто главный сервер в домене Get-ADDomain | Select-Object PDCEmulator
На этом сервере выполняем:
# Смотрим и удаляем SPN (Старый SPN, если создавали до этого для пользователя AD) setspn -L squid setspn -D HTTP/testSquidPc.domain.ru userAD
Сбрасываем пароль пользователя squid в AD "userAD" на нужный нам любым способом (например, чрез оснастку "Пользователи и компьютеры")
# Заново создаем SPN и keytab ktpass /princ HTTP/testSquidPc.domain.ru@DOMAIN.RU` /mapuser userAD@DOMAIN.RU ` /crypto ALL ` /ptype KRB5_NT_PRINCIPAL ` /pass password` /out C:\squid.keytab # Принудительная репликация всех разделов между всеми партнерами DC repadmin /syncall /AdeP
На сервере Squid:
# Копируем keytab на сервер squid и настраиваем права: systemctl stop squid chown proxy:proxy /opt/squid/etc/squid.keytab chmod 600 /opt/squid/etc/squid.keytab # Проверяем klist -kte /opt/squid/etc/squid.keytab # Можно сравнить knvo и princ с тем что в MS DC
На клиенте почистить старые ключи
klist purge
Запускаем Squid
systemctl start squid
Проверяем
Скрытый текст
Я бы скорее назвал это решение "с обходом", главное что не придется ждать 10-24 часа...
Ошибка "Service key not available"
Проблема с доступом к файлу:
# Из лога: 2026/03/13 19:44:14 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message=gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information. Service key not available }} current master transaction: master54
Несовпадение версии ключа (KVNO - Key Version Number) — У каждого ключа в Active Directory и в файле
keytabесть номер версииКогда вы меняете пароль пользователю в AD или пересоздаете keytab, KVNO увеличивается (например, было 11, стало 12).
Если клиент (браузер) получил билет от контроллера домена, зашифрованный ключом KVNO 12, а в вашем файле
squid.keytabлежит ключ только с KVNO 11, то Squid не сможет расшифровать билет. Он скажет: "Я вижу имя HTTP/..., но у меня нет ключа версии 12 для него".# Посмотрите KVNO в вашем файле на сервере squid: klist -kte /opt/squid/etc/squid.keytab # Keytab name: FILE:/opt/squid/etc/squid.keytab # KVNO Timestamp Principal # ---- ------------------- ------------------------------------------------------ # 14 01/01/1970 03:00:00 HTTP/testSquidPc.domain.ru@DOMAIN.RU (DEPRECATED:des-cbc-crc) # Посмотрите текущий KVNO на Контроллере Домена (Windows). Запустите PowerShell на DC: Get-ADUser -Identity "userAD" -Properties msDS-KeyVersionNumber | Select-Object msDS-KeyVersionNumber # msDS-KeyVersionNumber UserPrincipalName # --------------------- ----------------- # 15 HTTP/testSquidPc.domain.ru@DOMAIN.RU # Или при создании "...vno 15..." Targeting domain controller: DC1.domain.ru Using legacy password setting method Successfully mapped HTTP/testSquidPc.domain.ru to userAD. Key created. Output keytab to C:\temp\squid.keytab: Keytab version: 0x502 keysize 99 HTTP/testSquidPc.domain.ru ptype 1 (KRB5_NT_PRINCIPAL) vno 15 etype 0x12 (AES256- keylength 32 (0x1fd...)
Проблема имени сервиса (Service Principal Name mismatch): Squid ищет ключ для имени, которое чуть-чуть отличается от того, что записано в файле (например, из-за сокращенного имени хоста vs FQDN).
# Возбмите имя от сюда и скопируйте его в файл squid.conf klist -kte /opt/squid/etc/squid.keytab
Можно проверить, правильно ли имя и knvo читается из файла keytab
sudo -u proxy kinit -kt /opt/squid/etc/squid.keytab HTTP/testSquidPc.domain.ru # Если команда успешна (нет вывода, просто возврат в консоль): # Значит файл читается, ключи верные, криптография работает. # Проблема в том, как Squid запускает хелпер.
Ошибка negotiate_kerberos_auth - Bad encryption type
# Из лога 2026/03/13 15:16:33 kid1| ERROR: Negotiate Authentication validating user. Result: {result=BH, notes={message=gss_accept_sec_context() failed: Unspecified GSS failure. Minor code may provide more information. Bad encryption type }}
Клиент и сервер не смогли договориться о кодировке. Проверьте что в файле squid.keytab присутствуют нужные krb daemon кодировки.
klist -kte /opt/squid/etc/squid.keytab # Keytab name: FILE:/opt/squid/etc/squid.keytab # KVNO Timestamp Principal # ---- ------------------- ------------------------------------------------------ # 11 01/01/1970 03:00:00 HTTP/testSquidPc.domain.ru@DOMAIN.RU (DEPRECATED:des-cbc-crc) # 11 01/01/1970 03:00:00 HTTP/testSquidPc.domain.ru@DOMAIN.RU (DEPRECATED:des-cbc-md5) # 11 01/01/1970 03:00:00 HTTP/testSquidPc.domain.ru@DOMAIN.RU (DEPRECATED:arcfour-hmac) # 11 01/01/1970 03:00:00 HTTP/testSquidPc.domain.ru@DOMAIN.RU (aes256-cts-hmac-sha1-96) # 11 01/01/1970 03:00:00 HTTP/testSquidPc.domain.ru@DOMAIN.RU (aes128-cts-hmac-sha1-96)
И в /etc/krb5.conf:
[libdefaults] # Используйте для отключения контроля кодировки (default_tgs_enctypes, default_tkt_enctypes, permitted_enctypes - закоментируйте, что бы не переопределяли allow_weak_crypto) # allow_weak_crypto = true # Установить определенный AES default_tgs_enctypes = aes256-cts-hmac-sha1-96 default_tkt_enctypes = aes256-cts-hmac-sha1-96 permitted_enctypes = aes256-cts-hmac-sha1-96
Ошибка icmp_sock/ERROR: Unable to start ICMP pinger.
# Из лога 2026/03/13 14:56:42 pinger| Initialising ICMP pinger ... 2026/03/13 14:56:42 pinger| Open icmp_sock: (1) Operation not permitted 2026/03/13 14:56:42 pinger| ERROR: Unable to start ICMP pinger. 2026/03/13 14:56:42 pinger| Open icmp_sock: (1) Operation not permitted 2026/03/13 14:56:42 pinger| ERROR: Unable to start ICMPv6 pinger. 2026/03/13 14:56:42 pinger| FATAL: Unable to open any ICMP sockets.
Исправление:
setcap cap_net_raw+ep /opt/squid/libexec/pinger
