SQUID : Proxy cache filtre

Squid est un proxy-cache parmi les plus connus, l'avantage d'un cache n'est plus Ă  dĂ©montrer et tous les browsers en intĂšgrent un. Mais sur un rĂ©seau comportant plusieurs machines accĂ©dant Ă  Internet il peut ĂȘtre intĂ©ressant de disposer d'un cache centralisĂ© qui dimunuera le dĂ©bit Internet nĂ©cessaire et amĂ©liorera la vitesse d'affichage. 
Ce proxy peut ĂȘtre installĂ© sur une machine "tĂȘte" de rĂ©seau qui seule gĂšre l'accĂšs vers Internet. Cette machine peut (doit ?) aussi servir de Firewall commun. 
Une autre fonction d'un proxy est le filtrage et Squid est, bien sĂ»r, muni de possibilitĂ©s dans ce domaine. La plupart des proxies nĂ©cessitent un rĂ©glage spĂ©cifique des navigateurs en utilisant un port spĂ©cifique, en gĂ©nĂ©ral le 3128. Si le filtrage de Squid est efficace il est donc dans ce cas facile de le contourner en dĂ©sactivant le cache dans son browser. 
Une autre mĂ©thode est d'utiliser un cache "transparent" et d'y rediriger les requĂȘtes sortantes Ă  destination du port 80. Une simple rĂšgle iptables permet d'effectuer la redirection de tout ce qui veut sortir vers un port 80 en provenance su rĂ©seau "SOURCE" vers le port 3128 standard de SQUID (Note 2016: on peut agir de mĂȘme en SSL/TLS avec les versions rĂ©centes de Squid) :

PATH=/sbin:$PATH 
IFINT=eth0            
 
SOURCE="192.168.1.0/24" 
PORTS=3128 
PORTE=80 
 
iptables -t nat -A PREROUTING -i $IFINT -s $SOURCE -p tcp --dport $PORTE  -j REDIRECT --to-port $PORTS

Il faudra ajouter la directive "http_port 3128 transparent" dans le paramĂ©trage de SQUID. 
Le filtrage sera rĂ©alisĂ© par des "ACL" (Access Control List) et des "http_access deny/allow". Afin que le filtrage soit plus "transparent" un pseudo fichier (une image png de un seul point, transparent lui aussi) sera renvoyĂ© Ă  la place de la demande filtrĂ©e ce qui Ă©vite de polluer les Ă©crans par des messages intempestifs. 

Fichier de paramĂ©trage SQUID partie "gĂ©nĂ©rique"  :

http_port 3128 transparent 
hosts_file /etc/hosts 
# Controles standard 
# ------------------ 
acl Safe_ports port 80 
acl all src 0.0.0.0/0.0.0.0 
acl manager proto cache_object 
acl localhost src 127.0.0.1/255.255.255.255 
acl to_localhost dst 127.0.0.0/8 
acl purge method PURGE 
acl CONNECT method CONNECT 

http_access allow manager localhost 
http_access deny manager 
http_access allow purge localhost 
http_access deny purge 
http_access deny !Safe_ports 
 

Nous arrivons ensuite à notre section de filtrage, le fameux "ACL" est effectué par une recherche dans un fichier externe, simple fichier texte (à mettre à jour manuellement, on peut trouver de tels fichiers sur Internet). Le type de rÚgle utilisé "dstdom_regex", il suffit alors que le fichier contienne une URL (ou une partie d'URL) pour que la condition soit remplie.

acl mespub      dstdom_regex "/etc/squid/mespub.txt" 
deny_info file:///etc/squid/deny.png mespub 
http_access deny mespub

Si le fichier "mespub.txt" contient une ligne ".sexe.com" tous les sites dont le nom se termine par "sexe.com" seront invisibles. Ce fichier peut aussi contenir des adresses IP car souvent les sites d'images publicitaires n'ont pas de nom de domaine mais seulement une IP. 
Le fichier paramÚtre contient à la fin quelques variables "techniques" qu'il est intéressant de conserver (et d'adapter) :

# Filtrage selon reseau d'origine 
acl reso0 src 10.0.1.0/24 
acl reso1 src 127.0.0.1 
acl reso2 src 192.168.1.0/24 
http_access allow reso0 
http_access allow reso1 
http_access allow reso2 
http_access allow localhost 
http_access deny all 
http_reply_access allow all 
# 
# Constantes diverses 
# 
icp_access allow all 
visible_hostname mon_host_name 
memory_pools_limit 1 MB 

access_log     /var/log/squid/access.log squid 
error_directory /usr/share/squid/errors/French 
coredump_dir     /var/spool/squid

Une aide importante Ă  l'utilisation du filtrage est constituĂ©e du paquet "sarg" qui permet d'extraire des statistiques d'accĂšs des fichiers de log de SQUID. 
Pour Debian l'installation est immĂ©diate et crĂ©Ă©e automatiquement les crontabs qui vont bien (journaliĂšre, hebdomadaire et mensuelle). 
Pour la partie journaliĂšre il vaut mieux "coupler" l'exĂ©cution du script avec la purge des fichiers "SQUID" effectuĂ©e par "logrotate" en effectuant le calcul des statistiques juste avant la rotation des logs, ajouter un traitement "prerotate" lançant "/usr/sbin/sarg-reports daily" et supprimer le script prĂ©sent dans "/etc/cron.daily". 
Le résultat est directement consultable sur le serveur en http (il faut évidement avoir Apache sur le serveur SQUID), par défaut tout est installé (Debian) dans /var/www/sarg_reports :

 


Le champ "FICHIER/PERIODE" est cliquable et amĂšne sur une page statistique par adresse IP d'origine: 
 
Les adresses sont cliquables et amĂšnent sur le dĂ©tail complet des sites HTTP consultĂ©s ce jour par cette adresse IP : 
 

C'est un peu indiscret, mais utile pour les mises à jour du fichier texte de filtrage ... noter la mention "REFUSE" sur les sites "bloqués".