Squid authentification
| Fiche express | |
|---|---|
| Domaine | Authentification des clients d'un proxy Squid |
| Schémas | Basic · Digest · NTLM · Negotiate (Kerberos) |
| Directive squid.conf | auth_param
|
| Voir aussi | Squid · Squid notes · SquidGuard |
Squid sait vérifier l'identité des clients avant de leur donner accès au Web, via
plusieurs schémas d'authentification HTTP standard. Cette page recense les paramètres
auth_param disponibles pour chacun d'eux. Pour un déploiement concret NTLM ou
Kerberos face à un Active Directory (jonction Samba, génération de keytab…), voir
Squid notes.
Authentification Basic
L'authentification HTTP Basic transite en clair (encodée en base64, pas chiffrée) dans l'en-tête
Authorization — à ne jamais utiliser sans HTTPS entre le client et le proxy si le
réseau n'est pas de confiance :
Authorization: Basic dXNlcjpwYXNzd29yZA==
Décodage :
echo 'dXNlcjpwYXNzd29yZA==' | base64 -d
Paramètres communs à tous les backends Basic :
auth_param basic program command # commande/helper d'authentification à appeler
auth_param basic children number # nombre de processus helper lancés en parallèle
auth_param basic realm string # domaine affiché dans la popup d'authentification du navigateur
auth_param basic credentialsttl time # durée avant re-négociation (ex : 1 hour)
Exemple avec le helper PAM :
auth_param basic program /usr/lib/squid/pam_auth
auth_param basic children 10
auth_param basic realm My Awesome Squid Cache
auth_param basic credentialsttl 1 hour
acl KnownUsers proxy_auth REQUIRED
http_access allow KnownUsers
Backends Basic disponibles
NCSA
Stocke identifiants et mots de passe dans un fichier plat local, au format NCSA (le même que
celui utilisé par Apache pour .htaccess) :
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd
LDAP
S'appuie sur un annuaire (nécessite au minimum un hostname et un DN de base) :
auth_param basic program /usr/lib/squid/squid_ldap_auth -b "ou=people,dc=exemple,dc=com" ldap.exemple.local
MSNT
S'interface avec un ou plusieurs contrôleurs de domaine NT/SMB :
server pdc1_host bdc1_host domaine_nt_1
server pdc2_host bdc2_host domaine_nt_2
SMB multi-domaine (via helper smb_auth)
Reste un schéma Basic côté HTTP, mais le helper s'appuie sur Samba pour dialoguer avec plusieurs contrôleurs de domaine — à ne pas confondre avec le schéma natif NTLM détaillé plus bas :
auth_param basic program /usr/lib/squid/smb_auth -W MONDOMAINE
Plusieurs domaines peuvent être listés en répétant l'option -W.
GETPWAM
Réutilise directement /etc/passwd de la machine Linux hébergeant Squid — un
compte système par utilisateur du proxy.
PAM
Authentification système classique (/etc/pam.conf) :
squid auth required pam_unix.so try_first_pass
SASL
Simple Authentication and Security Layer, dans l'esprit de PAM — nécessite la bibliothèque Cyrus SASL.
Windbind
Permet d'authentifier via winbind plutôt que via un helper SMB dédié :
auth_param basic program /usr/lib/squid/wb_basic_auth
YP / NIS
auth_param basic program /usr/lib/squid/yp_auth mondomaine.nis passwd.byname
API des helpers Basic
Le protocole entre Squid et un helper Basic reste volontairement simple : Squid envoie sur
l'entrée standard le nom d'utilisateur et le mot de passe séparés par un espace, encodés en
URL ; le helper répond OK ou ERR sur la sortie standard, une ligne par
requête :
echo "utilisateur motdepasse" | ./mon_helper /etc/squid/passwd
Exemple de squelette de helper personnalisé :
#!/usr/bin/perl -wl
use URI::Escape;
$|=1; # ne pas bufferiser stdout
while (<>) {
($u,$p) = split;
$u = uri_unescape($u);
$p = uri_unescape($p);
if (&valid($u,$p)) {
print "OK";
} else {
print "ERR";
}
}
sub valid {
my ($user, $pass) = @_;
# ... vérification ...
}
Authentification Digest
Nativement plus sûre que Basic : le mot de passe n'est jamais transmis en clair, seul un résumé (digest) du challenge est échangé.
auth_param digest program command
auth_param digest children number
auth_param digest realm string
auth_param digest nonce_garbage_interval time # fréquence de nettoyage des nonces (5 min par défaut)
auth_param digest nonce_max_duration time # durée de validité d'un nonce
auth_param digest nonce_max_count number # nombre max de réutilisations d'un nonce
auth_param digest nonce_strictness on|off # tolérance aux erreurs de séquence
Exemple :
auth_param digest program /usr/lib/squid/digest_pw_auth /etc/squid/digest_passwd
auth_param digest children 8
auth_param digest realm Access to Squid
auth_param digest nonce_garbage_interval 10 minutes
auth_param digest nonce_max_duration 45 minutes
auth_param digest nonce_max_count 100
auth_param digest nonce_strictness on
acl KnownUsers proxy_auth REQUIRED
http_access allow KnownUsers
Le fichier de mots de passe Digest stocke une empreinte MD5 de
utilisateur:realm:motdepasse plutôt que le mot de passe lui-même.
Authentification NTLM
Repose sur un mécanisme de three-way handshake (challenge/réponse) propre aux environnements Microsoft :
auth_param ntlm program command
auth_param ntlm children number
auth_param ntlm max_challenge_reuses number # nombre de réutilisations autorisées du token (0 = illimité par défaut)
auth_param ntlm max_challenge_lifetime time # durée de validité du token
auth_param ntlm program /usr/lib/squid/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 12
auth_param ntlm max_challenge_reuses 5
auth_param ntlm max_challenge_lifetime 2 minutes
acl KnownUsers proxy_auth REQUIRED
http_access allow KnownUsers
(corrigé) les descriptions historiquement associées à ces deux derniers paramètres
étaient dupliquées mot pour mot dans le document source (les deux décrivaient
max_challenge_reuses) ; la définition ci-dessus rétablit la distinction entre
nombre de réutilisations et durée de vie du token.
Déclinaisons
- SMB (identique au schéma Basic + smb_auth ci-dessus, mais ici en schéma NTLM natif) :
auth_param ntlm program /usr/lib/squid/ntlm_auth domaine\contrôleur [domaine\contrôleur ...] - Winbind :
auth_param basic program /usr/lib/squid/wb_ntlm_auth
Échange protocolaire (pour référence)
- YR : Squid demande un nouveau token à son helper (soumis à
max_challenge_lifetime) - TT : le helper renvoie le challenge à transmettre au client, en réponse au YR
- KK : Squid transmet au helper les identifiants reçus du client
- AF
username: le helper confirme que l'authentification a réussi - NA
reason: le helper signale que l'authentification est invalide - BH
reason: échec de la procédure côté communication (bug/panne du helper) - LD
username: proche de BH, mais le helper a tout de même pu renvoyer le nom d'utilisateur
Authentification Negotiate (Kerberos)
Squid supporte aussi le schéma Negotiate pour dialoguer avec un KDC Kerberos (typiquement un
Active Directory) — voir Squid notes pour le déploiement complet (keytab, jonction DNS,
tests kinit/klist).
ACL externes
Au-delà de l'authentification proprement dite, Squid peut déléguer une décision d'ACL à un
programme externe — utile pour mapper IP/utilisateur, ou vérifier une appartenance à un groupe
LDAP/Unix sans dupliquer cette logique dans squid.conf.
external_acl_type ip_user_helper %SRC %LOGIN /usr/lib/squid/ip_user -f /etc/squid/ip_user.conf
acl AclName external ip_user_helper
%SRC est remplacé par l'IP du client et %LOGIN par l'utilisateur
authentifié de chaque requête. Fichier ip_user.conf :
ip_addr[/mask] user|@group|ALL|NONE
127.0.0.1 ALL
192.168.1.0/24 utilisateur1
10.8.1.0/24 @groupe_utilisateurs
172.16.0.0/16 NONE
Groupe LDAP
Nécessite un annuaire LDAP accessible :
external_acl_type ldap_group_helper %LOGIN /usr/lib/squid/squid_ldap_group -b "ou=people,dc=exemple,dc=com" ldap.exemple.local
acl AclName external ldap_group_helper GroupRDN
Groupe Unix
external_acl_type unix_group_helper %LOGIN /usr/lib/squid/check_group -g groupe1 -g groupe2
acl AclName external unix_group_helper
Voir aussi
- Squid — configuration générale du proxy
- Squid notes — déploiement pratique NTLM (Samba/Winbind) et Kerberos (keytab, AD)
- SquidGuard — combiner filtrage par catégorie et authentification par utilisateur