Pihole est un service de cache DNS avec un blocage natif des domaines publicitaires.
Originaire du raspberry pi, un tuto en installation normale est dispo avec des détails.
Le backend utilisé est DNSmasq qui gère les DNS et peut également faire serveur DHCP ou relay.
Il est possible de surclasser une résolution dns vers une IP ou CNAME. Pratique pour un serveur à la maison et ne pas passer par la boucle locale du routeur. Et encore mieux quand la box du FAI n’en a même pas…

Une alternative évoquée de manière plus professionnelle est dnsadblock qui est une solution payante mais sans avoir de gestion à faire, juste des dns et DoH dispo.
Il existe aussi quad9 qui block des domaines malicieux gratuitement.

Configuration docker-compose Pihole

Configuration pihole simple

Fichier docker compose de base (sans dhcp) en écoute sur port 2080 en http :

version: '3.7'

services:
  pihole:
    image: pihole/pihole:latest
    container_name: pihole
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      #- "67:67/udp"
      - "2080:80/tcp"
      #- "2443:443/tcp"
    volumes:
      - '/var/lib/docker/data/pihole/etc-pihole/:/etc/pihole/'
      - '/var/lib/docker/data/pihole/etc-dnsmasq.d/:/etc/dnsmasq.d/'
    environment:
      TZ: 'Europe/Paris'
      ADMIN_EMAIL: 'YOUR_EMAIL'
      WEBPASSWORD: 'TEMP_ADMIN_PASSWORD'
      VIRTUAL_HOST: pihole.domain.tld

    restart: unless-stopped

Après le premier démarrage et configuration on peut changer le mot de passe admin avec cette commande pour ne pas le laisser traîner dans le fichier de configuration : docker exec -it pihole pihole -a -p

Configuration Pihole avec Traefik

Fichier docker avec configuration de traefik devant l’interface web et les dns cloudflare de choisi :

version: '3.7'

networks:
  proxy-net:
    external: true

services:
  pihole:
    image: pihole/pihole:latest
    container_name: pihole
    ports:
      - "53:53/tcp"
      - "53:53/udp"
    volumes:
      - '/var/lib/docker/data/pihole/etc-pihole/:/etc/pihole/'
      - '/var/lib/docker/data/pihole/etc-dnsmasq.d/:/etc/dnsmasq.d/'
    environment:
      TZ: 'Europe/Paris'
      ADMIN_EMAIL: 'YOUR_EMAIL'
      WEBPASSWORD: 'tttttt'
      DNS1: '1.1.1.1'
      DNS2: '1.0.0.1'
      VIRTUAL_HOST: 'pihole.domain.tld'

    networks:
      - proxy-net
    restart: unless-stopped

    labels:
      - traefik.http.services.pihole.loadbalancer.server.port=80
      - traefik.http.routers.pihole.entrypoints=websecure
      - traefik.http.routers.pihole.tls.certresolver=le
      - "traefik.http.routers.pihole.rule=Host(`pihole.domain.tld`)"
      - "traefik.http.routers.pihole.middlewares=home-whitelist@file"

Configuration de PiHole via l’interface web

DNS forwarder

Si ce n’est déjà fait via les variables docker, on change les DNS utilisés, car ceux par défaut sont ceux de Google… Pour quelque chose évitant la pub, c’est un peu contradictoire…
Aller dans Settings > onglet DNS
Il est possible de prendre Google, OpenDNS, Level3, Comodo, DNS.WATCH, quad9, cloudflare ou bien des serveurs dns customisés.
settings pihole

Voici une liste des serveurs et leurs qualités, tel que la vie privée :

Pour plus d’info, un bon article décrivant les qualités de chacun de ces fournisseurs de DNS gratuits.

Liste de serveurs DNS publiques leurs qualités et vie privée

Les DNS customisés sont pratiques si vous voulez chainer avec un bind9 ou powerDNS et beaucoup de dns internes.
Pour une utilisation domestique, tout est prévu dans l’interface pour le faire directement.

résolution dns locaux

C’est une partie qui va remplacer mon serveur bind9 interne, que j’utilisais pour résoudre des services « cloud » maison via leur IP locale quand on est à la maison et l’ip publique quand on est à l’extérieur.
résolution dns locaux avec Pihole

gestion de listes supplémentaires

Il est possible d’ajouter des listes d’hosts à blacklisté autres que la pub, comme les fakenews, réseaux sociaux, porno, etc.
Il est possible de bloquer certaines catégories uniquement pour un certain group d’host.

De base, lorsqu’une url est ajoutée, elle s’applique à tous les clients, qui sont par défaut dans le gorupe « default ».

Une liste des catégories disponibles par la communauté se trouvent sur le github de StevenBlack.

Le site firebog regroupe des listes par catégories dangeureux, publicitaire, tracking

  1. J’ajoute donc la liste https://raw.githubusercontent.com/StevenBlack/hosts/master/extensions/fakenews/hosts dans Group Management > Adlists
    Ajouter des listes de domaines de pub dans Pihole
  2. Ensuite on fait un update manuel pour avoir la nouvelle liste
    Mise à jour de la liste des domaines bloqués avec Gravity
  3. un test avant/après :
    Test de blocage dns pihole

Gestion des groupes

  1. Création d’un groupe « restricted »
    groupe restreint
  2. On met un client dans ce groupe: en sélectionnant un client connu du serveur dns et en l’associant au groupe « restricted » uniquement. Attention à bien valider
    ajout client à un groupe
  3. On ajouter la liste gambling et on sélectionne uniquement pour le groupe « restricted », et on ajoute les 2 autres listes au groupe « restricted » également
    ajout de liste de blocage à un groupe
  4. On fait une mise à jour de Gravity
  5. Les clients de base ont une blackliste adware+walware+fakenews et le client « domopi » adware+walware+fakenews+gamebling

Application Android Pi-hole Connect

Une application Android Pi-hole Connect est également disponible afin de gérer facilement une mise en pause du blocage, ajouter un domaine à la whitelist ou actualiser les filtres par exemple.
Pi-hole Connect Pi-hole Connect top blocked blacklist

Summary
Se passer de publicité et sites malicieux avec Pihole
Article Name
Se passer de publicité et sites malicieux avec Pihole
Description
Pihole est un service de cache DNS avec un blocage natif des domaines publicitaires, originaire du raspberry pi. Pratique pour un serveur à la maison et éviter d'être bloqué aux DNS de son fournisseur d'accès internet. Des domaines malicieux sont également bloqués via quad9 au besoin.
Author