Solucionar errores de autenticación Kerberos en Squid con Active Directory
Para diagnosticar eficazmente los errores de Kerberos en Squid, activa el registro detallado. En squid.conf, añade:
debg_options ALL,1 33,2 28,2 50,2 # autenticación, ACL, DNS
Secciones: 33 — autenticación, 28 — ACL, 50 — DNS, 84 — ayudantes externos de ACL. Los niveles van de 0 (errores críticos) a 9 (registro completo).
Configura la salida de logs:
access_log stdio:/opt/squid/var/log/squid/access.log
cache_log stdio:/opt/squid/var/log/squid/cache.log
Esto captura detalles de GSS-API y autenticación Negotiate para su análisis.
Error 'Tipo de cifrado no válido' en GSS
El log muestra:
ERROR: Validando usuario en autenticación Negotiate. Resultado: {result=BH, notes={message=gss_accept_sec_context() falló: Fallo GSS no especificado. El código menor podría dar más información. Tipo de cifrado no válido }}
Causa: Los tickets TGS del cliente están almacenados en caché con una clave desactualizada, que Squid no puede descifrar.
Pasos para solucionarlo en el Emulador PDC
- Identifica el emulador PDC:
Get-ADDomain | Select-Object PDCEmulator
- Verifica y elimina SPNs antiguos:
setspn -L squid
setspn -D HTTP/testSquidPc.domain.ru userAD
- Restablece la contraseña de
userADen Active Directory.
- Genera una nueva keytab:
ktpass /princ HTTP/[email protected] /mapuser [email protected] /crypto ALL /ptype KRB5_NT_PRINCIPAL /pass password /out C:\squid.keytab
- Forza la replicación:
repadmin /syncall /AdeP
En el servidor 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
En el cliente
klist purge
Reinicia Squid con systemctl start squid. Esto evita el retraso típico de replicación de 10 a 24 horas.
Error 'Clave del servicio no disponible'
Entrada en el log:
ERROR: Validando usuario en autenticación Negotiate. Resultado: {result=BH, notes={message=gss_accept_sec_context() falló: Fallo GSS no especificado. El código menor podría dar más información. Clave del servicio no disponible }}
Causas comunes:
- Diferencia en el KVNO (Número de versión de clave) entre AD y la keytab.
- Mala coincidencia de SPN (nombre FQDN vs nombre corto).
Verifica el KVNO
En Squid:
klist -kte /opt/squid/etc/squid.keytab
La salida muestra el KVNO, etype y principal.
En el controlador de dominio (PowerShell):
Get-ADUser -Identity "userAD" -Properties msDS-KeyVersionNumber | Select-Object msDS-KeyVersionNumber
Al ejecutar ktpass, usa /vno <número> para alinear los KVNO.
Prueba la keytab
sudo -u proxy kinit -kt /opt/squid/etc/squid.keytab HTTP/testSquidPc.domain.ru
Éxito significa sin salida; si hay fallos, probablemente esté relacionado con el inicio del ayudante de Squid.
Valores comunes de etype en la keytab:
- aes256-cts-hmac-sha1-96
- aes128-cts-hmac-sha1-96
- arcfour-hmac (herencia)
Configurar cifrado en krb5.conf
Para errores de 'Tipo de cifrado no válido', sincroniza los tipos de cifrado en /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
Evita allow_weak_crypto = true. Especifica solo tipos AES exactos. Verifica que la keytab no contenga DES o RC4 obsoletos.
Error del pinger ICMP
Log:
pinger| Open icmp_sock: (1) Operación no permitida
ERROR: No se pudo iniciar el pinger ICMP.
FATAL: No se pudo abrir ningún socket ICMP.
Solución: Otorga permisos de socket raw:
setcap cap_net_raw+ep /opt/squid/libexec/pinger
Reinicia Squid.
Conclusiones clave
- Activa
debug_options 33,2para rastrear autenticación profunda. - Sincroniza el KVNO entre keytab y AD usando
ktpass /vnoyrepadmin /syncall. - Limpia los tickets del cliente con
klist purge. - Configura
/etc/krb5.confpara usar AES256; desactiva criptografía débil. - Para ICMP: ejecuta
setcap cap_net_raw+epen el binario pinger.
— Editorial Team
Aún no hay comentarios.