Squid

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Serveur mandataire (proxy) et cache Web
Paquet Debian/Ubuntu squid
Config principale /etc/squid/squid.conf
Port par défaut 3128 (HTTP proxy), 3130 (ICP)
Voir aussi SquidGuard · Squid authentification · Sarg · Qstat · Squidclient

Squid est un serveur mandataire (proxy) et cache Web open source, gérant les protocoles HTTP, HTTPS, FTP et Gopher. Il met en cache les objets Web les plus demandés pour économiser la bande passante et accélérer les accès, et sert de point de contrôle centralisé pour les accès sortants d'un réseau (filtrage, authentification, journalisation).

Spécifications

  • Proxy et cache des protocoles HTTP, HTTPS, Gopher, FTP
  • Hiérarchisation du cache (cache parent/sibling)
  • ICP, HTCP, CARP, Cache Digests pour la communication entre caches
  • Mode proxy transparent
  • WCCP (redirection transparente au niveau routeur, Squid 2.3+)
  • Contrôle d'accès étendu (ACL par IP, domaine, horaire, protocole, utilisateur…)
  • Supervision SNMP
  • Cache des requêtes DNS
  • Reverse proxy (accélérateur HTTP)

Installation

apt-get install squid

Le module de filtrage SquidGuard s'installe séparément et vient se greffer sur Squid via un redirecteur d'URL.

Après installation, adapter au minimum le port d'écoute et les ports autorisés dans squid.conf :

http_port 3128
acl Safe_ports port 8080    # exemple : port additionnel à autoriser

puis démarrer le service :

systemctl start squid

Le nom d'hôte annoncé par Squid (utile en cas de hiérarchie de caches) se vérifie avec :

squid -Nd1

Préparation système

Sur un proxy à fort trafic, il faut relever les limites par défaut du système :

# Nombre de descripteurs de fichiers ouverts par le processus squid
ulimit -n 8192

# Nombre maximum de fichiers ouverts au niveau noyau (Linux : fs.file-max)
sysctl fs.file-max
echo "fs.file-max = 65536" >> /etc/sysctl.conf

# Plage de ports locaux disponibles (utile si Squid ouvre beaucoup de connexions sortantes)
echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range

(corrigé) les commandes historiquement citées pour ce réglage (kern.maxfiles, sysctl -w net.inet.ip.portrange.last) sont des noms de sysctl BSD/macOS — elles n'existent pas sous Linux. Les équivalents Linux sont fs.file-max et net.ipv4.ip_local_port_range ci-dessus.

Gestion du service

En plus de systemctl, le binaire squid propose ses propres commandes de contrôle, utiles pour agir sans redémarrage complet :

Commande Effet
squid -k reconfigure recharge la configuration sans interrompre le service
squid -k rotate fait tourner les fichiers de log
squid -k shutdown arrêt propre (laisse les transactions en cours se terminer)
squid -k interrupt arrêt immédiat (coupe les transactions en cours)
squid -k kill envoie un signal kill au processus
squid -k debug bascule en mode debug à chaud
squid -k check vérifie que le service tourne
squid -k parse vérifie la syntaxe du fichier de configuration

Purger le cache

systemctl stop squid
rm -rf /var/spool/squid/*      # chemin réel = celui déclaré par cache_dir dans squid.conf
squid -z                       # recrée l'arborescence de cache
systemctl start squid

Interroger le cache

L'outil squidclient permet d'envoyer des requêtes directement au cache (GET, PURGE, statistiques internes du gestionnaire de cache) — voir Squidclient pour le détail des commandes mgr:* disponibles.

squidclient -m GET https://exemple.org
squidclient -m PURGE https://exemple.org   # nécessite une ACL PURGE dédiée, voir Squidclient

Débogage

debug_options ALL,1 15,3
debug_options section,level section,level ...

Pour identifier rapidement les objets les plus consultés à partir du log d'accès :

sort -r -n +4 -5 /var/log/squid/access.log | awk '{print $5, $7}' | head -25

Pour une analyse structurée et périodique plutôt qu'une lecture brute du log, voir Sarg (rapports HTML) et Qstat (statistiques temps réel).

Voir aussi