Squid notes
| Fiche express | |
|---|---|
| Domaine | Squid intégré à un domaine Windows (NTLM/Kerberos via Samba/AD) |
| Prérequis | Winbind, Samba, ntlm_auth
|
| Voir aussi | Squid · Squid authentification · SquidGuard |
Notes pratiques de déploiement autour de Squid, complémentaires à la référence des schémas d'authentification disponible sur Squid authentification : types d'ACL courants, puis un déploiement concret NTLM et Kerberos face à un Active Directory.
Rappel : durcir la configuration de base
Squid gère nativement HTTP, HTTPS, FTP et Gopher :
apt-get install squid
Principes de base pour une configuration en production :
- n'ouvrir que les protocoles réellement nécessaires ;
- restreindre l'accès aux seuls utilisateurs/domaines authentifiés attendus ;
- limiter la taille des requêtes acceptées pour réduire la surface d'attaque de type déni de
service ;
- bloquer le tunneling non-HTTP via
CONNECT(empêche notamment de faire passer un
VPN par le proxy en dehors des ports SSL_ports autorisés).
Types d'ACL disponibles
Squid peut construire une ACL sur de nombreux critères, à combiner selon le besoin :
- adresse IP source / destination
- domaine source / destination
- expression régulière sur un domaine
- mot contenu dans une URL
- mots contenus dans un domaine
- date / jour courant, plage horaire
- port de destination
- protocole (FTP, HTTP, SSL)
- méthode HTTP (GET, POST, CONNECT…)
- type de navigateur (User-Agent)
- nom d'utilisateur (protocole Ident)
- numéro d'AS (Autonomous System)
- identifiants login/mot de passe (proxy_auth)
- requête SNMP
Syntaxe générale :
acl nom type ("chaîne"|"fichier") [chaîne2] [chaîne3] ["fichier2"]
Authentification NTLM via Samba/Winbind
Prérequis : Winbind (récupère utilisateurs et groupes du domaine), Samba (jonction au
domaine) et l'outil ntlm_auth (négociation avec l'AD).
Configuration Samba
[global]
security = domain
winbind separator = /
encrypt passwords = yes
winbind cache time = 15
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
idmap uid = 10000-20000
idmap gid = 10000-20000
Jonction au domaine puis validation :
net join -U administrateur_domaine
wbinfo -g # liste les groupes du domaine
wbinfo -u # liste les utilisateurs du domaine
wbinfo -t # teste le canal sécurisé vers le contrôleur de domaine
Configuration Squid
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid AD
auth_param basic credentialsttl 2 hours
acl ntlm proxy_auth REQUIRED
http_access allow ntlm
append_domain .exemple.local
Détail des paramètres auth_param : voir Squid authentification.
Authentification Kerberos (Negotiate) via Active Directory
Prérequis : un contrôleur de domaine (DC), un DNS et un DHCP fonctionnels. Le nom DNS/PTR de la machine Squid doit être correctement enregistré côté DNS avant toute tentative de jonction Kerberos — une résolution inverse incohérente est la cause la plus fréquente d'échec.
Génération du keytab
Depuis un poste Windows disposant des « Support Tools » (utilitaire Ktpass.exe) :
Ktpass -princ HTTP/proxy.exemple.local@EXEMPLE.LOCAL -mapuser svc_proxy -pass "mot_de_passe_a_definir" -ptype KRB5-NT_PRINCIPAL -crypto rc4-hmac-nt -out c:\squid.keytab.svc_proxy
Vérification côté AD :
setspn -L svc_proxy
Configuration Squid
auth_param negotiate program /usr/lib/squid/squid_kerb_auth -d -s HTTP/proxy.exemple.local
auth_param negotiate children 10
auth_param negotiate keep_alive on
acl Authenticated proxy_auth REQUIRED
http_access allow Authenticated
http_access deny all
-d active le mode debug du helper, -s précise le principal de
service attendu.
Configuration côté client Kerberos (sur la machine Squid)
apt-get install krb5-config krb5-pkinit krb5-user
Copier le keytab généré côté AD sur le serveur, puis /etc/krb5.conf :
[libdefaults]
default_realm = EXEMPLE.LOCAL
[realms]
EXEMPLE.LOCAL = {
kdc = srv-dc.exemple.local
}
Variables d'environnement utilisées par les outils Kerberos :
export KRB5_CONFIG="/etc/krb5.conf"
export KRB5_KTNAME="/etc/squid/squid.keytab.svc_proxy"
Test du principal :
kinit -k -t /etc/squid/squid.keytab.svc_proxy HTTP/proxy.exemple.local
klist -e
Pour diagnostiquer un échec de négociation, capturer le trafic Kerberos côté client et côté proxy :
# côté client
tcpdump -XX -s0 -i eth0 src net IP_DU_CLIENT
# côté proxy
tcpdump -XX -s0 -i eth0 src net IP_DU_PROXY
Anonymisation côté cache
Quelques options pour limiter ce que Squid révèle de lui-même et des clients :
client_netmask 255.255.255.0
anonymize_headers deny Referer Server From User-Agent
fake_user_agent Nutscrape/1.0 (CP/M; 8-bit)
(corrigé) la directive citée dans les notes d'origine (anomyze_headers) est
une faute de frappe — la directive Squid réelle est anonymize_headers.
Voir aussi
- Squid — configuration générale du proxy
- Squid authentification — référence complète des schémas Basic/Digest/NTLM/Negotiate
- SquidGuard — filtrage complémentaire à l'authentification
- Kerberos
- LDAP