SQUID : cache
SQUID : cache jppJ'utilise Squid depuis très longtemps, ce blog contient plusieurs articles à ce sujet dont le premier remonte à 2010.
Note août 2021, à l'occasion du changement de machine (voir l'article spécifique) je suis passé à la version 5 de Squid.
J'ai décidé de les regrouper pour que l'ensemble soit plus facile à consulter.
Le premier article de la série est une explication générique de l'utilité d'un proxy-cache et de son installation basique.
Le deuxième traite plus particulièrement du cas de l'usage de SSL.
Les autres articles présentent divers scripts liés à l'utilisation de Squid et quelques éléments sur les "ACL" (Access Control List) et leur usage.
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".
Squid avec ssl
Squid avec ssl jpp
Note avril 2020 : Squid (version 4.9-20200102) est toujours actif et j'ajoute régulièrement quelques données dans les fichiers de filtrage pour définir quelques origines gênantes et je récupère toutes les semaines les informations sur les serveurs de pub depuis https://pgl.yoyo.org
Note juin 2018 : j'utilise toujours Squid (version 4.0.25) sur mon système frontal ce qui permet de bloquer certains sites de pub un peu trop intrusifs et aussi d'accélérer l'affichage. Pour voir le principe des "ACL" et quelques exemples aller ici.
Note septembre 2017, en cas d'ennui de compilation vérifier l'installation de :
libssl-dev et libcrypto++-dev
apt-get install libssl-dev libcrypto++-dev
La version qui "tourne" actuellement est la version 3.5.19-20160618-r14061. Je recompile une nouvelle version de temps en temps, quelques "trucs" que j'utilise sont décrits en annexe.
Surtout ne pas oublier d'installer votre certificat sur les postes client !
J'ai voulu essayer d'utiliser Squid3 en proxy SSL, mais malheureusement le binaire proposé par Debian est compilé sans l'option SSL. Pour persister dans mon idée il m'a fallu passer par les sources et je vous conte ci-après l'histoire correspondante.
Cette opération a été réalisée sur une machine Debian 7.4, pour d'autres distributions les répertoires peuvent varier.
Télécharger la dernière archive (pour moi : squid-3.5.02.tar.xz) et la décompresser dans un répertoire tranquille, j'utilise /usr/src/PGM/BUILD comme répertoire de base et ne touche pas à la disposition "classique des programmes locaux dans /usr/local/....
J'ai mis les options de configuration qui m'intéressent dans le petit script suivant :
#!/bin/bash OPTIONS=' --with-default-user=squid ' cd squid-3.5 ./bootstrap.sh ./configure $OPTIONS 2>&1 | tee LOG.CONFIGURE make clean 2>&1 | tee LOG.CLEAN make 2>&1 | tee LOG.MAKE exit |
Il ne reste plus qu'à vérifier les logs et lancer un "make install" (en root).
Ainsi je pourrais compiler d'autres versions sans ennuis, du moins en principe.
Après un essai de compilation "direct" j'ai eu des ennuis à la première exécution. Après recherche j'ai suivi la procédure conseillée (internet dixit) : lancer avant toute chose dans le répertoire de Squid la commande "./bootstrap.sh" qui configure elle même plein de trucs ... en résultat tout est OK (Le script ci-dessus vous évite ce genre d'ennui.
Après ce petit baratin on lance le truc et on commence pas aller dans le répertoire de Squid et on lance la grande magie :
./bootstrap.sh
On lance le petit script de configuration créé précédemment. Puis le fatidique :
make 2>&1 | tee MAKE.LOG
La compilation est assez longue, presque autant que celle d'un noyau Linux!
Ensuite on peut passer au "make install" en "root" bien sûr !
On reste "root" pour la suite, il faut, dans le répertoire par défaut (pour moi /usr/local/squid) :
- Créer un répertoire pour stocker le certificat racine de notre autorité
mkdir ssl_cert - Créer un certificat
Voir le script joint - Créer un repertoire "lib" dans /usr/local/squid/var
mkdir lib - initialiser le répertoire de cache des certificats créés
/usr/local/squid/libexec/ssl_crtd -c -s /usr/local/squid/var/lib/ssl_db
Note : Si le répertoire existe, tout le monde peut faire des erreurs ! Il faut le détruire avant de relancer la commande. Dans ce cas ne pas oublier :
chown -R squid:squid /usr/local/squid/var/lib/ssl_db"
- Initialiser les pages de messages d'erreur dans /usr/local/squid/share/errors
- Créer un répertoire "fr" et un lien de "fr" vers "fr-fr"
- copier le répertoire "templates" dans "fr" et, pour bien faire traduire les pages !
cd /usr/local/squid/share/errors
mkdir fr
ln -s fr fr-fr
cp ./templates/* ./fr
- Créer un user "squid" groupe "squid" sans droit de login
- Comme le user d'exécution prévu est "squid" faire un "chown -R squid:squid /usr/local/squid"
Pour la suite je considère que vous avez déjà un fichier de config qui fonctionne en HTTP classique avec les "acl" et filtres qui vous conviennent. Si ce n'est pas le cas commencer par ce point pour que le cache fonctionne selone vos désirs en HTTP. Pour tester configurez votre navigateur avec Squid comme proxy, dans ce cas otez l'option "transparent" de la configuration, vous la remettrez plus tard avant d'activer le système de redirection.
Ajouter les paramètres adéquats dans le fichier de configuration "squid.conf" :
# # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # Squid normally listens to port 3128 |
Il faut alors mettre en place une redirection de ports des ports entrants 80 et 443 vers la machine "Squidifiée" sur les ports 3128 et 3129.
Voir le script joint "Redirection iptables".
Récupérer un script d'init (il n'y en a pas dans le paquet source) ou bien récupérez celui joint ici (repris de Debian avec quelques adaptations à "/usr/local/squid") puis lancer :
service squid start
Et c'est parti ... enfin presque il vous faut avant tout usage HTTPS aller installer votre fichier ".crt" dans le magasin de certificats des browsers du réseau.
Sinon c'est le blocage assuré de tous les sites HTTPS !
C'est le seul inconvénient du proxy HTTPS, comme il doit signer les certificats qu'il vous envoie en lieu et place de ceux qu'il a négociés avec le site il faut qu'il dispose d'une autorité adéquate. Tous les navigateurs disposent de cette possibilité, mais c'est une contrainte importante.
Pour "curl" et "wget" il faut copier votre certificat de CA dans /etc/ssl/certs, puis l'ajouter à la fin du fichier /etc/ssl/certs/ca-certificates.crt.
A part cela c'est le seul moyen de cacher efficacement les pages HTTPS.
Remarque :
Depuis la version du 2 juillet 2015 il est nécessaire d'effectuer une petite modif pour éviter un plantage fatal au démarrage avec message :
"icmp_sock: (1) Operation not permitted".
Il suffit de passer le binaire "pinger" (dans squid/libexec) en mode suid root :
cd le_repertoire_de_squid cd libexec chown root:squid pinger chmod 4755 pinger |
ou de réaliser un "make install-pinger".
Comme "pinger" utilise des ports "au hasard" (?) j'ai préféré ajouter l'option "pinger_enable false" dans mon fichier "squid.conf".
Scripts joints :
- Création certificat
- Script d'init
- Exemple de redirection IPTABLES
Squid : script d'init
Squid : script d'init jppScript (ancienne mode avec "service") adapté du script fourni par Debian :
#! /bin/sh
#
# squid Startup script for the SQUID HTTP proxy-cache.
#
# Version: @(#)squid3.rc 1.0 07-Jul-2006 luigi@debian.org
#
### BEGIN INIT INFO
# Provides: squid
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Should-Start: $named
# Should-Stop: $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Squid HTTP Proxy version 3.x
### END INIT INFO
NAME=squid
DESC="Squid HTTP Proxy 3.x"
DAEMON=/usr/local/squid/sbin/squid
PIDFILE=/usr/local/squid/var/run/$NAME.pid
CONFIG=/usr/local/squid/etc/squid.conf
SQUID_ARGS="-YC -f $CONFIG"
[ ! -f /etc/default/squid3 ] || . /etc/default/squid3
. /lib/lsb/init-functions
PATH=/bin:/usr/bin:/sbin:/usr/sbin
[ -x $DAEMON ] || exit 0
ulimit -n 65535
find_cache_dir () {
w=" " # space tab
res=`sed -ne '
s/^'$1'['"$w"']\+[^'"$w"']\+['"$w"']\+\([^'"$w"']\+\).*$/\1/p;
t end;
d;
:end q' < $CONFIG`
[ -n "$res" ] || res=$2
echo "$res"
}
find_cache_type () {
w=" " # space tab
res=`sed -ne '
s/^'$1'['"$w"']\+\([^'"$w"']\+\).*$/\1/p;
t end;
d;
:end q' < $CONFIG`
[ -n "$res" ] || res=$2
echo "$res"
}
start () {
killall -u squid
cache_dir=`find_cache_dir cache_dir`
cache_type=`find_cache_type cache_dir`
#
# Create spool dirs if they don't exist.
#
if [ "$cache_type" = "coss" -a -d "$cache_dir" -a ! -f "$cache_dir/stripe" ] || [ "$cache_type" != "coss" -a -d "$cache_dir" -a ! -d "$cache_dir/00" ]
then
log_warning_msg "Creating $DESC cache structure"
$DAEMON -z -f $CONFIG
fi
umask 027
ulimit -n 65535
cd $cache_dir
start-stop-daemon --quiet --start \
--pidfile $PIDFILE \
--exec $DAEMON -- $SQUID_ARGS < /dev/null
return $?
}
stop () {
PID=`cat $PIDFILE 2>/dev/null`
start-stop-daemon --stop --quiet --pidfile $PIDFILE --exec $DAEMON
#
# Now we have to wait until squid has _really_ stopped.
#
sleep 2
if test -n "$PID" && kill -0 $PID 2>/dev/null
then
log_action_begin_msg " Waiting"
cnt=0
while kill -0 $PID 2>/dev/null
do
cnt=`expr $cnt + 1`
if [ $cnt -gt 24 ]
then
log_action_end_msg 1
return 1
fi
sleep 1
log_action_cont_msg ""
done
log_action_end_msg 0
killall -u squid
return 0
else
return 0
fi
}
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
if start ; then
log_end_msg $?
else
log_end_msg $?
fi
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
if stop ; then
log_end_msg $?
else
log_end_msg $?
fi
;;
reload|force-reload)
log_action_msg "Reloading $DESC configuration files"
start-stop-daemon --stop --signal 1 \
--pidfile $PIDFILE --quiet --exec $DAEMON
log_action_end_msg 0
;;
restart)
log_daemon_msg "Restarting $DESC" "$NAME"
stop
if start ; then
log_end_msg $?
else
log_end_msg $?
fi
;;
status)
status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit 3
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|reload|force-reload|restart|status}"
exit 3
;;
esac
exit 0
Squid : quelques "ACL"
Squid : quelques "ACL" jppLes très fameux "ACL" permettent, entre autres, de filtrer efficacement des sites "indésirables".
Les plus souvent visés sont les sites "pour adultes", mais on peut y ajouter les sites qui farcissent vos écrans de publicités diverses ou qui vous "pistent".
Squid dispose pour cela de trois types principaux d'ACL (il y en a d'autres) mais la documentation est parfois sybilline.
Pour la plupart d'entre eix une syntaxe permet de déporter les paramètres dans un bête fichier texte externe dont il suffit d'indiquer le nom, ce nom peut être donné sous la forme d'une URL. Je mets "http://mon_serveur_web/deny.png" qui pointe vers une image de 1 pixel, comme cela on ne voit rien sur l'écran !
Premier type : liste d'URL "à éviter".
acl listeurl dstdomain "/etc/squid/nom_du_fichier"
deny_info http://mon_serveur/deny.png listeurl
http_access deny listeurl
Le format est simple, des noms de domaines, s'il sont précédés d'un point tous les sous-domaines sont eux aussi bloqués. Exemple :
.yieldmanager.com
.zanox-affiliate.de
.zanox.com
Deuxième type : liste d'IP "incorrectes"
acl listeip dst "/etc/squid/nom_du_fichier_ip"
deny_info http://mon_serveur/deny.png listeip
http_access deny listeip
Le format du fichier est simple : des adresses IP au format CIDR, par exemple :
209.207.224.220/32
209.207.224.246/32
Troisième type : liste d'expressions régulières.
acl ad_block dstdom_regex "/etc/squid/ad_block.db"
deny_info http:/mon_serveur/deny.png ad_block
http_access deny ad_block
Pour cette dernière liste j'utilise une liste "toute faite", il en existe plusieurs, par exemple un petit :
wget -O /etc/squid/ad_block.db 'http://pgl.yoyo.org/adservers/serverlist.php?hostformat=squid-dstdom-regex&show…'
Un petit exemple quand même pour la route :
.zintext\.com
.zmedia\.com
Note : cela marche aussi sans le "\" devant .com.
Avec tout ceci vous êtes parés à filtrer.
Télécharger ma liste de "vilains méchants". Elle date un peu depuis 2014, mais elle est mise à jour assez régulièrement.
Squid : script generation certificat
Squid : script generation certificat jppCe script est le résultat de diverses récupérations sur Internet .... le certificat généré (autorité) à charger dans les navigateurs "clients" est le fichier en ".crt"
#!/bin/bash
#
SORTIE()
{
if [ "$1" -eq 0 ]
then
echo 'OK'
else
echo ------- KO ----------;
fi
exit
}
# Partie a personnaliser
RCN=/usr/local/squid/ssl_cert
KNAME='votre_autorite';
PAYS=FR
REGION=Idf
VILLE='Trifouilly les Oies'
NA=le_nom_de_votre_entite
FQDN=votre_nom
MAIL=un_mail_bien_a_vous
PASS='une_phrase_de_passe'
cd $RCN
ret=$?
if [ $ret -ne 0 ]
then
echo 'Erreur cd '$RCN
SORTIE 1
exit $ret
fi
# Generer la clef (2048 bits)
openssl genrsa -out $KNAME'.private' 2048
ret=$?
if [ $ret -ne 0 ]
then
SORTIE 2
fi
# generer certificat
openssl req -new -key $KNAME'.private' -out $KNAME'.csr' <<!FINI
$PAYS
$REGION
$VILLE
$NA
$NA
$FQDN
$MAIL
$PASS
$NA
!FINI
ret=$?
if [ $ret -ne 0 ]
then
SORTIE 3
fi
### signer
openssl x509 -req -days 3652 -in $KNAME'.csr' -signkey $KNAME'.private' -out $KNAME'.crt'
ret=$?
if [ $ret -ne 0 ]
then
SORTIE 4
fi
SORTIE 0
Squid : script de redirection
Squid : script de redirection jppCe script "iptables" effectue la redirection des trames demandant à "sortir" vers les ports 80 ou 443, les trames sont automatiquement redirigées sur les "bons" ports de Squid.
#!/bin/bash
#
# Diversion port 80 to 3128 (squid)
# et 443 to 3129 (squid SSL)
#
GENER()
{
iptables -t nat $1 PREROUTING -i $IFINT -s $SOURCE -p tcp $OPTION --dport $PORTE -j REDIRECT --to-port $PORTS
}
# ================================================================
PATH=/sbin:$PATH
# interface vers reseau privé
IFINT=br1
# adresse du réseau à "Traiter"
SOURCE="192.168.2.0/24"
# Ne pas proxifier ce host, c'est le support de SQUID
HOST='192.168.2.2'
OPTION=' ! -d '$HOST
#
# HTTP
#
PORTS=3128
PORTE=80
#
GENER -D
GENER -I
#
# HTTPS
#
PORTS=3129
PORTE=443
#
GENER -D
GENER -I
exit 0
Squid listes de sites à éviter
Squid listes de sites à éviter jppDepuis le temps que j'utilise Squid j'ai accumulé deux listes de sites à filtrer :
- Une liste de noms de domaines.
- Une liste d'adresses IP.
ACL pour la liste d'adresses IP:
acl badip dst "/etc/squid/badip.txt"
deny_info http://apache_local:81/deny.png badip
http_access deny badip
ACL pour la liste de noms de domaine :
acl trade dstdomain "/etc/squid/trade.txt"
deny_info http://portail.jpp.fr:81/deny.png trade
http_access deny trade
Téléchargez la liste IP (#200 adresses) ici.
Téléchargez la liste de sites (#800 noms de domaines) ici.
Voir aussi l'article sur les listes publiques permettant d'améliorer le filtrage.
Note 2024 : Ces listes ne sont plus à jour depuis 2020 ... il va falloir que je m'y remette ...
Squid version 4
Squid version 4 jppDebian Stretch a abandonné la version 1.0 de Openssl et le paquet "libssl-dev" est dédié à la version 1.1, aussi les anciennes versions de Squid (3.5 par exemple) ne compilent plus avec Debian 9 et provoquent des erreurs si l'ancienne version de libssl n'est pas présente, voir article sur ce plantage.
J'ai donc décidé de passer à la version 4 de Squid qui est adaptée à libssl 1.1.
Pour disposer de cette version c'est très simple :
- Télécharger les sources sur http://www.squid-cache.org/Versions/v4, j'ai téléchargé la version la plus récente squid-4.0.21-20170901-ra8623e5 datée du 1er septembre.
- Décompresser l'archive
- Lancer le script ci dessous :
#!/bin/bash OPTIONS=' --with-default-user=squid ' # MAX FD OPTIONS=$OPTIONS' --with-filedescriptors=16384 ' # NO IPV6 OPTIONS=$OPTIONS' --disable-ipv6 ' ## Modif pour V4 OPTIONS=$OPTIONS' --enable-ssl --enable-inline ' # Depuis SQUID 3.5 OPTIONS=$OPTIONS' --with-openssl ' # transparent (pour utiliser redirection avec iptables) OPTIONS=$OPTIONS' --enable-linux-netfilter --enable-icmp --with-large-files ' OPTIONS=$OPTIONS' --enable-icap --enable-useragent-log --enable-referer-log' OPTIONS=$OPTIONS' --disable-poll --enable-epoll --disable-ident-lookups ' OPTIONS=$OPTIONS' --enable-async-io=16 --enable-underscores --enable-carp' OPTIONS=$OPTIONS' --enable-storeio=aufs,diskd,rock ' OPTIONS=$OPTIONS' --enable-htpc ' OPTIONS=$OPTIONS' --enable-err-language=fr ' OPTIONS=$OPTIONS' --enable-http-violations ' # Nouveau 4.0 OPTIONS=$OPTIONS' --enable-delay-pools ' OPTIONS=$OPTIONS' --enable-kill-parent-hack ' OPTIONS=$OPTIONS' --enable-translation ' cd squid-4..... ./bootstrap ./configure $OPTIONS 2>&1 | tee LOG.CONFIGURE make clean 2>&1 | tee LOG.CLEAN make -j 3 2>&1 | tee LOG.MAK make clean 2>&1 | tee LOG.CLEAN make -j 3 2>&1 | tee LOG.MAK |
Il ne vous restera plus qu'à effectuer un "sudo make install" pour disposer de cette dernière version qui fonctionne parfaitement avec libssl 1.1.
A noter : le reste de l'installation, y compris le paramétrage, restent identiques à ceux utilisés pour la version 3.5.
Améliorer le filtrage de Squid
Améliorer le filtrage de Squid jppLa fonction filtre de Squid fonctionne essentiellement à l'aide de listes noires, il est donc essentiel de disposer de "listes noires" à jour car les publicitaires "invasifs" n'hésitent pas à modifier leurs noms de domaines et les adresses IP de leurs machines (merci le cloud !).
Une bonne source de ces listes est le site https://pgl.yoyo.org, vous pouvez aussi aller voir https://yoyo.org.
Comme ces listes ne sont pas forcément dans un format reconnu par Squid, j'utilise deux scripts qui effectuent :
- La récupération des données.
- Leur mise en forme.
- Leur placement dans le bon répertoire sous le "bon nom" reconnu par le paramétrage de Squid.
Le paramétrage dans "squid.conf" est simple, il suffit d'ajouter :
acl yoyo_ip dst "/etc/squid/yoyo_bad_adresses.txt" acl ad_block dstdom_regex "/etc/squid/ad_block.db" |
Note : le renvoi est fait vers un serveur Apache (Nginx doit faire aussi bien) résidant sur la même machine, le fichier "deny.png" est une simple image d'un petit point rouge.
On doit pouvoir faire le même genre d'opération avec un fichier "local" sur les postes clients.
Ces scripts sont, plus ou moins, paramétrables à l'aide d'un fichier ".conf"et réalisent les opérations pour lesquelles ils ont été conçus.
Il est conseillé de les lancer une fois par semaine afin de bénéficier d'une mise à jour régulière.