Revenir au début

Sécuriser les requêtes DNS avec Pi-Hole

En bonus : DNS-over-HTTPS
En bonus : **DNS-over-HTTPS**

La problématique DNS

Les requêtes DNS ne sont pas sécurisées, elles sont transmises en clair. Ce qui signifie qu’elles peuvent être “au mieux” analysées par des tiers et au pire modifiées par des personnes mal intentionnées. Par exemple, un pirate informatique peut modifier l’adresse IP correspondant à un nom de domaine pour vous rediriger vers un réseau compromis. Un fournisseur d’accès internet peut facilement censurer des domaines en bloquant leur résolution. Pour contrecarrer les lacunes de DNS, il existe une solution qui s’appelle DNS par HTTPS ou DNS-over-HTTPS en anglais, qu’on abrégera en DoH dans le reste de l’article.

DNS par HTTPS a le mérite de s’attaquer à tous les problèmes à la fois : L’anonymat, la sécurité et la censure.

DNS-over-HTTPS

DNS par HTTPS est un concept assez simple. Les requêtes DNS passent dans un tunnel HTTPS. Voir pour plus de détails l’excellent article de SOPHOS à ce sujet.

Pi-Hole

Pi-Hole un Trou Noir pour les publicités !

Pi-Hole est présenté comme un trou-noir pour les publicités d’internet. Il fonctionne sur le réseau local, il résout les noms de domaines autorisés tout en bloquant ceux dits “à risques” ou “gênants” comme les domaines publicitaires ou malveillants.

Cela permet d’avoir un blocage de publicités centralisé qui rend caduque les extensions pour navigateurs type “ad-Block”. Tous les clients présents sur le réseau utilisent Pi-Hole et bénéficient ainsi naturellement de la protection.

Pour faire court : Pi-Hole ne résoudra aucun domaine blacklisté.

Depuis quelques temps déjà, je songe à installer un Pi-Hole sur mon réseau local . En outre, Cloudflare propose un service de DoH. C’est donc une bonne occasion de conjuguer ces deux éléments en une solution pérenne qui augmentera la sécurité de la maison ou du bureau.

Mise en place du Raspberry-Pi

Raspberry PI 3 avec les accessoires

La première étape consiste à récupérer l’ISO de Raspbian depuis le site officiel. Pour ce projet il est inutile de prendre l’image complète. La version légère (lite) fera l’affaire. Après l’image téléchargée, il faut l’installer sur une carte SD. J’utilise Etcher qui est disponible pour Linux, Mac et Windows.

Etcher est simple d’utilisation :

  • vous choisissez l’image (fichier zip)
  • vous choisissez la destination (carte SD)

Ensuite, la carte SD est prête à l’emploi avec le Raspberry-Pi. Il ne reste qu’a démarrer ce dernier et le raccorder au réseau local. Pour se connecter sur le Raspberry-pi la première fois, j’utilise SSH (Putty). (On peut également utiliser RealVNC pour avoir l’interface graphique, mais ce n’est pas nécessaire pour ce projet.)

Les identifiants par défaut sont

pi/raspbian

Quand les mises à jour sont effectuées :

$ sudo apt-get update && sudo apt-get dist-upgrade

et que le Raspberry a redémarré, on peut passer à la suite.

Installation de CLoudFlare

Rendez vous sur le site de Cloudflare pour récupérer l’URL de téléchargement, à l’heure où j’écris ces lignes j’utilise l’adresse https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz :

wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz
Resolving bin.equinox.io (bin.equinox.io)... 54.243.137.45, 107.22.233.132, 50.19.252.69, ...
Connecting to bin.equinox.io (bin.equinox.io)|54.243.137.45|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 5293773 (5.0M) [application/octet-stream]
Saving to: ‘cloudflared-stable-linux-arm.tgz’

il faut décompresser l’archive :

tar -xvzf cloudflared-stable-linux-arm.tgz
sudo cp ./cloudflared /usr/local/bin
sudo chmod +x /usr/local/bin/cloudflared
cloudflared -v
On configure Cloudflare pour que le service démarre avec le système

on édite le fichier suivant: /etc/default/cloudflared :

# Commandline args for cloudflared
CLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query

Il faut également changer les permissions :

sudo chown cloudflared:cloudflared /etc/default/cloudflared
sudo chown cloudflared:cloudflared /usr/local/bin/cloudflared

Ensuite on crée un script systemd en ajoutant le fichier suivant : /etc/systemd/system/cloudflared.service Cela permet de paramétrer le démarrage de Cloudflare.

[Unit]
Description=cloudflared DNS over HTTPS proxy
After=syslog.target network-online.target

[Service]
Type=simple
User=cloudflared
EnvironmentFile=/etc/default/cloudflared
ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

Puis, on ajoute le service au démarrage :

sudo systemctl enable cloudflared

On le démarre :

sudo systemctl start cloudflared

enfin, on vérifie qu’il tourne correctement :

sudo systemctl status cloudflared

Dernière vérification en testant une résolution de nom de domaine avec google.fr :

$ dig @127.0.0.1 -p 5053 google.fr 

; <<>> DiG 9.11.5-P4-5.1-Raspbian <<>> @127.0.0.1 -p 5053 google.fr
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21378
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 9cb57d5c3f4bd9ac (echoed)
;; QUESTION SECTION:
;google.fr.			IN	A

;; ANSWER SECTION:
google.fr.		75	IN	A	216.58.209.227

;; Query time: 0 msec
;; SERVER: 127.0.0.1#5053(127.0.0.1)
;; WHEN: Tue Feb 04 17:51:58 CET 2020
;; MSG SIZE  rcvd: 75

L’installation de Clouflare est terminée. On configurera Pi-Hole pour tirer profit de DoH dans le chapitre suivant.

Installation et configuration de Pi-Hole

La première étape est d’installer Pi-Hole :

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

Il faut suivre le processus d’installation. Peu importe les DNS que vous choisirez lors de l’installation, nous allons les remplacer de toute manière par la suite, pour tirer profit de Cloudflare.

Une fois Pi-Hole installé, il faut se rendre sur la page de configuration des DNS afin d’y ajouter l’IP du service Cloudflare :

 utiliser le DNS CLoudflare à la place de celui choisi lors de la configuration de Pi-Hole

Maintenant, Pi-Hole ira rechercher les DNS via le service de Cloudflare en DNS-over-HTTPS.

 Le Dashboard de Pi-Hole

Désormais tout est plus sécurisé :

  • la recherche DNS,
  • le filtrage des domaines non souhaités et gênants.

Pour aller plus loin on peut aussi modifier le fichier “hosts” :

$ sudo vi /etc/hosts

afin de rapprocher les IP locales des objets sur le réseau

127.0.1.1       raspberrypi
192.168.2.187   Legion
192.168.2.5     backbox
192.168.2.174   mam-port
192.168.2.111   printer
192.168.2.152   oneplus-tom
192.168.2.138   pad
192.168.2.164   rasp-eth0
192.168.2.27    rasp-wlan
192.168.2.114   tab-samsung
192.168.2.61    old-tab

Ainsi la liste des “Top clients” sera plus élégante

 top client

Enfin, il est possible de trouver des listes de filtrage sur internet plus fournies que celles installées de base avec Pi-Hole, il y a un fil de discussion dédié à cela sur le discourse de Pi-Hole.

Bon surf à toutes et à tous.