Machine Virtuelle PIHOLE

Rédaction le 12/12/2018
Mise à jour le 04/05/2019

Attention : ne surtout pas faire de sauvegarde ou de snapshot de cette VM en marche. Il faut d’abord l’arrêter. L’effet de bord est que le plugin Jeedom pour la piloter ne fonctionnera plus.

Ajout 05/2019 : Pensez à mettre à jour votre pihole par la commande suivante dans votre console et mettez à jour vos filtres :

pihole -up

Votre configuration ne sera perdue !
Puis cliquez sur Update dans la page de droite ! (cela peut être long).

Ou comment gérer le filtrage de la publicité depuis Jeedom ou sans d’ailleurs ! On en profitera lors de la mise en place de ce serveur DNS pour mettre en place un moyen aisé d’accéder à ses IP locales comme ne plus avoir à retenu 192.158.2.1 pour le routeur et rentrer http://routeur.maison par exemple !

Pré-requis :

  • comprendre ce qu’est PIHOLE : https://pi-hole.net/
  • avoir son serveur domotique avec Proxmox ou un autre moyen de virtualisation à disposition ;
  • avoir son tableau d’adresses IP sur son réseau local sous le bras (voir l’article) ;
  • facultatif : un téléphone Android avec l’application pihole installée ;
  • facultatifs : avoir Jeedom installé, un plugin de notifications type Telegram ou autre ; le plugin pihole installé depuis le market (gratuit).

Installation de PIHOLE

Traduit de l’anglais ; PIHOLE est une application de blocage de traqueur internet et de publicité au niveau du réseau Linux qui agit comme une fosse DNS, destinée à être utilisée sur son réseau local – privé afin d’améliorer le confort de lisibilité des pages ou éviter le tracking par les GAFA par exemple…

Je ne donnerai pas mon avis sur ça mais je vous propose une alternative intéressante pour toute la famille, surtout avec Jeedom. Cela permet d’éviter un plugin type adblock sur votre navigateur par exemple. Attention, toutefois car de nombreuses recherches Google, de visualisation de sites internet ne fonctionneront plus. C’est aussi la raison qui fait que j’ai mis en place un pilotage Jeedom ou Android pour tout cela.

Suivez le tutoriel de la machine virtuelle Apache dans sa partie générique (relire l’article) pour installer une machine virtuelle dédiée à PIHOLE dont voici les paramètres (là encore après quelques semaines d’utilisation) :

  • 1 core – 1 socket et encore si on pouvait mettre moins (3% tout le temps !) ;
  • 512 à 1024 Mo de mémoire vive ;
  • 8 Go de disque dur.
Ma VM PIHOLE – DNSMASQ

N’oubliez pas de récupérer votre IP, l’adresse MAC, l’ajout au serveur DHCP de votre routeur (on y reviendra plus tard pour fixer la partie DNS), le login et le mot de passe de votre super-utilisateur pour tout monitoring et direction notre client SSH préféré pour installer tout cela.

Reprenez le fil de la machine virtuelle Apache dans sa partie générique et on se retrouve ensuite :

Déroulez la partie générique de l’installation Debian9 sous Proxmox

https://jeedom-facile.fr/index.php/2018/12/06/machine-virtuelle-apache/

Partie générique de la machine virtuelle

Ensuite, direction votre client SSH connecté à l’IP de votre machine virtuelle PIHOLE, votre utilisateur – “super-utilisateur” connecté.

J’ai fait le choix de fixer l’adresse IP depuis la machine virtuelle pour éviter toute surprise et du coup fixer les serveurs DNS que nous allons utiliser ; dans mon cas ceux d’Orange.

Voir la liste des serveurs DNS :

https://www.commentcamarche.net/faq/1496-serveurs-dns-des-principaux-fai

sudo nano /etc/network/interfaces

Adaptez ce texte en fonction du nom de votre interface (ici ens18), l’adresse IP de votre machine virtuelle PIHOLE (X.X), celle de votre passerelle (routeur habituellement) (X.Y) et les 2 serveurs DNS que vous souhaitez utiliser pour votre trafic internet au format A.B.C.D
# The primary network interface
allow-hotplug ens18
# iface ens18 inet dhcp
iface ens18 inet static
    address 192.168.X.X
    netmask 255.255.255.0
    gateway 192.168.X.Y
    dns-nameservers DNS1 DNS2

Ensuite mise à jour et installation de curl pour réaliser l’installation :

sudo apt update -y && sudo apt upgrade -y && sudo apt install curl -y

Mise à jour et curl

Puis pihole depuis le site officiel :

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

Pas besoin de le lancer en sudo, le script le gère tout seul
La barre verticale = ALT GT + 6

Déroulez l’installation graphique pour :

  • il vous indique qu’il faut que votre IP soit statique – nous l’avons fait plus haut ;
  • choisissez l’interface de filtrage – ici l’Ethernet ;
  • choisissez le protocole internet choisi, je n’indique que l’IPV4 personnellement ;
  • choisissez Custom (ou si vous savez ce que vous faites, do-it !) pour indiquer les serveurs DNS de sortie que vous avez mis dans le fichier interfaces plus haut avec le bon format ;
  • validez !

Vous devriez arriver à la console avec un résumé de votre installation indiquant le login “admin” et le mot de passe de votre administration pihole.

Avant de continuer, j’ai fait le choix d’ajouter un pare-feu logiciel sur cette machine virtuelle avec :

sudo apt-get install -y ufw
sudo ufw allow http
sudo ufw allow 53

On installe ufw (firewall) puis on autorise le trafic sur le port HTTP (80) et DNS (53).

Logguez-vous dans l’interface de votre pihole avec votre navigateur web à l’adresse http://ipvmpihole (à remplacer par l’IP adéquate) :

Forcément la copie d’écran ici est un peu “fausse” car cela fait plusieurs jours qu’il tourne. On y retrouvera (car vous n’avez pas encore fini votre installation) :

  • le nombre de clients connectés ;
  • le nombre de requêtes bloquées ;
  • le pourcentage bloqué ;
  • les domaines dans la liste de blocage ;
  • l’état de santé de pihole ; etc.
Logguez-vous avec la fonction Login et le mot de passe noté lors de l’installation
Forcément il y a plus d’options !

Là encore, vous pouvez conserver la liste d’origine de blocage ou bien la compléter. Rendez-vous dans l’onglet Settings / Blocklists puis dans le champ “Enter one URL per line to add new blocklists” ajoutez ces lignes que j’ai groupées par type de filtrage en retirant les premières lignes de votre copier-coller !

  • Suspicious :
https://hosts-file.net/grm.txt
https://reddestdream.github.io/Projects/MinimalHosts/etc/MinimalHostsBlocker/minimalhosts
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/KADhosts/hosts
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/add.Spam/hosts
https://v.firebog.net/hosts/static/w3kbl.txt
  • Advertising :
https://adaway.org/hosts.txt
https://v.firebog.net/hosts/AdguardDNS.txt
https://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt
https://hosts-file.net/ad_servers.txt
https://v.firebog.net/hosts/Easylist.txt
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/SpotifyAds/hosts
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/UncheckyAds/hosts
  • Tracking :
https://v.firebog.net/hosts/Airelle-trc.txt
https://v.firebog.net/hosts/Easyprivacy.txt
https://v.firebog.net/hosts/Prigent-Ads.txt
https://raw.githubusercontent.com/quidsup/notrack/master/trackers.txt
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/add.2o7Net/hosts
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/tyzbit/hosts
  • Malicious :
https://v.firebog.net/hosts/Airelle-hrsk.txt
https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt
https://mirror1.malwaredomains.com/files/justdomains
https://hosts-file.net/exp.txt
https://hosts-file.net/emd.txt
https://hosts-file.net/psh.txt
https://mirror.cedia.org.ec/malwaredomains/immortal_domains.txt
https://www.malwaredomainlist.com/hostslist/hosts.txt
https://bitbucket.org/ethanr/dns-blacklists/raw/8575c9f96e5b4a1308f2f12394abd86d0927a4a0/bad_lists/Mandiant_APT1_Report_Appendix_D.txt
https://v.firebog.net/hosts/Prigent-Malware.txt
https://v.firebog.net/hosts/Prigent-Phishing.txt
https://raw.githubusercontent.com/quidsup/notrack/master/malicious-sites.txt
https://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt
https://v.firebog.net/hosts/Shalla-mal.txt
https://raw.githubusercontent.com/StevenBlack/hosts/master/data/add.Risk/hosts
https://zeustracker.abuse.ch/blocklist.php?download=domainblocklist
  • Crypto :
https://raw.githubusercontent.com/ZeroDot1/CoinBlockerLists/master/hosts

Attention, toutefois car la liste ici est conséquente et il ne faut pas s’étonner derrière d’avoir quelques problèmes de visualisation internet.

Voici la liste blanche que j’ai mise en place – onglet White List par exemple après quelques jours d’utilisation. En effet, je rencontrais des problèmes pour télécharger les sous-titres de série, faire fonctionner les tablettes Android, etc :

  • analytics.google.com
  • cdnjs.cloudflare.com
  • opensubtitles.org
  • ssl.google-analytics.com
  • ssl.gstatic.com
  • stats.g.doubleclick.net

Vous retrouvez dans l’onglet DNS les 2 serveurs de votre FAI précédemment configurés :

Custom 1 et 2 sont vos serveurs DNS FAI

Récupérez la clé API de votre installation PIHOLE dans l’onglet API/Web Interface en cliquant sur le bouton “Show API Token” et en acceptant le faire qu’elle est unique !

Récupération de l’API PIHOLE

Ensuite, il faut indiquer à notre réseau le nouveau serveur de la maison ! Oui car tous les équipements utilisent pour l’instant celui de votre routeur qui repart vers les DNS de votre fournisseur internet.

Rendez-vous dans l’onglet DHCP du réseau local pour le routeur Asus :

Le serveur DNS devient la VM PIHOLE pour votre routeur – Appliquez / Sauvegardez la configuration !

De cette manière, pas besoin d’indiquer à chaque équipement que le serveur DNS est la machine virtuelle PIHOLE. Le routeur sera client du serveur DNS PIHOLE et donc chaque équipement s’adressera au routeur qui renverra à PIHOLE.

Quelques commandes fort utiles pour forcer le DNS au cas où :

  • sous Windows :
    • ouvrez une invite de commandes (Démarrer/Exécuter + CMD) ;
    • ipconfig /flushdns pour rafraichir le serveur DNS ;
    • nslookup www.google.com vous retournera le serveur DNS local (pihole) ;
  • sous Linux :
    • dig www.google.com idem !

Sauvegardez votre machine virtuelle après l’avoir éteinte et ne prenez surtout pas de SNAPSHOT avec ! Cela a pour effet de casser le lien avec le plugin Jeedom sinon. N’oubliez pas de la rallumer sinon votre trafic internet risque d’avoir quelques soucis…

Application Android

Là encore, le choix d’un pilotage aisé est pratique. Cette partie sera pour Android.

Téléchargez l’application depuis le Playstore Android :

https://play.google.com/store/apps/details?id=com.joseaviles.Pi_Hole

De quoi échanger avec pihole depuis votre téléphone

Quelques copies d’écran mais il faut indiquer l’API dans le champ Token du menu Settings avant ! Personnellement, je peux y accéder à distance si besoin par le VPN ou en local par mon Wifi (voir l’article dédié).

Page de l’application – Résumé
Page de l’application – Paramètres

Dans cette page, entrez l’API. Notez que vous pouvez piloter en cliquant sur le curseur (Pi-hole ad blocked) pour activer ou non pihole ; mais ce n’est pas très pratique quand même ; seconde solution alors !

Champ API + activation de pihole depuis l’application

Le pilotage depuis Jeedom

Là encore Jeedom s’impose pour son côté pratique.

On installe le plugin du même nom :

Ajout du plugin piHole

Et on le configure (pas de dépendance à installer) en cliquant sur le bouton ajouter :

  • le nom de votre pihole (pihole ça suffira, je n’en ai pas 40 !) ;
  • l’IP du serveur – ma machine virtuelle PIHOLE ;
  • l’API (le truc super long que vous avez récupéré plus haut) ;
  • on sauvegarde !
Configuration du plugin et l’objet Pihole

Profitez pour noter dans l’onglet commandes les ID :

  • Activer ;
  • Désactiver ;
  • Statut.

Il faut pour cela cliquer sur l’engrenage et récupérer l’ID. Profitez-en pour voir que vous avez accès à toutes les statistiques de PIHOLE en direct, pratique !

Complet non !
L’ID est présent dans Général

On ajoute un interrupteur par Domowidget (relire l’article) avec les ID en question : Etat, On, Off. Bien pratique pour désactiver rapidement la publicité !

Mais à tous les coups, on va oublier ! (ou madame va oublier ce qui est bien normal car quand on désactive le temps d’un cashback ou une recherche internet avec publicité, ça sort de la tête !).

Pour cela :

  • ajouter un scénario (sans déclencheur) qui va réactiver pihole si vous ne l’avez pas réactiver 1h après :
Scénario de réactivation de pihole
  • ajoutez quelques commandes après l’action Désactiver dans votre objet Pihole en cliquant sur l’engrenage ; Configuration :
On informe et on relance dans 1h en cas de désactivation
  • faire de même alors pour l’activation pour confirmer :
On informe et on confirme que c’est bien réactivé !

Et vous voilà avec un filtrage de publicité piloté depuis Jeedom et Android.

Note : interdiction de “snapshot” avec pihole qui casse totalement le pilotage par plugin. Cela a été remonté sur le forum mais semble être plus un problème propre à pihole et à sa virtualisation.

Bonus : ne plus avoir à se souvenir d’IP mais de “petits noms” pour son réseau local

Comme nous l’avons fait pour le sous-domaine / domaine, nous pouvons mettre en place un masque DNS pour le réseau local (dnsmasq). Bien plus pratique de taper router.home que 192.168.2.1 (et encore là c’est le routeur c’est facile !).

Pour cela, après avoir ouvert votre client SSH sur la machine virtuelle PIHOLE :

echo “addn-hosts=/etc/pihole/lan.list” | sudo tee /etc/dnsmasq.d/02-lan.conf

sudo nano /etc/pihole/lan.list

Editez alors votre fichier avec le formalisme suivant :
IP sousdomaine.domaine sousdomaine puis à la ligne
ce qui donne :
192.168.2.1     router.home       router
192.168.2.80    proxmox.home    proxmox
192.168.2.239   qnap.home       qnap
192.168.2.90    jeedom.home     jeedom
etc !

Il faut ensuite relancer le service par :

sudo pihole restartdns

Possible aussi depuis l’interface web de pihole dans l’onglet Settings

Testez dans votre navigateur préféré ! http://router.home par exemple :-).

De même, vous pouvez entre dans tous les fichiers que vous utilisez : client SSH, fichiers de configuration Apache etc.

Profitez-en pour mettre à jour votre Excel de suivi de réseau si vous êtes un adepte ! (relire l’article).

Pensez à la sauvegarder de nouveau le cas échéant après l’avoir éteint.

Voilà, article qui peut paraître éloigné de Jeedom mais on comprend vite l’intérêt ! La notification et le pilotage d’un filtrage de publicités, trackers pour tout le monde dans la maison.

La conclusion de cet article !

Si vous avez aimé cet article, faites-le savoir, partagez-le ! Et n’hésitez pas à me supporter 🙂

Merci à vous !

One thought on “Machine Virtuelle PIHOLE

  1. Salut Benjamin,

    J’ai réussi avec succès la partie vm apache et connection https 🙂
    j’aimerai bien mettre ne place pi-Hole mais je tâtonne encore.
    Est-il conseillé d’installer pi-Hole sur la VM apache?
    J’ai mis 512 de ram est ce assez pour apache et pi-Hole?

    Merci

    @++

    1. Regarde la page résumé de ta VM, tu verras sur le graphique le rapport de la mémoire utilisée et totale.
      Avoir pihole en accès extérieur, cela rapporte quoi ?

  2. Je me suis mal exprimé lol 🙂
    Pour le moment j’ai pas installé pi-Hole j’ai juste installé la vm Apache et mis en place les certificats et nom de domaine pour jeedom et d’autre besoin perso.
    Du coup je me renseigne pour pi-Hole mais j’avoue pas bien saisir ( c’est tout nouveau lol)
    Enfaite pi-Hole se place entre la vm apache pour les certificats et les navigateurs de la maison ?
    Du coup c’est mieux sur une vm indépendante ?
    Merci 🙂

    1. Euh l’article explique très bien ce que ça fait et OUI, c’est un VM indépendante. C’est tout l’intérêt de diviser tes services en cas de pépin ! 😉

      En gros avant tu avais adblock sur chaque navigateur ? Là c’est partout dans la maison… (pour résumer car pihole ne fait que du nettoyage de page html…).

  3. Salut j’ai mis en place le tout comme indiqué avec mon dns fournisseur et meme le dns Quad9 mais je n’arrie jamais a accèder à internet quand je met le l’ip de pihole dans mon routeur .. il ne trouve pas le dns on dirait… y a t’il une astuce?

  4. Article génial, comme les autres.
    Maintenant faut que je trouve comment modifier la NB6 de SFR car pas possible de l’outrepasser au niveau du DNS…

  5. Salut,

    article au top et mis en place pour le moment sur un RPI combiné avec une antenne BLEA pour le moment en attendant d’avoir mon hystou et routeur pour envisager le meme type d’architecture que la tienne.

    J’ai cependant une question, depuis la mise en place du service les ‘stats’ on été remise par 2x à 0. Le nombre de domain total lui n’a pas changer mais le ‘total queries’ oui. Idem pour le reste du coup (percentage etc…)

    y’a t’il une RaZ des infos faite automatiquement? je n’ai fait attention a cela en fouinant sur la partir admin. Du coup sa fausse pour moi le nombre de requetes bloquées etc.. Depuis sa mise en place.

    Merci d’avance pour ta/tes réponses.

    Ton blog est u’e veritable source d’inspi sur une mise en place de l’environnement chez soit. Bon courage pour la suite.

    Cordialement

  6. Installer depuis hier grâce a cette procédure claire et précise.
    Le pihole voit bien le trafic mais je n’ai aucun blocage. J’ai mal réglé quelque chose (j’ai mis tous les blocages et toutes les listes blanches) ?

  7. Bonjour à tous.

    Suite à la reception de mon hystou moi aussi j’ai enfin pu migrer Pi-Hole de mon Pi2 vers une VM.

    Ayant fais une simple installation mais n’ayant pas ajouter la résolution de nom comme indiquer en fin d’article, J’ai tester la mise en place de celui-ci or problème cela n’a pas fonctionner.

    Voici donc ce qui à fonctionner pour moi.

    sudo nano /etc/pihole/local.list

    et dans son contenu:

    192.168.0.30 VM-DEB9-PiHole
    2a01:e35:39d4:2b30:e025:a8ff:fe30:83a1 VM-DEB9-PiHole
    192.168.0.30 pi.hole
    2a01:e35:39d4:2b30:e025:a8ff:fe30:83a1 pi.hole
    192.168.0.41 nas.home nas
    192.168.0.49 skyline.home skyline

    Suivi d’un:

    sudo pihole restartdns

    Dans mon cas je n’ai ajouter que mon nas pour le moment et cela fonctionne bien.

Répondre à Jed Annuler la réponse

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