AdGuard Home un excellent bloqueur de publicité
Installation de AdGuard Home un excellent bloqueur de publicité avec docker en quelques minutes pour rendre votre internet plus propre.
Bonjour,
Je suis en train de transférer mes VMs qui me servent de DNS Blacklist vers des containers LXC sous Alpine. L'intérêt principal est le gain de performance en terme d'utilisation de la RAM. En gros mes VMs tournaient sous debian 11 et utilisaient entre 600 et 900Mo de RAM. Avec LXC/Alpine j'utilise entre 100-200Mo de RAM!! J'adore le côté minimaliste d'Alpine et son "secure by design".
La création des containers LXC fera l'objet d'un guide plus tard, ce n'est pas le sujet de ce post. Aujourd'hui nous allons voir comment installer AdGuard Home avec Docker en quelques minutes.
AdGuard Home est un logiciel qui permet de filtrer vos requêtes DNS et élimine à la racine les publicités et autres requêtes des trackers. Il a l'avantage d'avoir toutes les dernières technologies à sa disposition concernant les requêtes DNS à savoir DOH/DOT (DNS over HTTPS & DNS over TLS) qui permettent un chiffrement de bout en bout de vos données. Et cerise sur le gâteau, si vous ne disposez pas d'un routeur performant ou si vous avez une box pourrie (pléonasme) de chez Orange, il permet de gérer le DHCP.
Les prérequis pour l'installation:
- Docker
- Docker Compose
Dans votre répertoire principal ou sont vos dockers, on va commencer par créer le réseau "backend".
docker network create backend
Le réseau "backend" chez moi est le réseau qui n'est pas sensé être en frontal avec internet et dans lequel les services n'ont pas de frontend exposés. Dès que j'ai un frontend exposé, j'utilise un reverse-proxy + authentification pour sécuriser (et Cloudflare pour rajouter une couche).
Le docker compose qui va bien (je ne m'amuse pas à faire un docker-compose par service, je ne vois pas l'intérêt à part perdre du temps quand on veut faire des modifications / relancer des applications, après libre à vous de le découper suivant vos besoins / installations ):
version: "3.9" ########################### NETWORKS ############################################### networks: #traefik: # external: true backend: external: true #name: backend if external false #driver: bridge ########################### SERVICES ############################################### services: ############################### PORTAINER ####################################################### portainer: # Installer Portainer / Interface graphique docker # https://hub.docker.com/r/portainer/portainer-ce container_name: portainer image: portainer/portainer-ce:latest restart: unless-stopped command: -H unix:///var/run/docker.sock security_opt: - no-new-privileges:true networks: - backend ports: - "$PORTAINER_PORT:9000" - "$PORTAINERSERVER_PORT:8000" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - $USERDIR/Portainer:/data - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro ############################## MAINTENANCE ################################################### watchtower: # Watchtower detects if any linked containers have a new image available, automatically updating & restarting them if needed. # https://hub.docker.com/r/containrrr/watchtower container_name: watchtower image: containrrr/watchtower:latest restart: unless-stopped security_opt: - no-new-privileges:true networks: - backend volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - TZ=$TZ - WATCHTOWER_CLEANUP=true - WATCHTOWER_INCLUDE_RESTARTING=true #- WATCHTOWER_POLL_INTERVAL=60 - WATCHTOWER_DEBUG=false - WATCHTOWER_SCHEDULE=0 0 3 * * * ########################### UTILITIES ################################################# dozzle: # Dozzle - Real-time Docker Log Viewer # https://hub.docker.com/r/amir20/dozzle image: amir20/dozzle:latest container_name: dozzle restart: unless-stopped security_opt: - no-new-privileges:true networks: - backend ports: - "$DOZZLE_PORT:8080" environment: DOZZLE_LEVEL: info DOZZLE_TAILSIZE: 300 DOZZLE_FILTER: "status=running" # DOZZLE_FILTER: "label=log_me" # limits logs displayed to containers with this label TZ: "$TZ" volumes: - /var/run/docker.sock:/var/run/docker.sock ###################################### DNS ################################################# adguardhome: # AdGuard - DNS Blocker # https://hub.docker.com/r/adguard/adguardhome image: adguard/adguardhome:latest container_name: adguard restart: unless-stopped security_opt: - no-new-privileges:true networks: - backend ports: - $ADGUARDDNS_PORT:53/tcp - $ADGUARDDNS_PORT:53/udp - $ADGUARDDHCP1_PORT:67/udp - $ADGUARDDHCP2_PORT:68/tcp - $ADGUARDDHCP2_PORT:68/udp - $ADGUARD1_PORT:784/udp - $ADGUARD2_PORT:853/tcp - $ADGUARDADMIN_PORT:3000/tcp - $ADGUARDHTTP_PORT:80/tcp - $ADGUARDHTTPS_PORT:443/tcp volumes: - $USERDIR/Adguard/work:/opt/adguardhome/work - $USERDIR/Adguard/conf:/opt/adguardhome/conf environment: TZ: $TZ
J'utilise toujours la même structure pour mes VMs / containers. En plus de AdGuard, j'ai ajouté les containers suivant (vous pouvez les enlever si ils ne vous intéressent pas) que je considère comme indispensables pour une utilisation / debugging plus simple:
- Portainer: il me permet de gérer simplement mes containers, les relancer / détruire, virer les images, etc...
- Dozzle est un utilitaire qui permet de lire très facilement les logs des containers.
- Watchtower permet quand à lui de mettre à jour automatiquement les containers quand une nouvelle image est disponible (ici à 3h du matin chaque jour). Le but c'est de tout automatiser, pas de s'amuser à faire les mises à jour à la main ou tous les deux ans avec une version spécifique d'où le "latest" pour tous les containers. Alors oui, il peut arriver que lors d'une mise à jour automatique ça casse tout mais bon ça doit arriver 2x par an au maximum alors que j'ai en permanence plus d'une quarantaine de containers qui tournent. Not worth the hassle comme on dit chez Sam.
Toutes mes variables sont des $qqch. Elles sont toutes stockées dans un fichier .env à la racine de mes dockers pour plus de simplicité. On ouvre donc ce fichier :
nano .env
Et voici à quoi ça ressemble en exemple dans ce fichier .env :
################## SYSTEM ######################## PUID=1001 PGID=1001 TZ=Europe/Paris USERDIR=/home/docker [email protected] [email protected] SERVER_IP=192.160.125.101 COMPOSE_PROJECT_NAME=AdGuard ############## PORTS ########################### PORTAINER_PORT=9000 PORTAINERSERVER_PORT=8000 DOZZLE_PORT=8071 ADGUARDDNS_PORT=53 ADGUARDHTTP_PORT=80 ADGUARDHTTPS_PORT=443 ADGUARDADMIN_PORT=3000 ADGUARD1_PORT=784 ADGUARD2_PORT=853 ADGUARDDHCP1_PORT=7067 ADGUARDDHCP2_PORT=7068
Rien de transcendant ici, faites bien attention à bien définir votre USERDIR là ou seront les répertoires permanents des containers.
C'est terminé ? Pour docker oui, il ne reste plus qu'à lancer les containers:
docker-compose up -d
Pour configurer AdGuard, il suffit de se rendre sur http://votreip:3000. A noter que le port 3000 ne sert que pour la configuration. Une fois réalisée, il n'est plus utilisé par le container.
Bon ensuite il suffit de répondre aux questions qui sont posées, rien de compliqué, je ne vais pas vous faire l'affront de vous mettre des screens inutiles. Ne touchez pas au port 53 pour la configuration, c'est le port standard.
Et à partir de maintenant, ça devrait déjà fonctionner. Pour vous rendre sur le tableau de bord il suffit d'aller sur http://votreip.
Pour définir le serveur DNS de votre choix, il faut vous rendre dans le menu Paramètre/Paramètre DNS. Je vous conseille d'utiliser pour votre "Serveurs DNS upstream" soit Quad 9, soit Cloudflare et pour "Serveurs DNS d'amorçage" celui de Cloudflare.
Pour le choix des filtres, il faut se rendre dans "Filtre/Listes de blocage DNS". On clique ensuite sur le bouton en bas à gauche "Ajouter liste de blocage"/"Choisissez dans la liste".
Pour être tranquille, je vous conseille de cocher tout ce qu'il y a dans Général / Sécurité et Autre. Si vous voulez rajouter des filtres personnalisés pourquoi pas ceux de Blocklistproject.
Dans les "Paramètres DNS", tout cocher c'est pas mal:
Et bien sur, pour que votre installation soit utilisée, vous devez définir dans votre DHCP ou sur vos machines de façon individuel (beurk, mettez tout en DHCP, qui voudrait s'ennuyer à gérer chaque téléphone / portable / tablette à la maison un par un ! Mon dieu !!) votre nouveau serveur DNS (au lieu de 8.8.8.8 par exemple ça sera "192.168.1.25").
Est-ce que ça permet de supprimer les addons des navigateurs comme par exemple uBlock & uMatrix ? Pour votre fille de 14 ans qui veut regarder des vidéos tiktok ou de chatons sur Youtube, oui, pour un geek, les deux sont complémentaires. Et est-ce que ça va virer les publicités sur votre téléphone et votre tablette ? Malheureusement non car la plupart du temps les DNS sont en "dur". Le seul moyen c'est de rerouter le port 53 sortant vers votre AdGuard ou alors d'utiliser un VPN vers votre propre serveur (c'est la solution que j'utilise avec Wireguard pour mon téléphone et ça fonctionne parfaitement).
Maintenant il ne vous reste plus qu'à profiter d'un internet plus performant et beaucoup moins pollué ! C'est beau la technologie quand ça fonctionne !
@+