Files
docudjeex/content/fr/3.serveex/9.apps/1.adguard.md
T

16 KiB

title, description
title description
Adguard Home Installer AdGuard Home pour bloquer publicités et trackers à l'échelle du réseau avec DNS-over-HTTPS, gestion des clients et règles de filtrage personnalisées.

:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}

AdGuard Home est un serveur DNS anti-pub et anti-traçage qui fonctionne au niveau du système. Une fois configuré, il couvrira TOUS vos appareils domestiques et vous n'aurezbesoin d'aucun logiciel côté client pour cela.

Il fonctionne comme un serveur DNS qui redirige les domaines de suivi vers un «black hole», empêchant ainsi vos appareils de se connecter à ces serveurs.

En pratique, une fois en place, il vous faudra juste configurer les serveurs DNS de vos appareils, pour que ces derniers l'utilisent.

adguard

Rappel sur le fonctionnement d'un DNS :

Lorsque vous naviguez sur un site, ou une application, des requêtes sont émises vers un ou des domaines afin d'afficher le contenu de votre page. Les publicités notamment. Votre appareil ne connait pas les adresses IP de ces serveurs à joindre. Pour les connaitre, il va contacter un serveur de nom (Domain Name Server) qui lui va lui répondre avec l'adresse IP la plus à jour pour le domaine de la requête.

Par défaut, votre appareil utilise le serveur votre fournisseur d'accès, paramétré dans votre box ou directement sur le CGNAT de votre opérateur si appareil mobile. Cela peut etre changé directement dans les réglages de votre navigateur, mais aussi dans le système de votre appareil, et parfois directement dans votre box si votre FAI le permet.

Adguard lui, va s'intercaler entre le serveur de nom et votre appareil. Si vous paramétrez vos appareil, ils contacteront d'abord adguard qui filtrera les requetes, via des listes régulièrement mises à jour :

  • Si le domaine n'est pas dans une blocklist, il contactera des serveurs de noms génériques (dit upstreams) et répondra vers vos appareils avec l'adresse IP recherchée.
  • Si le domaine est dans une blocklist, il ne contactera pas les DNS upstream et ne répondre pas à vos appareils. Le contenu affilié à cette requete ne s'affichera pas.

C'est ainsi que les pubs et domaines malveillants sont bloqués : leurs domaines sont présents dans la blocklist, le reste de la page lui charge correctement.

Picture

Installation

::file-tree

tree: /: - srv: - docker: - adguard: - confdir/ - workdir/ - compose.yaml - .env

::

::note

Nous monterons également le dossier /srv/docker/swag/config/etc/letsencrypt pour accéder au certificat SSL de Swag. ::

::steps{level="3"}

Déployer la stack

Ouvrez Dockge et cliquez sur compose

Nommez la stack adguardhome et collez la configuration ci-dessous :

---
services:
  adguardhome:
    container_name: adguard
    image: adguard/adguardhome
    restart: unless-stopped
    ports:
      - 53:53/udp
      - 8080:80/tcp
      - 4443:443/tcp
      - 853:853/tcp
      - 3000:3000/tcp
    volumes:
      - /srv/docker/adguardhome/confdir:/opt/adguardhome/conf
      - /srv/docker/adguardhome/workdir:/opt/adguardhome/work
      - /srv/docker/swag/config/etc/letsencrypt:/swag-ssl:ro

::tip{icon=""} Astuce : ajoutez le label watchtower à chaque conteneur pour automatiser les mises à jour

---
services:
  adguardhome:
    # ...
    labels:
      - com.centurylinklabs.watchtower.enable=true

::

Déployez la stack.

Allez sur http://ipdevotreserveur:3000 et suivez les instructions de configuration.

Terminé !

::

C'est tout ! Adguard est déployé.

Exposer AdGuard avec SWAG

Pour rendre AdGuard utilisable en dehors de votre réseau domestique, vous devez l'exposer.

::note{icon=""}

📋 Prérequis : nous partons du principe que vous avez créé un sous-domaine du type adguard.mondomaine.fr dans votre zone DNS avec un CNAME pointant vers mondomaine.fr, et que vous avez déjà redirigé le port 443 de votre box vers le port 443 de votre serveur dans vos règles NAT. Redirigez également les ports 53 et 853 vers votre serveur. Ces ports servent à router les requêtes DNS. ::

::warning

N'utilisez pas les tunnels Cloudflare pour exposer AdGuard, et assurez-vous que tout proxy est désactivé. ::

::steps{level="3"}

Ajouter le réseau d'AdGuard à SWAG

Dans Dockge, allez sur la stack SWAG et modifiez le fichier compose pour y ajouter le réseau d'AdGuard :

---
services:
  swag:
     container_name: # ...
      # ... 
     networks:             # Rattache le conteneur au réseau personnalisé 
      # ...           
      - adguard            # Nom du réseau déclaré dans la stack
    
networks:                  # Définit le réseau personnalisé
  # ...
  adguard:                 # Nom du réseau déclaré dans la stack
    name: adguard_default  # Nom réel du réseau externe
    external: true         # Précise qu'il s'agit d'un réseau externe

::note

Nous partons ici du principe que le réseau d'AdGuard s'appelle adguard_default. Vous pouvez vérifier que la connexion fonctionne en visitant le tableau de bord de SWAG sur http://ipdevotreserveur:81. ::

Redémarrez la stack en cliquant sur « Deploy » et attendez que SWAG soit pleinement opérationnel.

Créer le fichier subdomain.conf

Créez et ouvrez le fichier adguard.subdomain.conf

::tip{icon="" to="/serveex/files/file-browser-quantum"} Astuce pour les allergiques au terminal : vous pouvez utiliser File Browser Quantum pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal. ::

sudo nano /srv/docker/swag/config/nginx/proxy-confs/adguard.subdomain.conf

Collez la configuration ci-dessous :

## Version 2023/05/31
# make sure that your adguard container is named adguard
# make sure that your dns has a cname set for adguard

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name adguard.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    #if ($lan-ip = yes) { set $geo-whitelist yes; }
    #if ($geo-whitelist = no) { return 404; }
    if ($geo-blacklist = no) { return 404; }

    # enable for ldap auth (requires ldap-location.conf in the location block)
    #include /config/nginx/ldap-server.conf;

    # enable for Authelia (requires authelia-location.conf in the location block)
    #include /config/nginx/authelia-server.conf;

    # enable for Authentik (requires authentik-location.conf in the location block)
    #include /config/nginx/authentik-server.conf;

    location / {
        # enable the next two lines for http auth
        #auth_basic "Restricted";
        #auth_basic_user_file /config/nginx/.htpasswd;

        # enable for ldap auth (requires ldap-server.conf in the server block)
        #include /config/nginx/ldap-location.conf;

        # enable for Authelia (requires authelia-server.conf in the server block)
        #include /config/nginx/authelia-location.conf;

        # enable for Authentik (requires authentik-server.conf in the server block)
        #include /config/nginx/authentik-location.conf;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app adguard;
        set $upstream_port 3000;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }

    location /control {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app adguard;
        set $upstream_port 3000;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }

    location /dns-query {
        # to properly use this please set `allow_unencrypted_doh: true` and `force_https: false` in adguard
        # see https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration#configuration-file
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app adguard;
        set $upstream_port 3000;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }
}

Terminé !

::

Protéger AdGuard avec TinyAuth

Ajoutez la vérification forward-auth de TinyAuth directement dans adguard.subdomain.conf, de la même façon que dans le tutoriel TinyAuth. Le location /dns-query est laissé en dehors de la vérification auth_request, puisque les clients DNS-over-HTTPS ne peuvent pas faire de connexion interactive :

## Version 2023/05/31
# make sure that your adguard container is named adguard
# make sure that your dns has a cname set for adguard

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name adguard.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    #if ($lan-ip = yes) { set $geo-whitelist yes; }
    #if ($geo-whitelist = no) { return 404; }
    if ($geo-blacklist = no) { return 404; }

    # enable for ldap auth (requires ldap-location.conf in the location block)
    #include /config/nginx/ldap-server.conf;

    # enable for Authelia (requires authelia-location.conf in the location block)
    #include /config/nginx/authelia-server.conf;

    # enable for Authentik (requires authentik-location.conf in the location block)
    #include /config/nginx/authentik-server.conf;

    location /tinyauth {
        internal;
        proxy_pass http://tinyauth:3000/api/auth/nginx;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-Uri $request_uri;
    }

    location @tinyauth_login {
        return 302 https://tinyauth.mondomaine.fr/login?redirect_uri=$scheme://$http_host$request_uri;
    }

    location / {
        auth_request /tinyauth;
        error_page 401 = @tinyauth_login;

        # enable the next two lines for http auth
        #auth_basic "Restricted";
        #auth_basic_user_file /config/nginx/.htpasswd;

        # enable for ldap auth (requires ldap-server.conf in the server block)
        #include /config/nginx/ldap-location.conf;

        # enable for Authelia (requires authelia-server.conf in the server block)
        #include /config/nginx/authelia-location.conf;

        # enable for Authentik (requires authentik-server.conf in the server block)
        #include /config/nginx/authentik-location.conf;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app adguard;
        set $upstream_port 3000;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }

    location /control {
        auth_request /tinyauth;
        error_page 401 = @tinyauth_login;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app adguard;
        set $upstream_port 3000;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }

    location /dns-query {
        # to properly use this please set `allow_unencrypted_doh: true` and `force_https: false` in adguard
        # see https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration#configuration-file
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app adguard;
        set $upstream_port 3000;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }
}

::note{to="/serveex/security/tinyauth#exposing-tinyauth-with-swag"}

Le bloc location /tinyauth s'exécute dans le conteneur de SWAG lui-même, SWAG doit donc être sur le réseau Docker de TinyAuth pour le joindre par son nom (tinyauth ici). Cela devrait déjà être en place depuis l'exposition de TinyAuth. Si vous rencontrez une erreur, revérifiez que le fichier compose de SWAG a toujours ce réseau rattaché. ::

::tip{icon=""} Astuce :

Vous pouvez protéger cette app avec Authentik en ouvrant adguard.subdomain.conf et en retirant les # devant include /config/nginx/authentik-server.conf;{lang=nginx} et include /config/nginx/authentik-location.conf;{lang=nginx}. n'oubliez pas de créer une application et un fournisseur dans Authentik. Il vous faudra exclure l'url https://adguard.mondomaine.fr/dns-query de l'authentification :

  • Editez le fournisseur d'Adguard
  • Dans paramètres avancés du protocole > chemins authentifiés, saisissez ^/dns-query ::

Enregistrez avec :kbd{value="Ctrl+O"} puis :kbd{value="Entrée"}, puis quittez avec :kbd{value="Ctrl+X"}.

Et voilà, vous exposez Adguard à présent !

Configurer le chiffrement SSL/TLS

Le chiffrement est essentiel si vous souhaitez garder privées les requêtes que vous faites vers adguard. Chiffrer ces requêtes c'est vous assurez que personne, meme votre FAI ne connaissent votre historique. C'est aussi vous assurer que personne d'autre que votre serveur vous répond.

Afin de configurer le chiffrement :

  • Allez dans paramètre puis dans chiffrement.
  • Parametrez comme suit

Picture

  • Puis en dessous, dans la section certificats cochez Définir un emplacement de fichier du certificat
  • Dans le champs de saisie, mettez /swag-ssl/live/mondomaine.fr/fullchain.pem en remplaçant mondomaine.fr par votre domaine principal.
  • Dans clé privée cochez Définir un fichier pour la clef privée
  • Dans le champs de saisie, mettez /swag-ssl/live/mondomaine.fr/privkey.pem en remplaçant mondomaine.fr par votre domaine principal.
  • Validez

Et voilà ! Vous avez protégé vos futures requêtes DNS !

Configurer les appareils

Pour configurer vos appareils, vous avez plusieurs choix (que vous pouvez cumuler).

Sécuriser le réseau local

Vous pouvez sécuriser votre réseau local avec adguard en configurant votre box pour que chaque requête DNS soit dirigée par défaut vers adguard plutot que les services de votre FAI. Attention, votre box doit pouvoir permettre le changement de DNS (Orange ne le permet pas).

Généralement cette option est dans les paramètres DHCP de votre box. Pensez bien à ajouter un serveur secondaire tel que :

  • Cloudlare : 1.1.1.1
  • Google : 8.8.8.8

En effet, sans cela, si votre serveur tombe, vos appareils n'arriveraient plus à se connecter à internet.

::note

Des appareils peuvent avoir un autre DNS paramétré et ne pas utiliser ceux de la box. ::

Forcer un navigateur à utiliser Adguard

Dans votre navigateur, vous pouvez configurer un DNS pour le forcer à utiliser adguard home. Dans les paramètres, il vous faudra renseigner l'adresse https://adguard.mondomaine.fr/dns-query

Windows, paramétrer Adguard au niveau système

Dans windows, vous devez paramétrer Adguard pour chaque carte réseau que vous souhaitez utiliser.

  • Rendez vous dans accueil > Réseau et internet > et choisissez votre carte réseau à modifier
  • Cliquez sur modifier les DNS (parfois dans propriété du matériel)
  • Choisissez Manuel
  • Activez IPv4
  • Renseignez l'IP publique de votre serveur (celle accessible depuis internet)
  • Activez DNS sur HTTPS (modèle manuel)
  • Désactivez retour au texte en clair
  • Enregistrez

Tous les programmes de votre machine utilisant cette carte réseau seront filtrés par Adguard.

Ajouter des filtres

  • Allez dans les paramètres et changez les filtres.