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 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
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 :
Maintenant, Pi-Hole ira rechercher les DNS via le service de Cloudflare en DNS-over-HTTPS.
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
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.
Rejoignez-nous sur notre page Facebook.