Squid est un proxy libre. Il permet de relayer des requêtes de différents protocoles dont HTTP ou HTTPS après filtrage, QoS ou autre. Par défaut Squid utilise sur le port 3128.
Squidguard est un redirecteur d'URL qui se greffe sur Squid ; il permet notamment de gérer facilement et rapidement des bases de blacklistes.
Installation :
aptitude install squidguard
Réduction du fichier de conf de Squid, un peu trop verbeux :
cd /etc/squid/ mv squid.conf squid.conf.orig grep -Ev '^$|^[[:blank:]]*#' squid.conf.orig > squid.conf
Personnalisation du squid.conf :
# timestamp des logs avec la date "human-readable" logformat squid %tl.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt # permettre aux IPs e notre LAN de sortir ! acl localnet src 192.168.0.0/16 http_access allow localnet
Les connexions HTTPS utilisent la méthode connect et sont permises par les directives:
acl SSLPort 443 4443 8443 acl CONNECT method CONNECT http_access allow CONNECT SSLPort
Ajout gestion du FTP (à ajuster selon la conf en place):
acl SSL_ports port 21 acl ftp proto FTP http_access allow ftp
Tester la conf de Squid et relancer le service si OK :
squid -k parse
systemctl reload squid
Editer le fichier dsuid.conf :
# conf squidguard url_rewrite_program /usr/bin/squidGuard -c /etc/squidguard/squidGuard.conf url_rewrite_children 4
Copier le template de page d'erreur sur Squidguard :
gunzip /usr/share/doc/squidguard/examples/squidGuard-simple.cgi.gz mv /usr/share/doc/squidguard/examples/squidGuard-simple.cgi /usr/lib/cgi-bin/ chown www-data:www-data /usr/lib/cgi-bin/squidGuard-simple.cgi chmod +x /usr/lib/cgi-bin/squidGuard-simple.cgi
Télécharger et installer des blacklistes :
cd /var/lib/squidguard/db/ wget ftp://ftp.univ-tlse1.fr/blacklist/blacklists.tar.gz tar xzf blacklists.tar.gz chown -R proxy:proxy blacklists cd blacklists # vérifier le contenu de ce qu'on vient de télécharger : ls -l
Configurer les blacklistes “porn” dans squidguard.conf :
dbhome /var/lib/squidguard/db logdir /var/log/squidguard src localnet { ip 192.168.0.0/16 } dest porn { urllist blacklists/porn/urls domainlist blacklists/porn/domains expressionlist blacklists/porn/very_restrictive_expression } acl { localnet { pass !porn any } default { pass local none redirect http://127.0.0.1/cgi-bin/squidGuard-simple.cgi?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&targetgroup=%t&url=%u } }
Compiler les blacklistes
su proxy squidGuard -C all # Vérification : tail -f /var/log/squid/squidGuard.log
On peut aussi tuner les paramètres suivants (toujours dans le même fichier) :
# numéro du port d'écoute http_port 3128 # taille du cache en mémoire vive # (attention le cache est perdu lors d'un squid reload/restart) cache_mem 8 MB # format, emplacement et taille du cache sur le disque # ici 100 MB de cache dans le fichier /var/spool/squid au format ufs # 16 et 256 correspondent au nombre de dossiers niveau 1 et niveau 2 utilisés pour le cache cache_dir ufs /var/spool/squid 100 16 256
Pour créer un proxy transparent, on peut utiliser la règle de redirection iptables suivante sur un routeur :
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-dest proxyhost:3128 iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-dest proxyhost:3128
Cela redirige toutes les requêtes HTTP et HTTPS vers le proxy Squid de manière transparente.
squid -k parse
cat access.log | perl -p -e 's/^([0-9]*)/"[".localtime($1)."]"/e' # ou avec le très bon viewer de logs ccze : cat access.log | ccze -CA # ou modifiant le logformat dans le fichier de conf de squid (/etc/squid/squid.conf) logformat squid %tl.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt
Squid est long à redémarrer car il attend que les sockets se ferment d'elles-même jusqu'à 30s par défaut, avant de les forcer à se fermer en envoyant un timeout aux clients. Pour baisser ce temps d'attente :
shutdown_lifetime 10 seconds
Pour débugger Squid, on utilise la directive debug_options section,level
dans le fichier de conf. section vaut ALL ou de 0 à 93 ; level vaut de 0 à 9, avec 9 le plus verbeux. Les logs de debug seront redirigés vers le cache.log.
Pour débugguer les ACLs (section 28) :
debug_options 28,9
Redémarrer le service pour activer l'option. Comme toujours, penser à désactiver le debug une fois le soucis réglé, pour ne pas exploser le /var/log
.
Pour désactiver le cache il suffit, soit de bloquer le cache avec l'ACL :
cache deny all
… soit de commenter les directives cache_dir
.
Il se peut qu'il ne se lance pas avec l'erreur suivante :
FATAL: Could not determine fully qualified hostname. Please set 'visible_hostname'
A ce moment-là il faut compléter le fichier de configuration /etc/squid/squid.conf
par :
visible_hostname <n'importe quoi sauf rien>