Raspberry Pi : Adblock via DNSMASQ

By | 19 February 2014

L'objectif est de mettre en place un service de suppression de la publicité sur les pages Web pour tous les appareils connectés à votre accès internet. (Téléphone portable, Tablette, PC..)

Voici les solutions que j'ai étudié pour le raspberry :

  • Squid
  • Privoxy
  • Dnsmasq + Pixelserv

Après avoir fait quelques essais sur le raspberry :

Pour le service Squid qui est uniquement un proxy cache,  source d'installation disponible rapide, un peu de configuration, il y a un nombre important d'outils d'analyse et de plugins disponible mais coté performance même en déplacement la cache squid en RAM le raspberry semble être un peu juste.

Pour Privoxy les performances sont meilleurs même si un il y a comme même une petite latance surtout sur les pages web avec beaucoup de plublicité. La configuration est rapide mais le paramétrage propre aux appplications (IOS, Android) ou à des sites web est importante. Car beaucoup de blocage par defaut mais très efficace.

Enfin la solution retenu ici est 'Dnsmasq + Pixelserv'. Il s'agit d'un mini serveur Web (PixelServ) qui affiche une image d'un pixel et d'un serveur DNS (dnsmasq) qui remplace les adresses des serveurs de pub présente sur une page web par une autre adresse local de notre serveur web PixelServ. Toutes les adresses url qui pointent vers un serveur de pub sont redirigées vers notre serveur Web PixelServ qui affiche donc un pixel à la place. Le filtrage est rapide car il se fait au niveau du DNS et le remplacement par l'image d'un pixel est très rapide également. Donc coté performance celà est indétectable avec le raspberry.

 

1. Installation de Dnsmasq

Dnsmasq est un serveur DNS et DHCP light, le DHCP est désactivé par défaut mais pourait être utile par la suite.

sudo apt get install dnsmasq

1.1 Paramétrage de Dnsmasq

Modification du fichier de configuration du service dnsmasq

 sudo nano /etc/dnsmasq.conf

1.2 Pour afficher les logs du service dans Syslog (var/log/syslog)

On va modifier la ligne (supprimer # devant la commande) pour permettre d'avoir les logs du service dans notre syslog. Cela est utile pour dépanner si nous rencontrons des problèmes d'accès à certains sites.

log-queries

Si vous souhaiter spérarer les logs de dnsmasq de syslog vous pouvez rajouter à votre fichier de config

log-facility=/var/log/dnsmasq.log

On va rajouter au fichier de configuration la ligne qui indique l'emplacement de notre notre blacklist (sites à rediriger vers notre serveur local)

conf-file=/etc/dnsmasq.blacklist.conf

Puis on quitte et sauvegarde notre fichier.

1.3 Création de notre fichier backlist maintenant

sudo nano /etc/dnsmasq.blacklist.conf

Ensuite pour récupérer la listes des serveurs de publicitées, aller sur le site : http://pgl.yoyo.org/adservers/

  1. Dans la liste "list ad server hostnames:"
  2. prendre dnsmasq
  3. séléctionner "view list as plain text" et "Go"
  4. Copier la liste
  5. Coller celle-ci maintenant dans votre fichier dnsmasq.blacklist.conf
  6. Remplacer ensuite l'adresse 127.0.0.1 par l'adresse de votre Raspberry (ou se trouvera le futur serveur PixelServ normalement sur le même serveur (ex : 192.168.1.1))
  7. Sauvegarder votre fichier et quitter.

On redémarre ensuite le service pour la prise en compte des changements

sudo service dnsmasq restart

Vérifier aussi que votre fichier /etc/resolv.conf contient bien les DNS de votre FAI.

 

2. Installation maintenant du serveur PixelServ.

PixelServ il s'agit en faite d'un simple script Perl.

Il faut récupérer le scirpt sur le site de l'éditeur : ici puis le renommer, le rendre exécutable et le déplacer dans /usr/loca/bin

wget http://proxytunnel.sourceforge.net/files/pixelserv.pl.txt

cp pixelserv.pl.txt pixelserv

sudo chmod 755 pixelserv

sudo cp  pixelserv /usr/local/bin

2.1 Configuration de PixelServ

Avant de lancer le script il est nécessaire préciser l'adresse IP du raspberry et le port d'écoute du service.

sudo nano /usr/local/bin/pixelserv

$sock = new IO::Socket::INET (  LocalHost => 'IP RASPBERRY ex 192.168.1.1',
                                LocalPort => 'PORT DU SERVICE ex: 80',

Ensuite il ne reste plus qu'a lancer le script ./usr/local/bin/pixelserv pour démarrer le serveur

 

3. Paramétrage coté client

Mise à jour manuel  : Il ne reste plus qu'a rajouter au niveau des clients l'adresse IP du raspberry dans les adresses DNS de nos cartes réseaux.

Pour une mise à jour automatique: il possible d'activer le DHCP présent dans le serveur dnsmasq et de paramétrer une page et ensuite désactiver celui de votre box. Pour plus d'informations sur la configuration voir l'excellent article Ubuntu-fr .

 

4. Ressources supplémentaires :

  • Permet d'automatiser la récupération de la liste des serveurs blacklistés via un script lancé par un job
  • Créer un service pour le serveur Pixelserv. (Voir article Création d’un daemon linux )

Voir le très bon site http://sfxpt.wordpress.com/2011/02/21/the-best-ad-blocking-method/

Un autre service de DNS (Unbound) très performant qui peut aussi effectuer le filtrage, voici un article qui décrit les différentes configurations possibles  : https://calomel.org/unbound_dns.html

Leave a Reply

Your email address will not be published. Required fields are marked *