SQUID : Proxy cache filtre
SQUID : Proxy cache filtre jppSquid 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".