La lutte contre la pub et les trackers à la maison : AdGuard Home + DoH + Cloudflared
50%... C'est l'estimation du trafic web mondial dédié aux services de publicité et de tracking... 50% des énergies électriques, hydrauliques, nucléaires, fossiles du web, c'est de la pub et de l'espionnage... Bloquer tout ce trafic ne rendra pas le web plus écolo mais il permettra de surfer plus sereinement et de limiter l'impact de la pub et du capitalisme de surveillance sur nos vies.
Dans ce guide je vais tâcher de vous expliquer comment configurer un bloqueur de pub et de trackers chez vous, le connecter à un proxy DNS et configurer ce proxy DNS pour qu'il envoi les requêtes via DNS-Over-HTTPS. Ce n'est pas un remplacement du bloqueur de pub de votre navigateur mais un complément qui filtrera également le trafic qui ne passe pas par votre navigateur : le trafic du système d'exploitation, de la console de jeu, de la "smart" TV (sic), du smartphone ou de n'importe quel dispositif connecté à votre réseau.
AdGuard
Imaginez AdGuard comme le bloqueur de pub du navigateur (ublock origin par exemple), il fait presque la même chose. Presque car AdGuard n'analyse pas le contenu comme peut le faire ublock mais s'occupe uniquement du requêtage DNS. Et il en passe des saletés via ce protocole ! Un petit tour sur "liberation.fr" ? Le site va également faire un tour sur akamai (CDN), google news, queryly (surveillance utilisateur), cloudfront (CDN Amazon), milibris, et sectigo. Tout ça juste en tapent liberation.fr dans la barre d'adresse...
Autant le dire tout de suite, tout ce que je viens de vous lister n'est pas à bloquer sauf si vous voulez casser votre navigation. L'intérêt d'AdGuard est que vous n'aurez pas à choisir les requêtes une par une puisque les listes de filtrages le feront à votre place.
Commençons avec le docker-compose de AdGuard Home :
services:
adguard:
image: adguard/adguardhome:latest
container_name: adguard
restart: unless-stopped
ports:
- 53:53/tcp
- 53:53/udp
- 3000:3000/tcp
environment:
- TZ=Europe/Paris
volumes:
- /opt/adguard/work:/opt/adguardhome/work
- /opt/adguard/conf:/opt/adguardhome/conf
labels:
- traefik.enable=true
- traefik.http.routers.adguard.rule=Host(`example.com`)
- traefik.http.routers.adguard.service=adguard
- traefik.http.routers.adguard.entrypoints=websecure
- traefik.http.services.adguard.loadbalancer.server.port=80
- traefik.http.routers.adguard.tls=true
- traefik.http.routers.adguard.tls.certresolver=le
- traefik.http.routers.adguard.tls.options=mytlsoption@file
- traefik.http.routers.adguard.middlewares=security@file
- traefik.http.services.adguard.loadbalancer.passhostheader=true
- traefik.http.middlewares.compresstraefik.compress=true
- traefik.docker.network=network_name
Ici on ouvre le port 53 en TCP et UDP car c'est AdGuard qui va se charger de récupérer les requêtes du LAN pour les filtrer avant de les transmettre à Cloudflared. Le port 3000 sert à l'initialisation du service. Une fois ce fichier compose fourni à docker, vous pouvez aller sur http://localhost:3000 (ou l'adresse IP de votre serveur) pour effectuer l'initialisation du produit. Veillez juste à sélectionner "toutes les interfaces" pour l'écoute du service.
Une fois le produit initialisé, il est disponible à l'adresse renseignée à la place de example.com mais avant de l'utiliser il faut réaliser une petite modification du fichier de configuration dans /opt/adguardhome/conf/AdGuardHome.yml :
tls:
enabled: true
server_name: example.com
force_https: false
port_https: 443
port_dns_over_tls: 853
port_dns_over_quic: 853
port_dnscrypt: 0
dnscrypt_config_file: ""
allow_unencrypted_doh: true
certificate_chain: ""
private_key: ""
certificate_path: ""
private_key_path: ""
strict_sni_check: false
Votre configuration TLS devrait ressembler à ça. Passons maintenant à notre proxy DNS
Cloudflared
Cloudflared c'est un client de tunneling à la base. Mais il est tout à fait possible de tordre son utilisation pour le transformer en proxy DNS-Over-HTTPS et même de choisir quel serveur DNS va répondre. Le fichier docker-compose ressemble à ça :
services:
cloudflared:
container_name: cloudflared
image: cloudflare/cloudflared:latest
restart: unless-stopped
command: proxy-dns --address 172.18.0.101 --port 5053 --upstream https://dns0.eu
Ici la configuration se résume à une commande qui dit au conteneur de fonctionner en mode proxy DNS, d'écouter sur l'adresse 172.18.0.101:5053 et de tout renvoyer vers dns0.eu (service DNS européen).
AdGuard Again
Maintenant que le proxy DNS est configuré, nous pouvons retourner sur AdGuard et commencer la configuration du service. La premère chose à faire est de modifier les paramètres > paramètres DNS pour choisir notre cloudflared comme upstream DNS :

Plus bas se trouve un bouton bleu "tester les upstream". Si tout est OK vous pouvez cliquer sur appliquer.
Allons maintenant dans filtres > listes de blocage DNS > ajouter liste de blocage > choisir dans la liste. Je vous conseille de prendre les listes Hagezi's pro++, badware, threat intelligence feeds et anti-piracy mais vous pouvez choisir les listes que vous voulez. Il y a plein d'autres options disponibles dans adguard comme le blocage de tout un service (facebook par exemple), du contrôle parentale, de la navigation sécurisée, de la journalisation, des statistiques...etc. A vous de voir ce qui vous conviendra le mieux.
Les appareils
La configuration étant faite, il faut maintenant s'attacher à modifier les appareils de notre réseau. Si vous avez du DHCP dans votre réseau local il suffit de modifier les serveurs DNS pour y mettre notre serveur AdGuard (généralement du 192.168..0x).
Pour les appareils nomades, les navigateurs modernes ont tous la capacité de requêter en DNS-Over-HTTPS désormais. Pour firefox ça se passe dans les options de sécurité & vie privée :

Ici, l'adresse https://example.com/dns-query/firefox permet au navigateur de s'identifier auprès d'AdGuard comme "firefox". Pour les appareils Android, l'application RethinkDNS ou Intra permet de configurer son propre serveur DNS-Over-HTTPS et donc de requêter https://example.com/dns-query/xxx. Pour linux il existe le service dnscrypt-proxy.