Pi-Hole : un bloqueur de pubs pour tout votre réseau

I. Présentation

On a tous fait cela dès le démarrage de notre navigateur favori : installer un adblocker (bloqueur de pubs). Par contre, en utilisant le navigateur de la télé ou un appareil Android, etc... C’est un peu plus galère de trouver quelque chose de correct. Et puis, s’il y a plusieurs appareils dans la maison, ben il faut recommencer l’opération et ce, pour chaque navigateur !

Dans ce tutoriel, nous allons donc résoudre une problématique simple : fournir un bloqueur de publicité à l'ensemble des machines de notre réseau et le gérer de manière centralisée.

Pour cela, nous allons utiliser un outil développé pour cet usage : Pi-Hole

Pi-Hole est un DNS « sinkhole », comprendre « entonnoir ». Il va utiliser les requêtes DNS faites par vos appareils pour valider ou non le trafic et ainsi vous mettre à l’abri des adresses et domaines connus comme diffusant de la pub, des malwares, etc.

Pour rappel, DNS veut dire Domain Name System, soit système de noms de domaine. Alors qu’est-ce qu’un nom de domaine me direz-vous? Et bien par exemple, « it-connect.fr » en est un exemple. Un nom de domaine est un identifiant unique pour une ou plusieurs ressources, généralement administrées par une seule entité.

Le nom de la machine plus le nom de domaine est appelé FQDN pour Fully Qualified Domain Name ou nom de domaine pleinement qualifié. Il permet d’atteindre une machine précise juste en « l’appelant ». Par exemple, lorsque vous tapez « www.trucmachin.com », vous appelez en faite la machine « www » qui appartient au domaine « trucmachin.com ».

Sauf que nos ordinateurs eux ne comprennent pas le langage des humains, tout ce qu’ils comprennent c’est le binaire et il ont donc besoin d’une adresse IP, qui est l’équivalent d’un numéro de téléphone, pour joindre le site Internet.

Donc, à chaque fois que vous entrez le nom d’un site Internet dans votre navigateur, ou que vos cliquez sur un lien, votre ordinateur commence par demander à un serveur DNS l’adresse IP qui correspond à ce nom.

Pi-Hole va donc inspecter ces demandes (il y en a des centaines par jour!) et automatiquement bloquer celles connues pour héberger des publicités ou même des fichiers malveillants.

II. Installation de Pi-Hole

Avec un nom comme Pi-Hole, on peut à juste titre supposer qu’il faut avoir un Raspberry-Pi... Mais ce n’est pas tout à fait vrai. Pi-Hole peut être installé sur n’importe quel ordinateur Linux (Debian, Fedora, Rocky, Ubuntu, etc.).

Par contre, il faut garder en tête que cet appareil devra tourner 24h/24 pour une raison simple : pas de DNS, pas d’Internet ! Le Raspberry est donc une bonne idée puisqu’il ne consomme presque rien en terme d’énergie.

Pour l’installation, rien de plus simple, il suffit de se connecter en SSH à votre machine Linux puis de rentrer la commande suivante en tant que "root" :

curl -sSL https://install.pi-hole.net | bash

Note : en temps normal, il est déconseillé de « piper » un script sans savoir ce qu’il fait au préalable. Si vous n’êtes pas sûr, rendez-vous sur la page avec un navigateur ou téléchargez le contenu dans un fichier.

Note bis : sur les version minimales de Debian 11, Curl n'est pas installé, il faut donc le faire manuellement avec la commande apt-get install curl avant de taper la commande ci-dessus.

Une fois le script lancé, une série de test sera fait, l'installation en elle-même se fera toute seule :

Installation de Pi-Hole
Installation de Pi-Hole

Une fois l’installation terminée, vous arriverez à cet écran :

Écran de démarrage Pi-Hole
Écran de démarrage Pi-Hole

Note: si vous êtes en DHCP au niveau de votre machine, vous aurez un message d'avertissement à ce propos. Bien entendu, pour une utilisation dans les règles, il est plus que conseillé d'assigner une IP fixe à votre machine.

Suite à cet écran, vous aurez quelques messages d'informations puis vous arriverez à l'assistant de configuration qui vous demandera dans un premier temps à quel serveur DNS Pi-Hole transmettra les demandes qui transiterons par lui. Pour ma part, je choisi Quad9 qui dispose d'un charte pour le respect de la vie privée des utilisateurs.

Choix du DNS - Pi-Hole
Choix du DNS - Pi-Hole

Note : si vous êtes en entreprise, il y a de fortes chances que le serveur DNS actuel soit le contrôleur de domaine Active Directory. Pas de soucis avec cela, il sera possible par la suite de spécifier à Pi-Hole un redirecteur conditionnel pour un domaine de son choix. Typiquement, vous pourrez rediriger toute demande concernant votre domaine local vers votre serveur DNS.

Vous remarquerez que certains choix disposent d'une option DNSSEC. De base, le protocole DNS n'est pas sécurisé (il n'as pas été conçu avec cette volonté à l'époque), DNSSEC viens résoudre ce problème en apportant une couche de sécurité par le chiffrement et la signature des échanges, vous trouverez toutes les explications sur l'article correspondant : Sécurité DNS

Un bloqueur de publicité quel qu'il soit se base sur une ou des listes pour faire son travail. De base, Pi-Hole est fourni avec une seule liste, sélectionnez là; vous pourrez en rajouter par la suite.

Viens la question à propos de l’interface web, son installation est facultative, l'outil disposant de sa propre ligne de commande pour le management et la visualisation. Mais cette interface étant plutôt agréable et bien faite, je vous conseille de l'installer en même temps :

Si vous installez Pi-Hole sur une machine disposant déjà d'un serveur Web, il est possible de répondre "non" à la question suivante. Attention toutefois, il est nécessaire de disposer de PHP et de plusieurs modules pour que cela soit fonctionnel. Dans le cas contraire, lighttpd sera installé avec tous les modules nécessaires.

On vous demande ensuite si vous souhaitez enregistrer les demandes DNS, là c'est à vous de voir. Si vous souhaitez garder un historique, alors mettez oui, sinon, le contraire mais vous perdrez une partie des fonctionnalités (voir écran suivant).

Pour son interface web, Pi-Hole utilise une fonction de son cru nommée FTLDNS qui fourni une API et génère des statistiques à partir des requêtes DNS. Cette fonction peut inclure un mode "vie privée" qui masquera les domaines demandés, les clients à l'origine de cette demande, ou les deux. Pratique si on veut faire du monitoring sans pour autant empiéter sur la vie privée des personnes ou tout simplement si on veut respecter les règlements en la matière dans le cas de l'utilisation pour un réseau public.

Choix du niveau de vie privée

Une fois cette dernière question répondue, le script va faire ce qu'il doit, à savoir télécharger les dépôts GitHub et configurer Pi-Hole. Au terme de l'installation, un écran récapitulatif s'affichera avec les infos importantes :

Écran récapitulatif de l'installation

Notez bien le mot de passe pour l'interface web ainsi que les informations réseau. Il faut désormais configurer le service DHCP de l'endroit où nous nous trouvons.

III. Configuration du DHCP

Pour fonctionner, Pi-Hole a donc besoin de "résoudre" les requêtes DNS des clients, il faut donc que ces derniers puisse savoir que c'est à lui qu'il faut les envoyer. Pour cela, plusieurs solutions :

  • Modifier les paramètres DNS dans le serveur DHCP en fonction chez vous (par exemple : votre Box)
  • Désactiver ce serveur et utiliser celui fourni par Pi-Hole
  • Modifier manuellement chaque appareil pour qu'il utilise Pi-Hole en tant que DNS

Je choisis personnellement la première solution. En effet, il y a de fortes chances que vous disposiez d'un serveur DHCP là où vous vous trouvez (généralement, votre box). Inutile donc de s'embêter plus que ça.

Comme il existe un grand nombre de possibilités, entre les différentes box opérateur (que je ne connais pas toutes) et ceux qui ont un routeur perso, je ne vais pas mettre de capture d'écran pour ces modifications. Dans tous les cas, il faudra vous rendre dans les paramètres du DHCP et modifier le paramètre "DNS" pour y mettre l'adresse IP de votre Pi-Hole.

Une fois ceci fait, s'il y a des appareils qui ont été allumés avant, ils auront gardé les anciens paramètres, il faudra donc relancer la demande de configuration.

Sur les postes Windows, avec une invite de commandes :

ipconfig /renew

Sur un poste Linux :

dhclient

Pour tout autre appareil, il faudra les éteindre et les rallumer.

Ils devraient donc obtenir les bon paramètres, pour le vérifier :

ipconfig /all

Vous devriez avoir dans le champ DNS l'adresse de votre Pi-Hole, pour moi 192.168.1.42 :

III. Utilisation de l'interface web Pi-Hole

Pour faciliter son administration, Pi-Hole bénéficie d'une interface web plutôt bien faite. Conviviale et accessible, elle vous permet de :

  • Visualiser en temps réel le nombre de requêtes, celles qui sont bloquées, etc.
  • Gérer votre Whitelist et Blacklist
  • Ajouter des entrées statiques, des alias, etc.
  • Ajouter des listes
  • Et bien d'autres fonctions!

Pour ma part, je vais ajouter une liste de blocage. Comme on l'a vu plus haut, une seule liste a été installée en même temps que le soft. Il existe beaucoup de listes pour les sites de pubs mais il est préférable d'en choisir au moins une spécifique au pays dans lequel on vit. Une des listes les plus connue est EasyList et l'une d'entre elle est spécifique à la France : EasyList-ListFR

Pour l'ajouter, il faut tout d'abord se connecter à l'interface admin : http://<ip_du_PiHole>/admin

Le mot de passe administrateur a été généré auparavant (voir capture de fin d'installation), il suffit donc de le renseigner pour accéder à l'interface :

Interface de Pi-Hole
Interface de Pi-Hole

On voit par exemple qu'il y a deux clients connectés au Pi-Hole, que celui-ci a traité 442 demandes et que 8 d'entre elles ont été bloquées. Ces graphiques peuvent être une bonne source d'information, surtout dans un cadre professionnel.

Pour ajouter notre liste, direction le menu "Group Management" et "Adlists" :

On voit bien notre première liste "StevenBlack", pour ajouter la notre, copiez le lien que je vous ai donné plus haut et insérez-le dans le champ "Address", pour la description, je choisis de mettre le nom de la liste :

Ajouter une liste dans Pi-Hole
Ajouter une liste dans Pi-Hole

Il nous reste plus qu'a cliquer sur "Add" pour l'ajouter. Afin de l'activer, il est nécessaire de réaliser une étape supplémentaire pour "avertir" Pi-Hole de prendre en charge cette liste. Pour cela :

  • Soit vous utilisez la ligne de commande intégrée
  • Soit l'interface web

Je choisis personnellement la deuxième car si vous avez bien observé, le lien vers le script PHP qui réalise la mise à jour est directement sur la page où nous sommes (le mot "online"). Il suffit donc de cliquer dessus, ce qui vous amènera sur une page où seul une option s'offrira à vous :

La page affichera le résultat du script une fois terminé, ce qui signifiera que la liste a été prise en compte (sauf message d'erreur bien entendu).

Comme annoncé en début de tuto, Pi-Hole permet aussi de bloquer les domaines connus pour distribuer des malwares, pour renforcer cette fonctionnalité, je vous propose d'ajouter également la  liste de domaine distribuée par Abuse.ch qui est régulièrement mise à jour, cela renforcera significativement la sécurité de votre réseau, elle est disponible à cette adresse.

Vous pouvez bien entendu ajouter toute liste qui vous paraîtrait pertinente ou gérer directement votre Blacklist manuellement dans le menu correspondant.

IV. Tests de Pi-Hole

Maintenant que tout est en place, il suffit de tester la solution pour s'assurer qu'elle fonctionne correctement.

Je vais par exemple tenter de joindre le domaine http://admin.gentbcn.org/ qui est sur la liste de Abuse.ch car connu comme hébergeant des malwares :

Visiblement, j'ai été bloqué quelque part, pour s'assurer que c'est bien le Pi-Hole qui a fait le job, nous pouvons consulter le journal de requêtes dans l’interface web "Query Log" pour voir que c'est bien un blocage issu d'une entrée de liste :

V. Conclusion

Nous avons vu dans ce tuto comment mettre en place de manière simple non seulement un serveur DNS qui va éliminer la plupart des publicités pour le confort de navigation, mais aussi ajouter une couche de sécurité en bloquant les domaines de phishing ou diffusant des malwares.

Le tout gratuitement et de manière économique si installé sur un Raspberry-Pi (d'un point de vue consommation électrique).

Je n'aurais qu'une requête à formuler : n'oubliez pas d'ajouter it-connect.fr à la liste des exclusions pour nous soutenir ! 😉

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Duchemin

Administrateur réseau/sécu, je suis aussi formateur en centre; j'alterne donc entre utilisation et partage de mes compétences, mes deux passions. Adepte de la secte Cisco, je suis également à l’aise sur Linux et administrateur de plusieurs serveurs Windows.

Nombre de posts de cet auteur : 12.Voir tous les posts

17 thoughts on “Pi-Hole : un bloqueur de pubs pour tout votre réseau

  • L’outil semble intéressant, je vais le tester à l’occasion. La rubrique Queries logs contient elle toutes les requêtes DNS ou seulement ce qui a été bloqué ?

    Répondre
  • Bonjour Eric,

    Merci pour la commentaire!

    Le menu Query Logs enregistre toutes les requêtes DNS et affiche l’action appliquée à celle-ci.
    Au plaisir!

    Répondre
    • Bonjour Florian,

      Je trouve votre article très intéressant et très complet excepté pour le type de RPI que l’on peut utiliser.

      Je pose la question car j’ai un RPI PICO W à la maison dans un coin d’un tiroir.

      Est ce suffisant ?

      Merci.

      Répondre
      • Bonjour Philippe,

        Merci pour votre avis!

        Pi-Hole étant très peu demandeur de ressources (excepté si installé sur de grand réseaux bien sur), il peut être installé sur tous les modèle de RPI.

        Sur Reddit, un des développeur de PiHole indique avoir son installation sur un RPI Pico, cela dit je ne l’ai jamais tenté…

        Répondre
  • Merci pour cet article, a essayer rapidement !!

    Répondre
  • Merci pour l’article !
    Perso, j’utilise NextDNS (20€/an) pour ces raisons :
    – Rien à installer et à maintenir chez moi (plus simple à mettre en place)
    – Possibilité de gérer des profils différents (enfant, parents etc)
    – Fonctionne à l’extérieur de la maison (DNS over TLS et DNS over HTTPS)
    – On peut accéder aux logs (ou ne pas en avoir)
    – Supporte la plupart des listes d’exclusion connues ainsi que des types prédéfinis (porno)

    Répondre
    • Bonjour Olivier,

      Merci pour le commentaire!

      Effectivement, il existe des solutions clés en main assez intéressantes tel que NextDNS ou OpenDNS.

      Mais après, le plaisir du DIY…

      Répondre
  • 👋

    Pour afficher les options de serveur DNS depuis une 4G-Box, depuis la page DHCP, entrer la ligne suivante dans la console et valider :

    $(‘#dhcp_dns’).css(‘display’, ‘block’);

    Répondre
  • J’ai quand même renseigne 8.8.8.8 en DNS secondaire sur mon router. au cas où mon raspberry soit Down. Sauf que j’ai l’impression qu’à cause de ça, l’adresse de mon pi-hole est squeezer et google passe premier..

    Répondre
    • J’avais fait pareil en entrant le DNS de mon FAI. Ça marché comme il faut chez moi.
      Mais quand j’ai voulu faire pareil au travail, ça ne le faisait plus. J’ai dû entrer deux fois l’IP du Pi-Hole.

      Au final, ça dépend peut-être des routeurs (box).

      Répondre
      • Bonjour merwan,

        Je n’ai pas eu ce problème sur ma Freebox. Merci MickGe pour le retour.

        Il semblerait effectivement que cela dépende donc du type de box. Je sais que certaines box ont un DHCP un peu particulier, dans le sens où ils diffusent des options particulières pour la TV notamment donc de là à ce qu’ils soient « bridés »… Ou alors certaines box ne prennent pas en compte les adresses locales…

        Un test à faire est d’utiliser du coup le DHCP intégré au PiHole et de désactiver celui de la box. Attention toutefois, comme indiqué plus haut, si on a un décodeur TV, cela peut poser des soucis.

        Répondre
  • Sympa, est ce que ca fonctionne aussi pour les pubs sur les flux video type youtube ?

    Les whitelist permettent d’autoriser certaines pubs ou bien elles permettent l’apparition des pubs sur un site en particulier style http://www.it-connect.fr ?

    Répondre
    • Bonjour Romain,

      La réponse à ces deux question est « ça dépends »…

      Pi-Hole fonctionnant au niveau DNS, ils bloque (ou pas) les domaines au moment de leur requête.

      Pour Youtube, il n’y a pas de différences d’hébergement d’une pub ou d’une vidéo, donc impossible de bloquer celles-ci.

      Pour it-connect, il semblerait que les encarts soient hébergés sur le domaine donc en whitelistant it-connect.fr, on permet l’affichage des pubs mais uniquement celle qui sont hébergés (pas celles qui font appel à d’autres domaines de publicitaire qui du coup se retrouvent sur la blocklist).

      Répondre
  • Bonsoir
    Dommage que la livebox de Orange est bridé !

    Répondre

Répondre à Florian Duchemin Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.