Depuis que mon FAI a décidé de remplacer mon routeur par un nouveau qui n’a plus l’option d’ajout d’une route vers mon serveur de DNS local, j’avais le choix entre activer mon serveur DNS sur Zentyal, ou se lancer avec un nouveau type de serveur DNS, le « Pi-hole« .
Pi-hole est un bloqueur de publicité au niveau du réseau qui agit comme un DNS menteur et éventuellement comme un serveur DHCP3, destiné à être utilisé sur un réseau privé. Il est conçu pour être installé sur des périphériques intégrés dotés de capacités réseau, tels que le Raspberry Pi, mais il peut être utilisé sur d’autres machines exécutant Linux ou dans des environnements virtualisés. (wikipedia)
Mon choix de Pi-hole est du fait qu’il y a plus de fonctionnalités en comparaison avec Zentyal, mais aussi Pi-hole ne demande pas à tourner sur un gros serveur. Un Raspberry Pi suffit.
I. Préliminaire
Pour le matériel, j’ai en ma possession un Raspberry Pi 2B (1 Go de RAM).
$ cat /proc/device-tree/model
Raspberry Pi 2 Model B Rev 1.1
Avec Raspbian comme système d’exploitation.
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.13 (stretch)
Release: 9.13
Codename: stretch
Comme tout serveur, il est fortement recommendé d’utiliser une adresse IP statique.
Voici le contenu du fichier /etc/network/interfaces,
# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and ‘man dhcpcd.conf’# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
Pour appliquer une adresse IP statique sur avec Raspbian et les dérivées de Debian, les modifications sont à apporter dans le fichier /etc/dhcpcd.conf.
# Example static IP configuration:
interface eth0
static ip_address=192.168.0.151/24 #adresse IP statique du serveur Raspbian
#static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.0.1 #adresse IP du modem/routeur
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
Supprimer les commentaires # devant « static ip_address » et « static routers », puis y ajouter respectivement l’adresse IP statique que vous voulez appliquer sur le Raspberry Pi, ainsi que l’adresse IP du routeur de votre FAI.
Une fois les modifications apportées, relancer le service de réseau du Raspberry Pi avec la commande
$ sudo /etc/init.d/networking restart
J’ai choisi cette commande par habitude, sinon la méthode recommandée est celle avec systemcl
$ sudo systemctl restart networking
II. Installation de Pi-hole
Selon votre choix, l’installation de Pi-hole peut se faire en une ou en deux lignes de commande. Vous avez toutes les informations sur la page github du projet.
J’ai choisi la méthode en deux étapes pour avoir une copie du script d’installation.
$ wget -O basic-install.sh https://install.pi-hole.net $ sudo bash basic-install.sh
Ensuite, sélectionner toutes les options par défaut sauf pour le fournisseur de service DNS, auquel j’ai choisi Cloudflare (voir mes notes en bas de l’article en ce qui concerne ce choix).
Ici, il n’est plus nécessaire de reconfigurer l’interface eth0 avec une adresse IP statique, puisqu’on l’a déjà fait plus haut.
Une fois l’installation terminée, récupérer le mot de passe pour accéder à l’interface graphique du serveur Pi-hole.
Si vous n’avez plus le mot de passe par défaut, ou que vous souhaitez un mais personnalisé, la commande ci-dessous lancera la réinitialisation de votre mot de passe. Je vous renvoie à la fin de l’article, dans la partie « commandes utiles », pour comprendre ces options « -a » et « -p ».
$ pihole -a -p
Connectez vous maintenant sur la page de configuration de Pi-hole.
Sur la capture d’écran, avec une petite manipulation d’image, j’ai affiché le mot de passe en clair pour vous montrer que j’ai utilisé celui généré après l’installation de Pi-hole. En vrai, le mot de passe ne s’affiche pas en plein texte.
III. Serveur DNS pour un réseau local
Mon intérêt initial était d’avoir un serveur DNS, qui serait capable de résoudre les noms de domaines en adresse IP, et vice-versa, sur mon réseau local. Mon modem/routeur ne me permet plus de le faire, mais encore, il n’y a pas moyen d’y ajouter un chemin vers mon serveur DNS. De ce fait, la solution la plus simple est de désactiver DHCP et d’utiliser un serveur DHCP/DNS local à la place.
1. Désactivation du DHCP sur le modem/routeur
2. Activation du DHCP sur le serveur Pi-hole
Settings > DHCP > DHCP Settings, cocher « DHCP server enabled ».
3. Nom de domain locale
Ajouter un nom de domaine, qui ne sera visible que localement.
Settings > DHCP > Advanced DHCP Settings > Pi-hole domain name > Domain, puis entrer votre nom de domaine (par exemple: mylab.lan).
En ce qui concerne le nom de domaine, éviter les noms avec pour extension .local
4. UPnP
Et là, surprise.
Les machines virtuelles de mon lab ont reçu automatiquement une adresse FQDN, sans manipulations supplémentaires de ma part, chose que je n’aurai pas eu en utilisant Zentyal.
Le serveur Pi-hole s’en est chargé de le faire, probablement via l’UPnP (technologie que j’ai découvert en fouillant dans les configurations du routeur de mon FAI), en associant le nom d’hôte des machines concernés au nom du domaine choisi (mylab.lan).
5. Ajout manuel d’une entrée DNS
Celà ne change pas le fait que vous avez toujours la possibilité d’y ajouter manuellement une entrée DNS dans Pi-hole.
Dans l’exemple ci-dessous, je veux assigner une addresse IP statique à mon téléphone lorsque je me connecte sur mon réseau local.
Settings > DHCP > DHCP leases. Puis cliquer sur le logo jaune, à la fin de la ligne au même qui correspond à l’IP du téléphone.
Et j’en profite pour lui donner un nom sympa, pour la visibilité dans les logs. Ici, ce n’est pas nécessaire, puisque « ubuntu-phablet » est facilement reconnaissable.
Ajouter ensuite le nom de domain choisi, dans l’enregistrement DNS du serveur Pi-hole.
Local DNS Records > Add a new domain/IP combination.
6. Vérification
Vous devriez pouvoir résoudre tous les noms de domaine des serveurs locaux à partir de n’importe quel machine de votre réseau.
En lançant nslookup, le serveur DNS est bien le Pi-hole qui a l’IP 192.168.0.151.
IV. Extra: blacklist/whitelist et autre
1. Blacklist
Tant qu’on y est, autant en profiter des fonctionnalités de Pi-hole pour « bloquer » la résolution de nom pour certains sites indésirables. J’ai mis le verbe bloquer entre guillemet, puisque ce n’est pas exactement ce que le serveur Pi-hole fait.
Sans rentrer dans les détails, pour chaque URL ajouté à votre blacklist, Pi-hole ne vas pas résoudre le nom de domain vers la bonne adresse IP. De ce fait, la page ne s’affichera pas sur votre réseau. Par contre, Pi-hole est démuni contre les sites internets qui proposent leurs accès avec une adresse IP. Je vous recommande de regarder la vidéo de « Eli the Computer Guy » qui explique comment fonctionne la sécurité DNS sur un serveur Pi-hole.
Avec la configuration par défaut, deux listes y sont déjà configurer et pointent vers la liste des noms de domaine indésirable.
Pour la grande majorité d’entre nous, et particulièrement si vous n’êtes pas sur de savoir ce que vous faites, je recommende vivement à ne pas aller plus loin pour ne pas casser l’accès à internet sur votre réseau par une fausse manipulation.
Si malgré mon avertissement, vous voulez allez plus loin, je peux vous proposer de ne bloquer que les méthodes de suivies (tracking) sur internet.
Copier les liens non barrés du site https://firebog.net/, qui a l’air d’être un bon site de référence en la matière. Puis, coller le tout dans la barre « Address »,
Group Management > Addlists > Adlist group management > Add a new addlist > « Address: »
Mettez à jour Gravity, qui contient la liste des noms de domaines à bloquer ou non.
Par contre, dans l’historique de « Update Gravity (list of blocked domains), j’ai noté à la dernière ligne que le blockage via Pi-hole est désactivé (le message en anglais »Pi-hole blocking is Disabled‘).
Vérifier dans le fichier /etc/pihole/setupVars.conf que l’option de blockage est bien activé:
BLOCKING_ENABLED=true
Puis lancer la commande,
$ pihole enable
[i] Enabling blocking
[✓] Flushing DNS cache
[✓] Pi-hole Enabled
Ensuite, mettez à jour une nouvelle fois « Update Gravity (list of blocked domains) » pour vérifier le résulat.
Et voici une exemple de listes d’URLs bloqués lors de ma visite sur quelques sites internets. Je peux dire que Google et Mozilla sont en haut du podium.
2. Whitelist
Cette liste « blanche » vous permet d’autoriser les machines de votre réseau à accéder aux liens de cette liste, sans être bloqué par les règles du blacklist.
J’ai créé un nom de domaine pour mon serveur Pi-hole (pihole.mylab.lan), par contre, l’accès à la page reste bloqué.
Cependant, il n’y a pas de soucis si j’ajoute /domain à l’URL.
Ce soucis n’est pas grand chose par rapport à ce qui pourrait vous attendre si le serveur n’est pas configuré comme vous le souhaitez.
3. Commandes utiles
Comme tout type de serveur, Pi-hole doit être maintenu à jour, et régulièrement.
$ pihole -up
[i] Checking for updates...
[i] Pi-hole Core: up to date
[i] Web Interface: up to date
[i] FTL: up to date
[✓] Everything is up to date!
Version de Pi-hole,
$ pihole -v
[sudo] password for matakasi:
Pi-hole version is v5.1.2 (Latest: v5.1.2)
AdminLTE version is v5.1.1 (Latest: v5.1.1)
FTL version is v5.2 (Latest: v5.2)
Vérification si le service est actif.
$ pihole status
[✓] DNS service is running
[✓] Pi-hole blocking is Enabled
Si vous avez un doute sur quel commande lancer pour faire tel activité, il suffit juste de taper « pihole » sans argument,
$ pihole
Usage: pihole [options]
Example: 'pihole -w -h'
Add '-h' after specific commands for more information on usage
Whitelist/Blacklist Options:
-w, whitelist Whitelist domain(s)
-b, blacklist Blacklist domain(s)
--regex, regex Regex blacklist domains(s)
--white-regex Regex whitelist domains(s)
--wild, wildcard Wildcard blacklist domain(s)
--white-wild Wildcard whitelist domain(s)
Add '-h' for more info on whitelist/blacklist usage
[...]
Je vous renvoie sur cette page pour avoir la liste des commandes disponibles avec des exemples.
4. Sauvegarde des configurations de Pi-hole et désinstallation du programme
La sauvegarde de configurations n’a jamais été une mauvaise chose. Voici deux exemples concrets.
- Vous décidez de désinstaller Pi-hole, puis quelques heures/jours/semaines plus tard, vous avez regretté votre geste.
- Vous avez supprimé certaines listes du blacklist/white liste, mais que vous n’avez plus la trace des modifications effectuées
La sauvegarde (backup) ou et la restauration (restore) du fichier de configuraiton de Pi-hole se fait dans,
Settings > Teleporter
Pour supprimer définitivement Pi-hole du Raspberry Pi, lancer la commande
$ pihole uninstall
5. Cloudflare: DNS public
J’avoue que par habitude, j’utilise le serveur de DNS public de Google (8.8.8.8, ou 8.8.4.4) pour mes exercices de réseau. Depuis que j’ai monté le serveur pi-hole, j’ai entendu parler de Cloudflare, pour les raisons suivantes.
Cloudflare s’est fait entendre pour avoir défendu des valeurs de liberté d’expression (wikipedia)
Mais aussi,
Privacy is another major highlight. Cloudflare doesn’t just promise that it won’t use your browsing data to serve ads; it commits that it will never write the querying IP address (yours) to disk. Any logs that do exist will be deleted within 24 hours. And these claims aren’t just reassuring words on a website. Cloudflare has retained KPMG to audit its practices annually and produce a public report to confirm the company is delivering on its promises. (techradar)
Pour faire court, Cloudflare nous promets de ne garder aucune trace de nos IP sur leurs serveurs. Si c’est le cas, ils les suppriment en moins de 24 heures.
Et l’adresse IP est aussi facilement mémorisable que le DNS de google: 1.1.1.1 et/ou 1.0.0.1.
De plus, ils ont rajouté un serveur dédié pour filtrer les contenus pour adulte, en utilisant les DNS: 1.1.1.2 (1.0.0.2) ou 1.1.1.3 (1.0.0.3).
Et voilà, j’espère qu’à partir de maintenant, vous aussi vous allez utiliser Cloudflare pour votre réseau.
Sources
Checking Your Raspberry Pi Revision Number & Board Version
Configuration d’un serveur DNS-DHCP avec Zentyal
Quick and Easy Pi-hole Setup 2020
Block lists (firebog.net)
Raspberry Pi – Setup Pi Hole for DNS Security
Running a web server while using Pi Hole
Keeps falling back to “Pi-hole blocking is Disabled”
What Really Happens On Your Network? Part Eight
The pihole Command With Examples
Best free and public DNS servers in 2020















