Pi-hole, un DNS qui tue!

Pi-hole, un DNS bloqueur de pubs et autres joyeusetés

Introduction

Jusqu’ici, pour bloquer les pubs tu utilisais (oui, tu vas changer de méthode!) un plugin du type uLimit ou AdBlock sur les navigateurs supportés. Pour le reste, ma foi, tant pis. Mais heureusement, il existe une solution open source pour améliorer cette situation: Pi-hole!

Présentation

Pi-hole est un serveur DNS « sinkhole« , c’est à dire un serveur DNS qui interdit la résolution de noms des domaines selon différents critères et, comme c’est le cas de Pi-hole, en utilisant des listes d’exclusions. L’avantage d’un tel serveur est que la protection offerte ne se limite pas aux simples publicités et couvrent tous les appareils du réseau.

Installation

J’ai choisi d’installer Pi-hole sur un Raspberry Pi, parce que mon Pi fait déjà serveur DNS. Du coup, la configuration est facilitée puisque je peux reprendre la même adresse IP et donc ne rien changer sur les autres appareils. De plus, disposant d’une deuxième carte mémoire (quel luxe!), il n’y a pas de difficulté pour réaliser la sauvegarde pré-installation.

Préparation

Contrairement à une idée reçue, Pi-hole n’est pas une distribution Linux. Du coup, pour l’installer, il faut un OS fonctionnel. J’ai choisi Raspberry Pi OS, basé sur (roulements de tambour!) Debian. Pour installer RpiOS, c’est plutôt standard: on écrit l’image ISO sur la carte SD (avec la commande dd), on n’oublie d’écrire l’adresse IP dans le fichier « cmdline.txt » (sous la forme ip = a.b.c.d) puis de créer un fichier vide nommé « ssh« . Ensuite, on reboote, on configure le Raspberry et on peut continuer avec Pi-hole.

Installation de Pi-hole

Il y a plusieurs méthodes d’installation mais je préfère la numéro 2, à savoir:

wget -O basic-install.sh https://install.pi-hole.net
sudo bash basic-install.sh

Chargement de listes d’exclusion

Le site Firebog référence un nombre important de listes. J’ai choisi de charger les listes « vertes » pour commencer. L’ensemble représente tout de même presque 260’000 domaines bannis. Je pense que j’ajouterais les autres listes également, par curiosité.

Ajout de zones internes

Une fois configuré, Pi-hole fait son travail de DNS mais il ne connaît rien du réseau interne (encore heureux). Pour déclarer les noms DNS des machines du réseau, il faut modifier le fichier custom.list avec la commande sudo nano /etc/pihole/custom.list puis ajouter le contenu suivant:

a.b.c.d machine.domaine

Note: on peut lister plusieurs domaines dans le fichier custom.list. Ensuite il faut recharger la configuration de Pi-hole avec la commande sudo pihole restartdns reload. Et voilà, la résolution de noms pour le réseau interne fonctionne.

Il traîne une petite blague: le Raspberry lui-même ne sait pas résoudre les noms des autres machines du réseau. C’est dû au fait que la configuration par défaut fait utiliser un résolveur externe (dans mon cas: OpenDns) plutôt que le résolveur Pi-hole. Pour corriger cela, il faut modifier le fichier dhcpcd.conf avec la commande sudo nano /etc/dhcpcd.confpuis modifier comme suit (en bleu):

# Inform the DHCP server of our hostname for DDNS.
pidns.gtg.local
interface eth0
static ip_address=192.168.17.2/24
static routers=192.168.17.1
static domain_name_servers=127.0.0.1

Après j’ai rebooté le Raspberry et magie! On peut faire un ping vers une machine du réseau en utilisant son nom.

Premiers retours

Pour être honnête, je ne pensais pas que plus de 80% des requêtes seraient rejetées. Pour l’instant, il y assez peu d’impacts sur les sites: la plupart des encarts publicitaires ont disparus sans provoquer de dysfonctionnements.

Après quelques heures de fonctionnement, les statistiques sont plutôt impressionnantes:

Pi-hole: statistiques
Pi-hole: statistiques

Conclusion

Facile à installer, facile à configurer, efficace pour tous les appareils d’un réseau. Difficile de ne pas adopter Pi-hole comme serveur DNS domestique.

Leave a Reply

Votre adresse e-mail ne sera pas publiée.

*

code