Internet-Werbung blockieren im ganzen Netzwerk - Pi-hole/Docker
Durch die Verwendung eines Adblockers ist es möglich einen Großteil der angezeigten Werbung im Internet auszublenden. Wer für sein Heimnetzwerk einen zentralen Adblocker sucht, sollte sich den Werbeblocker Pi-hole ansehen. Pi-hole ist ein Open-Source DNS-Server mit integriertem Tracking- und Werbeblocker. Pi-hole läuft auf den gängigen Linux-Systemen und kann somit unter anderem auf einem Raspberry-Pi oder in einem Docker-Container betrieben werden. Docker Basics
Ein Container ist eine vom Betriebssystem (OS) unabhängige isolierte Umgebung:
Beim ersten Start eines Containers, lädt Docker selbstständig alle notwendigen Quellen
aus dem Internet.
Docker kann unter Windows, macOS oder einer Linux-Distribution installiert werden,
siehe auch: Docker
Damit die DNS-Anfragen aller Geräte im Netzwerk von Pi-hole beantwortet werden, kann die IP-Adresse von Pi-hole als DNS-Server zentral am Router hinterlegt werden. Geräte mit automatischer Adressvergabe: DHCP, verwenden dadurch Pi-hole als DNS und somit dessen Werbefilter. Als Beispiel kann in der freien Router-Firmware OpenWRT der DNS wie folgt angepasst werden: /openwrt-mein-setup#dns. Ich verwende Pi-hole als Docker-Container auf meiner NAS, siehe auch: NAS selber bauen: flexibel, stromsparend und billig [HowTo].
docker-compose.yml
Nachdem der Port 80 auf meiner NAS bereits anderweitig besetzt ist, verwende ich eine leicht angepasste Version der docker-compose.yml des Herstellers:
version: "3"
# More info at https://github.com/pi-hole/docker-pi-hole/ and https://docs.pi-hole.net/
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
- "53:53/tcp"
- "53:53/udp"
- "67:67/udp"
- "84:80/tcp"
environment:
TZ: 'Europe/Amsterdam'
WEBPASSWORD: 'password'
# Volumes store your data between container upgrades
volumes:
- './etc-pihole/:/etc/pihole/'
- './etc-dnsmasq.d/:/etc/dnsmasq.d/'
# Recommended but not required (DHCP needs NET_ADMIN)
# https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
cap_add:
- NET_ADMIN
restart: always
In der Datei wird der Port 84 auf 80 gemappt. Entsprechend ist die Admin-Oberfläche später unter der IP-Adresse der NAS mit Port 84 erreichbar. Zudem habe ich die Variable "WEBPASSWORD" mit einem sicheren Kennwort befüllt. Das Beispiel verwendet Bind-Mounts und keine Docker Volumes für das permanente Speichern der Daten. Siehe: Docker Daten speichern: Docker Volumes vs. Host-Ordner
Der Start des Containers im Terminal erfolgt mit folgendem Befehl:
docker compose up -d
Beim ersten Start hatte ich dann noch ein Problem mit dem Port 53, dieser war auf meiner NAS bereits belegt:
Ubuntu/Debian Port 53 besetzt
Da meine NAS Debian verwendet, blockiert der Dienst systemd-resolv den DNS-Port 53. Damit sich für den Pi-hole-Docker-Container der Port 53 nutzen lässt, habe ich den systemd-resolved-Service deaktiviert.
user@rechner:/docker/pi-hole$ sudo netstat -tulpn | grep LISTEN
...
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 1279/systemd-resolv
...
user@rechner:/docker/pi-hole$ sudo systemctl disable systemd-resolved.service
Removed /etc/systemd/system/dbus-org.freedesktop.resolve1.service.
Removed /etc/systemd/system/multi-user.target.wants/systemd-resolved.service.
user@rechner:/docker/pi-hole$ sudo systemctl stop systemd-resolved
Admin-Oberfläche
Der Aufruf der Admin-Oberfläche erfolgt im Browser mit der IP-Adresse der NAS und den zuvor verwendeten Port 84:
http://x.x.x.x:84/admin
Pi-hole verwendet eine vordefinierte Blacklist und zeigt bereits auf der Startseite Statistiken zu den Clients und den erlaubten, sowie blockierten Domains:
Zusätzlich zu Pi-hole verwende ich aktuell noch die DNS-Server von OpenDNS als Upstream DNS-Servers um nicht jugendfreie Inhalte aus dem Heimnetzwerk möglichst zu verbannen, siehe auch: kindersicheres Internet über das Heimnetzwerk - DNS am Router.
In Pi-hole befindet sich die Einstellung für den Upstream DNS Server unter Settings/DNS:
{{percentage}} % positiv