======Squid / Squidguard======
{{ :informatique:logiciels:squid_logo.jpg|}}
[[http://www.squid-cache.org/|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.
[[http://www.squidguard.org/|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 %
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=====
* Tester la configuration sans redémarrer le process : ''squid -k parse''
* afficher les timestamp des logs au format //human readable// :
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 %
====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 [[http://www.squid-cache.org/Doc/config/shutdown_lifetime/|envoyant un timeout aux clients]]. Pour baisser ce temps d'attente :
shutdown_lifetime 10 seconds
====Debug====
Pour [[https://wiki.squid-cache.org/KnowledgeBase/DebugSections|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''.
====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
=====Ressources=====
* http://irp.nain-t.net/doku.php/220squid:060_squidguard