Table of Contents

Squid / Squidguard

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 du couple Squid + Squidguard

Installation :

aptitude install squidguard

Config de Squid

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

Ajout de Squidguard

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

En vrac

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

Proxy transparent

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.

Tips

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

Lenteur au redémarrage

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 :

squid.conf
shutdown_lifetime 10 seconds

Debug

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) :

squid.conf
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.

Désactiver le cache

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.

Erreurs

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>

Ressources