Drücken sie Ctrl/Cmd + P zum drucken
oder zum Speichern als PDF.

Pi-hole: Werbeblocker für das eigene Netzwerk einrichten

Der Pi-hole ist ein Filter, der Werbung oder Tracker direkt im lokalen Netzwerk blockt. Dabei fungiert Pihole als DNS-Server. Hinter jeder Domain-Adresse verbirgt sich ja eine IP-Adresse und im Domain Name System (DNS) sind diese Verknüpfungen hinterlegt. Beim Aufruf einer Website fragt der Router also zunächst diese Informationen bei einem öffentlichen DNS-Server ab und gibt diese an den Browser zurück, damit dieser dann den Webserver kontaktieren kann. Meist ist das der DNS-Server des Zugangsproviders, sehr gerne wird aber auch der Google-DNS 8.8.8.8 verwendet. Hierbei muss man sich natürlich aus Datenschutzgründen selbst fragen, ob Google jede abgefragte Adresse zu wissen bekommen soll… ;-) Genauso funktioniert die DNS-Auflösung natürlich bei allen anderen Domain-/IP basierten Internet-Anwendungen.

Der Pi-hole übernimmt nun die Aufgabe der DNS-Auflösung und gleicht vor der Weitergabe an die öffentlichen DNS-Server die anforderte Domain-Adresse mit den internen Filterlisten ab. Aktuell sind in den Filterlisten mehr als 130.000 Domainnamen eingetragen, die Werbung ausliefern oder den User/das Gerät tracken. Steht eine Domain auf einer der Filterlisten, dann gibt der Pi-hole einfach seine eigene lokale IP-Adresse zurück. Pi-hole liefert dann auf Anfrage eine leere Antwort. Anstelle eines Werbebanners erscheint somit auf der Website einfach gar nichts.

Der Pi-hole ist somit ein kleiner DNS-Server, der einfach auf einem Raspberry Pi installiert wird und mittels Filterlisten Werbung und Tracker blockiert. Im Router muss man dazu einfach nur die lokalen IP-Adresse vom Pi-hole als DNS-Server eintragen.

Voraussetzungen

  • Raspian OS Bullseye
  • eingerichteter Apache2 Webserver (2.4.18 oder höher)

Konsolenbefehle

  • curl -sSL https://install.pi-hole.net | bash – Pi-hole installieen
  • pihole uninstall – deinstallieren
  • pihole -up – updaten
  • pihole version – Version anzeigen

Pi-hole installieren

  • curl -sSL https://install.pi-hole.net | bash
  • der Raspberry benötigt eine feste IP-Adresse, je nach eigenem Setting ist dies während der Installation auszuwählen / zu ändern
  • als Upstream-DNS kann die IP-Adresse des eigenen Router eingeben werden (Custom)
  • Admin Web interface installieren, um Pihole später über den Browser verwalten zu können
  • falls kein Apache in Betrieb ist, lighttpd als Webserver installieren, ansonsten nicht auswählen
  • query logging nicht aktivieren (kann später nachgeholt werden)
  • privacy mode for FTL – gibt an welche Angaben der Verbindungen später im Logfile zu sehen sind – je nach Bedürfnis, bei mir Show everything
  • während der Installation wird das Passwort angezeigt, mit dem man sich bei Pi-hole einloggen kann, verpasst man diese Angabe oder wird sie nicht eingeblendet, kann das Passwort nach der Installation über sudo pihole -a -p neu vergeben werden

Apache2 einrichten

  • den Pihole Benutzer der Webservergruppe hinzufügen (für Apache2)
    • sudo usermod -a -G pihole www-data
  • config-File anlegen
    • sudo nano /etc/apache2/sites-available/pihole.conf
  • für netzwerkbeschränkten Zugriff folgende Zeilen einfügen (eigene Netzadresse anpassen)
<IfModule alias_module>
    Alias /admin /var/www/html/admin
    <Directory "/var/www/html/admin">
        AllowOverride None
        Options None
        Order deny,allow
        Allow from 192.168.1.0/24 localhost 127.0.0.1
        #Allow from all
        Deny from all
    </Directory>
</IfModule>
  • config aktivieren
    • sudo a2ensite pihole.conf
  • config testen und Apache2 neu laden
    • sudo apachectl configtest && sudo service apache2 reload

Pihole aufrufen

  • http(s)://IP-Adresse_RPi4/admin

Konfiguration

Adlists

  • https://www.github.developerdan.com/hosts/lists/ads-and-tracking-extended.txt – Adds & Tracking
  • https://www.github.developerdan.com/hosts/lists/dating-services-extended.txt – Dating Services
  • https://easylist.to/easylist/easylist.txt – Browser Adds
  • unter Tools – Update Gravity – Update – aktivieren
  • weitere Listen unter https://firebog.net/

DNS

  • Settings – DNS
  • Upstream DNS Server
    • Custom 1 (IPv4) – 46.182.19.48
    • Upstream 2 (IPv4) – 185.95.218.42
    • Custom 3 (IPv6) – 2a10:50c0::1:ff
    • Custom 4 (IPv6) – 2a01:4f8:151:34aa::198
  • Conditional Forwarding – eigenes lokales Netz und DHCP Server eintragen
  • DNS bei Verwendung von Docker im Bridge Mode
    • Interface Settings – Recommended setting von Allow only local requests auf Respond only on interface eth0 setzen, da sonst die Clients im lokalen Netzwerk nicht von Pi-hole gefiltert werden (Bridge Netzwerk hat meistens ein anderes Netz als das eigene lokale)

Probleme

  • falls bei der Speicherung der Konfiguration in Pihole eine Fehlermeldung auftaucht, kann es hilfreich sein den Apache Benutzer (www-data), der Pihole Gruppe hinzuzufügen.
    • sudo usermod -a -G pihole www-data
  • Fehlermeldung:
    • pihole-FTL[549]: dnsmasq: failed to create listening socket for port 53: Address already in use
    • pihole FATAL ERROR in dnsmasq core: failed to create listening socket for port 53: Die Adresse wird bereits verwendet
    • PHP error (2): fsockopen(): unable to connect to 127.0.0.1:4711 (Connection refused) in /var/www/html/admin/scripts/pi-hole/php/FTL.php:47
  • Fehler: DNS Proxy von ConnMan belegt den Port 53 und muss ausgeschaltet
  • Fehlerbehebung: Ordner inkl. Datei anlegen
    • sudo mkdir /etc/systemd/system/connman.service.d/
    • sudo nano /etc/systemd/system/connman.service.d/disable_dns_proxy.conf
    • u.a. Zeilen einfügen und rebooten (sudo reboot -n – Raspberry rebooten)
[Service]
ExecStart=
ExecStart=/usr/bin/connmand -n --nodnsproxy

Quellen