Installation et configuration de Pi-Hole, le DNS anti-pubs
Introduction
Troisième et dernier article sur le Raspberry Pi 5: l’instllation et la configuration de Pi-Hole, ce merveilleux serveur DNS qui bloque la plupart des publicités et sites pourris. Bien sûr, comme il s’agit d’un blocage via la résolution DNS, les accès par adresse IP sont toujours possibles.
Préparation
Il faut mettre à jour le Raspberry Pi avec la commande suivante:
sudo apt purge && sudo apt autoremove && sudo apt --yes update && sudo apt --yes upgrade && sudo apt clean && sudo apt autoclean && sudo apt autoremove
(Petit conseil: mettez cette commande dans un script bash pour mettre facilement à jour le Raspberry Pi)
Installation
Une fois le mise à jour effectuée, on peut télécharger Pi-Hole: wget -O basic-install.sh https://install.pi-hole.net
.
Ensuite, on lance l’installation: sudo bash basic-install.sh
.
Comme un con, j’ai oublié de prendre des screenshots de cette étape! Je vais utiliser ceux de l’article How to Set Up Pi-hole to Get an Ad-free Life pour expliquer les différents choix à faire.
Une fois le script lancé, il suffit attendre qu’il contrôle tout.On clique sur “OK”.On clique sur “OK” (je recommande de donner quelques brouzoufs, histoire que ce projet dure le plus longtemps possible).Je conseille d’utiliser une IP fixe pour ce serveur. Bien sûr, on peut forcer un serveur DHCP à donner une IP dédiée. On clique sur “Continue”.Je recommande vraiment d’utiliser les serveurs Quad9 car les serveurs sont en Suisse et gérés par une fondation (un petit don ne leur fera pas de mal). J’ai choisi “Filtered, DNSSEC”.On choisit bien sûr “YES” afin d’avoir une belle grosse liste de domaines bloqués dès le départ.On peut choisir de s’en passer mais l’interface est très confortable à utiliser donc autant l’installer.à moins d’avoir déjà un serveur web avec PHP, il n’y a aucun intérêt à ne pas utiliser celui de Pi-Hole.On peut s’en passer mais les logs permettent d’investiguer en cas de blocage à tort.Comme j’exploite moi-même le serveur pour mon réseau, j’ai pris le niveau le plus complet. Bien sûr, on peut voir les requêtes DNS de chaque client!On note le mot de passe! Et après on peut rebooter le Raspberry Pi pour vérifier que tout est correct.Configuration réseau
Fichier /etc/hosts
Comme le Raspberry Pi va servir de résolveur DNS, il doit être capable de s’interroger lui-même.
On va d’abord modifier le fichier /etc/hosts
avec nano (sudo nano /etc/hosts
) pour obtenir cet état:
Il y a un gag marrant, que j’ai vu après 30 minutes de galère: l’adresse loopback est incorrecte! Elle pointe sur 127.0.1.1.
au lieu de 127.0.0.1.
Dans le fichier on ajoutera une nouvelle entrée avec le hostname et le FQDN pointant vers la loopback
Fichier /etc/resolv.conf
Ce fichier permet au système de savoir quel serveur DNS contacter.
Ici, toujours du fait que le Raspberry Pi est résolveur DNS, on va pointer vers l’adresse loopback. On modifie le fichier avec nano sudo nano /etc/resolv.conf
Fichier custom.list
Ce fichier, propre à Pi-Hole, permet de référencer les machines connues du réseau local. L’objectif est de permettre la résolution des noms des machines du réseau local. Bien sûr, si on utilise un serveur DHCP, il est inutile de remplir ce fichier.
On va modifier ce fichier avec nano pour y ajouter toutes les IP fixes du réseau: sudo nano /etc/pihole/hosts/custom.list
Exemple de contenu:
Migration Pi-Hole
Ce court chapitre concerne ceux, comme moi, qui passent de Pi-Hole v5 à v6. Sur la version v5, il faut exporter toutes les informations. Puis, sur la v6, il faut importer le fichier zip obtenu précèdemment. Dans les deux version, l’écran est identique et on y accède par le menu “Teleporter”.
Configuration Pi-Hole
Pour configurer Pi-Hole de zéro, il y a plusieurs étapes à suivre.
Définition des groupes
Ces groupes permettent de savoir quelles règles de filtrage appliquer à quel machine du réseau. On peut, par exemple, imposer des règles ultra-strictes concernant la pornographie aux ordinateurs des plus jeunes et proposer un peu plus de souplesse pour d’autres. Pour mon usage, j’ai créé des groupes par sujet (les pubs google, les pubs twitter, les sites pornos, etc) en deux versions: les domaines refusés (black list) et les domaines autorisés (white list). On bien sûr ne faire que deux groupes “black list” / “white list”.
Configuration des machines
ici on configure une entrée par ordinateur, smartphone ou autre truc connecté avec son nom DNS et son adresse MAC. Puis on lui affecte un ou plusieurs groupes. On peut imaginer qu’un serveur Debian n’aurait accès qu’aux domaines debian.org pour les mises à jour et rien d’autre (évidemment, si on dispose d’un firewall, il vaut mieux y gérer ce genre de configuration).
Ajout des règles
On procède en deux étapes:
- on charge les fichiers contenant tous les domaines à bloquer (voir la page The Big Blocklist Collection) puis on affectera chaque fichier dans son groupe de blocage.
- Si besoin, on rajoute des règles “white list” ou “black list” pour les cas particuliers. Il faut bien sûr ajouter cette règle dans son groupe.
Statistiques
Pi-Hole produit un certain nombre de métriques. La plus spectaculaire étant le nombre de domaines bloqués (plus de 7 millions). On dispose également du nombre de requêtes par machine et du taux de blocage associé.
Logs
Pi-Hole propose bien sûr des logs dont la liste des demandes DNS effectuées et les réponses fournies. Grâce à cela, on peut corriger des blocages à tort ou au contraire compléter la protection. Les lignes en vert représente des requêtes qui ont été autorisées et on peut facilement les exclure avec le bouton “Deny”. A contrario, celles en rouge sont des requêtes refusées, qu’on peut autoriser avec le bouton “Allow”.
Conclusion
Transformer un Raspberry Pi en serveur DNS anti-pubs n’est pas difficile. Seule la configuration initiale demande quelques heures pour une mise en place rigourseuse et efficace. Combiné avec un firewall et un plugin comme uBlock sur les browsers, on réduit drastiquement les publicités et le téléchargement de malwares.