Diagnozowanie i naprawa błędów uwierzytelniania Kerberos w Squid z Active Directory
Aby skutecznie diagnozować problemy z Kerberosem w Squid, włącz rozszerzone logowanie. W pliku squid.conf ustaw:
debg_options ALL,1 33,2 28,2 50,2 # uwierzytelnianie, ACL, DNS
Kategorie: 33 — uwierzytelnianie, 28 — ACL, 50 — DNS, 84 — zewnętrzne pomocniki ACL. Poziomy od 0 (krytyczne błędy) do 9 (pełny dump).
Skonfiguruj wyjście logów:
access_log stdio:/opt/squid/var/log/squid/access.log
cache_log stdio:/opt/squid/var/log/squid/cache.log
To pozwoli na analizę błędów GSS-API i mechanizmu Negotiate.
Błąd 'Bad encryption type' w GSS
Log pokazuje:
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 }}
Przyczyna: klienckie tikety TGS są szyfrowane starym kluczem, Squid nie może ich odszyfrować.
Kroki naprawy na PDC Emulator
- Zidentyfikuj PDC:
Get-ADDomain | Select-Object PDCEmulator
- Sprawdź i usuń stare SPN:
setspn -L squid
setspn -D HTTP/testSquidPc.domain.ru userAD
- Zresetuj hasło użytkownika
userADw AD.
- Utwórz nowy keytab:
ktpass /princ HTTP/[email protected] /mapuser [email protected] /crypto ALL /ptype KRB5_NT_PRINCIPAL /pass password /out C:\squid.keytab
- Replikacja:
repadmin /syncall /AdeP
Na serwerze 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
Na kliencie
klist purge
Uruchom systemctl start squid. To obejmuje oczekiwanie replikacji (10–24 godziny).
Błąd 'Service key not available'
Log:
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 }}
Przyczyny:
- Niespójność KVNO (Key Version Number) między AD a keytab.
- Różnice w SPN (FQDN vs nazwa skrócona).
Sprawdzenie KVNO
Na Squid:
klist -kte /opt/squid/etc/squid.keytab
Wyjście pokaże KVNO, etype, principal.
Na DC (PowerShell):
Get-ADUser -Identity "userAD" -Properties msDS-KeyVersionNumber | Select-Object msDS-KeyVersionNumber
Podczas używania ktpass, podaj /vno <numer> do synchronizacji.
Test keytab
sudo -u proxy kinit -kt /opt/squid/etc/squid.keytab HTTP/testSquidPc.domain.ru
Powodzenie — bez wyjścia, problem leży w uruchamianiu pomocnika Squid.
Lista typowych etype w keytab:
- aes256-cts-hmac-sha1-96
- aes128-cts-hmac-sha1-96
- arcfour-hmac (przestarzały)
Konfiguracja szyfrowania w krb5.conf
W przypadku błędu 'Bad encryption type', zsynchronizuj enctypes w /etc/krb5.conf:
[libdefaults]
default_tgs_enctypes = aes256-cts-hmac-sha1-96
default_tkt_enctypes = aes256-cts-hmac-sha1-96
permitted_enctypes = aes256-cts-hmac-sha1-96
Unikaj allow_weak_crypto = true — określ precyzyjne typy AES. Sprawdź, czy keytab zawiera DES/RC4 (przestarzałe).
Błąd ICMP pinger
Log:
pinger| Open icmp_sock: (1) Operation not permitted
ERROR: Unable to start ICMP pinger.
FATAL: Unable to open any ICMP sockets.
Rozwiązanie — nadaj uprawnienia raw socket:
setcap cap_net_raw+ep /opt/squid/libexec/pinger
Restartuj Squid.
Ważne informacje
- Aktywuj
debug_options 33,2dla szczegółowej analizy uwierzytelniania. - Synchronizuj KVNO keytab z AD przez
ktpass /vnoirepadmin /syncall. - Oczyść tikety klienckie:
klist purge. - Skonfiguruj
/etc/krb5.confna AES256, unikaj słabej kryptografii. - Dla ICMP:
setcap cap_net_raw+epna pinger.
— Editorial Team
Brak komentarzy.