PiHole, un excellent bloqueur de publicité
Installation de PiHole, un excellent bloqueur de publicité et de trackers avec docker en quelques minutes pour rendre votre internet plus propre.
Bonjour,
Tiens c'est bizarre, y'a un autre post sur AdGuard qui a le même titre. Oui, je n'ai pas réussi à choisir et au final j'utilise les deux, ça me permet d'avoir une certaine redondance même si c'est certainement inutile. Lequel des deux est le mieux ? En résumé, AdGuard est simple de prise en main avec une interface logique et épurée alors que Pihole est plus complexe mais dispose de plus de données et de choix. A noter que AdGuard propose nativement DoH & DoT ce qui pour beaucoup fera pencher très fortement la balance.
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 ################################################# pihole: # Pihole - Remove ads via DNS # https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/ # https://hub.docker.com/r/pihole/pihole # Image :nightly container_name: pihole image: pihole/pihole:latest restart: unless-stopped #security_opt: # - no-new-privileges:false networks: - backend ports: - "$PIHOLEDNS_PORT:53/tcp" - "$PIHOLEDNS_PORT:53/udp" - "67:67/udp" - "$PIHOLEHTTP_PORT:80/tcp" - "$PIHOLEHTTPS_PORT:443/tcp" volumes: - '$USERDIR/PiHole/etc-pihole/:/etc/pihole/' - '$USERDIR/PiHole/etc-dnsmasq.d/:/etc/dnsmasq.d/' environment: TZ: $TZ #WEBPASSWORD: $PIPASS #Use for the first run to define your password # Recommended but not required (DHCP needs NET_ADMIN) # https://github.com/pi-hole/docker-pi-hole#note-on-capabilities cap_add: - NET_ADMIN - SETUID - SETGID dns: - 127.0.0.1 - 192.168.1.1
J'utilise toujours la même structure pour mes VMs / containers. En plus de PiHole, 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=PiHole ############## PORTS ########################### PORTAINER_PORT=9000 PORTAINERSERVER_PORT=8000 DOZZLE_PORT=8071 PIHOLEHTTP_PORT=80 PIHOLEHTTPS_PORT=443 PIHOLEDNS_PORT=53 PIPASS=password
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 Pihole, il faut vous rendre sur http://votreip/admin. Soit vous avez défini un mot de passe via votre docker, soit il faudra aller l'indiquer via la console du container.
pihole -a -p somepasswordhere
Via la console de portainer, voici ce que ça donne:
Pour la configuration, c'est ultra simple, il suffit de se rendre dans Settings/DNS et de choisir votre DNS :
Sur la même page, je vous conseille de cocher ces options :
Pour rajouter des blocklists, il faut vous rendre dans Group Management/Adlists :
Je vous conseille les listes de Firebog.
Et voila, vous avez un DNS Blacklist fonctionnel qui va vous permettre de filtrer la majeure partie des pubs et des trackers sur le net !
@+