Filtrer via Unbound les pubs et autres
Filtrer via Unbound les pubs et autres
Au début, je ne voulais pas filtrer les sites inadaptés et autres publicités sur le réseau familial, mais le temps passant, les enfants grandissant, il a fallu se rendre à l’évidence : c’est un mal pour un bien, car les accidents sont vites arrivés, la dépendance à l’écran s’installer vite.
Du coup, je me suis lancé dans la mise en place de différents moyens de filtrage (simples et bien évidemment contournables[1], mais suffisant pour le quotidien familial :
- le contrôle parental sur l’ordinateur familial (pour limiter les temps d’utilisation),
- un proxy filtrant en mode transparent (pour bloquer les contenus violents)
- un serveur DNS menteur (pour arrêter les publicités et autres contenus intrusifs).
Cette note porte sur ce dernier dispositif. Les serveurs DNS de la maison tournent sur 2 machines :
Comme aucun domaine n’est géré sur ces serveurs, j’utilise unbound pour rendre le service.
Pour cela, j’utilise un script chargé de récupérer la liste noire fournie par Yoyo et l’organise dans un format adapté pour unbound.
Ce script est lancé régulièrement pour mettre à jour la liste noire.
Voici la mise en oeuvre pour pfSense et Debian
pfSense
installation du script
Dans le répertoire /usr/local/etc/unbound
, créer le fichier update_adservers.sh
avec le contenu suivant :
#!/bin/sh
#
# Convert the Yoyo.org anti-ad server listing
# into an unbound dns spoof redirection list.
curl -o yoyo_ad_servers "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext" && \
cat yoyo_ad_servers | grep 127 | awk '{print $2}' | \
while read line ; \
do \
echo "local-zone: \"$line\" redirect" ;\
echo "local-data: \"$line A 127.0.0.1\"" ;\
done > \
/var/unbound/conf.d/ad_servers.conf
rm -f yoyo_ad_servers
crontab
La mise à jour de la liste noire se fait via cron, en ajoutant la ligne suivante au fichier /etc/crontab
:
22 16 * * * root /usr/local/etc/unbound/update_adservers.sh
Puis on relance le démon crond
:
> /usr/local/etc/rc.d/cron.sh restart
configuration unbound
Pour unbound, on ajoute la ligne suivante au fichier de configuration /var/unbound/unbound.conf
:
include: /var/unbound/conf.d/ad_servers.conf
Enfin, on relance unbound après avoir créé la liste noire :
> /usr/local/etc/unbound/update_adservers.sh
> ps ax | awk '/sbin\/unbound/ { print "kill -HUP " $1 }'| sh
vérification
Une petite vérification avant de configurer le serveur sous Debian :
dig @10.0.0.1 +nocomments +nostats ad.musicmatch.com
; <<>> DiG 9.8.3-P1 <<>> @10.0.0.1 +nocomments +nostats ad.musicmatch.com
; (1 server found)
;; global options: +cmd
;ad.musicmatch.com. IN A
ad.musicmatch.com. 3600 IN A 127.0.0.1
On obtient bien 127.0.0.1
, on a bien empoisonné la réponse spoofing.
Debian
installation du script
Créer un répertoire pour les scripts :
mkdir /etc/unbound/scripts
Dans le répertoire fraichement créé, mettre le contenu suivant dans le fichier update_adservers.sh
:
#!/bin/sh
#
# Convert the Yoyo.org anti-ad server listing
# into an unbound dns spoof redirection list.
curl -o yoyo_ad_servers "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext" && \
cat yoyo_ad_servers | grep 127 | awk '{print $2}' | \
while read line ; \
do \
echo "local-zone: \"$line\" redirect" ;\
echo "local-data: \"$line A 127.0.0.1\"" ;\
done > \
/etc/unbound/ad_servers.conf
rm -f yoyo_ad_servers
Puis, positionner les droits d’exécution :
> chmod a+x update_adservers
crontab
Pour mettre à jour, la liste noire des serveurs à bloquer, on va mettre dans le fichier /etc/crontab
, une ligne exécutant régulièrement le script précédemment installé :
23 16 * * * root /etc/unbound/scripts/update_adservers.sh
configuration unbound
Enfin pour unbound, on ajoute la ligne suivante au fichier de configuration /etc/unbound/unbound.conf
include: /etc/unbound/ad_servers.conf
yapluka !
Maintenant, on relance unbound :
> sudo service unbound reload
et le tour… ha non, il manque encore un truc : demander à cron de prendre en compte les modifications que l’on a faites dans /etc/crontab
:
> sudo service cron reload
Et voilà.
[1]: d’ailleurs quand les enfants comprendront les techniques de ce billet, ils seront capables de le faire. #mémo #debian #freebsd #dns #pfsense