Installer Pi-hole avec LXC

Au sommaire :

  • 1-Qu'est-ce que Pi-hole ?
  • 2-Prérequis
  • 3-Création du conteneur LXC
  • 4-Créer un nouvel utilisateur
  • 5-Configurer OpenSSH
  • 6-Installation de Pi-hole
  • 7-Installation de Unbound
  • 8-Test de validation avec DNSSEC
  • 9-Ajouter le serveur DNS dans Pi-hole
  • 10-Ajouter un serveur DNS à Proxmox VE
  • 11-Configuration du serveur DHCP

1-Qu'est-ce que Pi-hole ?

Pi-hole est un bloqueur de publicité qui a la particularité de se placer au cœur du réseau et non sous une forme de plugin à installer dans un navigateur.

Il bloque à la fois les publicités conventionnelles que l'on trouve sur les sites web mais aussi celles qui apparaissent sur votre smartphone ou votre smart TV.

Il est léger et très souvent utilisé à travers un Raspberry Pi.

2-Prérequis

Simplement d'un serveur Proxmox VE.

3-Création du conteneur LXC

Pas de machine virtuelle KVM (trop gourmand en ressources) ou d'installation directement dans Proxmox VE (pour des raisons de sécurité évidente), nous allons installer Pi-hole dans un conteneur LXC non privilégié.

Pour commencer, téléchargez un template Ubuntu 22.04 LTS.

Vous devriez le trouver à cet endroit.

Cliquez sur "Create CT"

General

  • CT ID : choisissez un identifiant disponible.
  • Hostname : nommez votre conteneur.
  • Password/Confirm password : choisissez un mot de passe et confirmez le.
  • SSH public key (recommandé) : indiquez votre clé SSH publique pour vous connecté sans mot de passe.

Template

  • Storage : sélectionnez le stockage qui contient le template.
  • Template : sélectionnez le template Ubuntu 22.04 LTS.

Disks

  • Storage : sélectionnez "local-lvm".
  • Disk size (GiB) : 3 Gib dans l'exemple.

CPU

  • Cores : 1 core suffit pour Pi-hole à titre domestique.

Memory

  • Memory (Mib)/Swap (Mib) : 256 Mib chacun est suffisant pour un usage domestique.

Network

  • IPv4/CIDR : indiquez une adresse IP statique.
  • Gateway (IPv4) : Indiquez la passerelle de votre réseau local.

DNS

  • DNS domain/DNS servers : indiquez ceux que vous préférez (Cloudflare/Google pour l'exemple).

Note : nous verrons dans l'article suivant comment mettre en place votre propre DNS récursif avec Unbound.

vérifiez que tout est bon puis validez.

4-Créer un nouvel utilisateur

Commencez par créer un utilisateur avec la commande "adduser" (pihole pour l'exemple).

root@pihole:~# adduser "votre_identifiant"

Ajoutez l'utilisateur au groupe "sudo".

root@pihole:~# usermod -aG sudo pihole

5-Configurer OpenSSH

Ce chapitre est optionnel mais il apparaîtra systématiquement dans mes prochains tutoriaux car au vu de l'actualité cyber de ces 2-3 derniéres années, il est nécéssaire que vous ayez de bons reflexes en matiére de sécurité (cela vaut pour moi également) et une connaissance approfondie de OpenSSH est un passage incontournable.

J'ai rédiger un tutoriel à ce sujet en direction des débutants.

Découvrez OpenSSH (partie 1)
Au sommaire : * Qu’est-ce que OpenSSH ? * Prérequis * OpenSSH dans mon quotidien * Installation * Le fonctionnement * Les types d’authentification * Quel type de clé SSH choisir ? * Création d’une clé * Copier la clé publique * Conclusion 1-Qu’est-ce OpenSSH ? OpenSSH (OpenBSD Secure S…

Revenons à nos moutons. Vous verrez en tapant "cat /root/.ssh/authorized_keys" la clé publique de votre poste client que vous avez injecté lors de la création du conteneur LXC et qui vous permet de vous authentifier sans mot de passe.

Mais nous ne voulons PAS nous connecté au conteneur LXC via l'authentification par clé SSH avec le compte "root" mais plutôt avec le compte "pihole".

Avec le compte "root", vous tapez la commande "rm -rf * /" et vous supprimer le système tout entier donc à éviter.

Nous allons désactiver l'authentification par le compte root en modifiant le fichier "sshd_config".

nano /etc/ssh/sshd_config
  • Retrouvez la ligne "# Authentication:"
  • En dessous, vous allez trouver la ligne "#PermitRootLogin prohibit-password"
  • Décochez là et mettez à la place "PermitRootLogin no"

Le résultat avant et après.

Redémarrez le service ssh.

Effectuez un test sur votre poste client, tapez "ssh root@192.168.0.10" (mettez l'adresse IP que vous avez indiqué) et vous ne devriez plus avoir accès au conteneur avec le compte root avec l'authentification par clé SSH.

Maintenant, tapez la commande suivante pour copiez la clé SSH de votre poste client au conteneur LXC en indiquant bien le compte "pihole" et validez en tapant le mot de passe du compte.

ssh-copy-id pihole@192.168.0.11

Confirmez avec le mot de passe du compte et la clé sera copiée dans /home/<username>/.ssh/authorized_keys.

Bravo!!! Vous avez copier votre clé. Tentez de vous connecté avec le compte pihole.

ssh pihole@192.168.0.11

Yeahh!!!!! Maintenant, nous allons aller plus loin en désactivant l'authentification par mot de passe.

Pas de panique. Vous pourrez toujours vous authentifier par mot de passe via l'interface de Proxmox VE mais nous allons seulement le bloquer pour les connexions à distance.

Modifiez de nouveau le fichier "sshd_config".

sudo nano /etc/ssh/sshd_conf
  • Retrouvez la ligne "#PasswordAuthentication yes"
  • Décochez là
  • Indiquez "PasswordAuthentication no"

Redémarrez le service ssh.

sudo systemctl restart ssh

Tentez une connexion sur un poste non authentifié et vous verrez le message "Permission denied" s'affiché pour indiquer qu'il n'est plus possible de se connecté via un mot de passe à distance.

6-Installation de Pi-hole

Connectez vous avec le compte standard et mettez à jour votre conteneur.

sudo apt update && sudo apt upgrade -y

Installez le paquet curl.

sudo apt install curl -y

Enfin, installez Pi-hole.

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

Le script va effectuer un quelques vérifications.

Validez les 3 étapes suivantes (pensez à faire un don si vous avez la possibilité).

Par défaut, je choisis Cloudflare comme fournisseur DNS en amont.

Validez pour inclure la liste de blocage par défaut de StevenBlack's.

Validez également pour installer l'interface web et les modules lighttpd et PHP.

Validez pour obtenir le journal des requêtes.

Sélectionnez le niveau de détail que vous souhaitez voir apparaître dans les statistiques de votre instance Pi-hole (peut-être modifié à tout moment) :

  • Niveau 0 - Ne cache rien, toutes les statistiques sont disponibles.
  • Niveau 1 - Affiche et stocke tous les domaines comme cachés.
  • Niveau 2 - Afficher et stocker tous les domaines comme cachés et les clients comme 0.0.0.0.
  • Niveau 3 - Désactiver tous les détails sauf les statistiques les plus anonymes.
Privacy levels - Pi-hole documentation

Félicitation!!!! Pi-hole est enfin installé. Accédez à l'interface web à travers l'adresse IP communiqué suivi de /admin et entrez votre mot de passe.

Note : le mot de passe peut-être modifié à travers la commande "pihole -a -p".

7-Installation de Unbound

Vous avez la possibilité d'installer votre propre serveur DNS récursif, de validation et de mise en cache avec Unbound, une des solutions les plus populaires du marché.

Unbound - About
Unbound is a validating, recursive, caching DNS resolver. It is designed to be fast and lean and incorporates modern features based on open standards. Late 2019, Unbound has been rigorously audited, which means that the code base is more resilient than ever. To help increase online privacy, Unbound…

D'après les informations du site web :

  • Disponible sur Linux, BSD, macOS et Windows
  • Chiffre les communications avec le DNS-over-TLS et le DNS-over-HTTPS
  • Code source audité (fin 2019)
  • Licence BSD
  • Langage C

Nous allons suivre la procédure proposé par le site de Pi-hole. Le but est d'installer Unbound en tant que serveur DNS récursif, de validation et de mise en cache de votre domicile, de l'indiquer comme serveur DNS principal sur votre serveur Proxmox VE.

unbound - Pi-hole documentation

Installez le paquet unbound.

sudo apt install unbound -y

Puis, récupérez avec la commande "wget" la liste des 13 serveurs racines (roots) qui se trouverons dans "/var/lib/unbound/root.hints".

wget https://www.internic.net/domain/named.root -qO- | sudo tee /var/lib/unbound/root.hints

Éditez le fichier unbound.conf

nano /etc/unbound/unbound.conf

Et ajoutez la configuration de référence issue de la documentation de Pi-hole (trop long et risque de nuire à la lisibilité du tutoriel).

unbound - Pi-hole documentation

Pèle-mêle :

  • Activation de l'IPv4 et des protocoles TCP/UDP (la base)
  • Désactivation de l'IPv6 dont on a pas besoin
  • Activation du DNSSEC qui renforce l'authentification du DNS en utilisant des signatures numériques basées sur la cryptographie à clé publique
  • Ajout des adresses IP privés

Redémarrez le service et vérifiez qu'il est actif.

sudo systemctl restart unbound

Testez la configuration. Si vous avez le message "no errors in /etc/unbound/unbound.conf" c'est que tout est correct.

/etc/unbound/unbound.conf.d# unbound-checkconf /etc/unbound/unbound.conf
unbound-checkconf: no errors in /etc/unbound/unbound.conf

Testez un site internet avec la commande "dig" (linkedin.com dans l'exemple ci-dessous).

dig linkedin.com @127.0.0.1 -p 5335

8-Test de validation avec DNSSEC

DNSSEC renforce l'authentification du DNS en utilisant des signatures numériques basées sur la cryptographie à clé publique.

Testez DNSSEC avec l'adresse "fail01.dnssec.works" (adresse inexistante)

dig fail01.dnssec.works @127.0.0.1 -p 5335

Cela devrait vous indiquer "SERVFAIL" et aucune adresse IP disponible.

Enfin, testez "dnssec.works" (site existant) qui devrait vous indiquer "NOERROR" et une adresse IP.

dig dnssec.works @127.0.0.1 -p 5335

Si vous faites un ping sur une machine quelconque, on vois bien que la première adresse ne mène nulle part tandis que la deuxième répond bien.

9-Ajouter le serveur DNS dans Pi-hole

Retournez sur l'interface web puis :

  • Allez dans Settings/DNS
  • Cochez l'option "Custom 1 (IPv4)"
  • Puis ajoutez l'adresse IP 127.0.0.1#5335 soit l'adresse locale (localhost) suivi d'un # et du numéro de port UDP 5335.

Validez en cliquant sur "Save" et Pi-hole interrogera votre serveur DNS Unbound en lieu et place des serveurs DNS publiques.

10-Ajouter un serveur DNS à Proxmox VE

Sur Proxmox VE, rien de plus simple. Allez dans "System/DNS" et indiquez dans "DNS server1" l'adresse IP du conteneur Pi-hole.

Toutes les requêtes effectués par votre serveur PVE passeront non pas par un serveur DNS public mais par votre serveur DNS Unbound.

11-Configuration du serveur DHCP

Cerise sur le ghetto, Pi-hole propose également un serveur DHCP très facile à mettre en place.

Vous allez activer le service et remplacer le serveur DHCP de la box internet (Livebox pour ma part).

Retournez sur l'interface web puis :

  • Allez dans Settings/DHCP
  • Activez l'option "DHCP server enabled"
  • Choisissez la plage d'adresses que vous souhaitez (plage de 50 adresses pour l'exemple)

Ma passerelle étant la 192.168.0.254, je ne la modifie pas.

On jette un rapide coup d’œil aux autres options. Dans "Advanced DHCP setting" :

  • Le domaine est en ".lan".
  • La durée de location d'une adresse est de 24 heures

Pas besoin de cocher le DHCPv4 rapid commit ou IPv6 support

  • Currently active DHCP leases indique les appareils concernés en activité
  • Static DHCP leases configuration sert à attribuer des adresses IP à partir de l'adresse MAC de vos appareils. Très utile si vous souhaiter contrôler l'attribution des adresses IP.

Cliquez sur "Save" tout en bas de la page puis allez sur l'interface web de votre box internet.

Il vous suffit simplement de décocher l'option lié au serveur DHCP.

L'avantage c'est que lorsque le serveur DHCP va attribuer une adresse IP, il va également lui indiquer l'adresse IP de Pi-hole qui est également celle du serveur DNS Unbound. Ghetto super classe non ?

Donc si on résume, vous allez pouvoir filtrer les publicités et autres outils de télémétrie sur l'ensemble de votre réseau local, attribuer des adresses IP avec votre propre serveur DHCP ainsi que résoudre les noms de domaines avec votre propre serveur DNS.

Vous allez limiter au maximum le champs d'action de votre box internet et avoir un maxmimum d'indépendance.

Sources :

unbound - Pi-hole documentation
Utiliser Unbound avec DNSSEC — Le Wiki de debian-fr.xyz
Blog Stéphane Bortzmeyer: dnssec-trigger, un outil pour mettre DNSSEC à la disposition de M. Toutlemonde
Shaft Inc. : Arrêtez (de conseiller) d’utiliser Google Public DNS
Résolveur DNSCrypt disponible pour tous - Noobunbox
Je viens de mettre en place un Résolveur DNSCrypt public. Celui-ci est accessible en IPv4 seulement pour le moment. L’IPv6 arrivera plus tard.
Unbound
Here you can find the Doxygen documentation generated from the latest version of the Unbound source code. The main Unbound user documentation can be found on unbound.docs.nlnetlabs.nl. If you feel something is missing or you have a suggestion, please do not hesitate to contact us. You can …
unbound - Pi-hole documentation
[Tutoriel] Qu’est-ce qu’un serveur DNS et comment en installer un ?
Cet article a pour but de vulgariser le terme de serveur DNS et est suivi d’un tutoriel décrivant la procédure d’installation de Unbound sur Debian
Ces protocoles ennemis de la censure des FAI
Le blocage de sites pirates est considéré comme un outil assez efficace par les ayants droit de tous bords. C’est d’ailleurs devenu une mesure importante pour l’industrie du diver…
Mise en place d’un serveur DNS avec Unbound – Yoan Jouve

https://desgeeksetdeslettres.com/web/dns-unbound-tutoriel