Pi-Hole – Werbeblocker für das Heimnetz
Ich möchte euch dieses spannende kleine Tool namens Pi-Hole nicht vorenthalten und beschreibe in diesem Beitrag wie ihr in eurem Heimnetz einen auf DNS basierten Werbeblocker (oder auch Adblocker genannt) installieren könnt. Pi-Hole schützt dabei euer komplettes Heimnetz vor Werbung.
Browser Addons wie Adblock Plus oder uBlock Origin werden mit dieser Methode hinfällig. Auch Handys oder Tablets sind automatisch von Werbung befreit.
Pi-Hole wurde für einen Raspberry Pi entwickelt, läuft aber nicht nur unter Raspbian oder Xbian, sondern auch auf anderen Debian Distributionen ohne weitere Probleme.
Was ist das?
Im Grunde besteht Pi-Hole es aus einem Dnsmasq und Lighttpd Dienst.
Pi-Hole füttert Dnsmasq mit einer Liste von über 100.000 Domainnamen die Werbung ausliefern oder Telemetriedaten von Benutzern sammeln möchten. Ein Lighttpd Webserver wird installiert um Statistiken und Query Logs anschaulich darzustellen.
Wie funktioniert das?
Die PI-Hole IP-Adresse wird mittels DHCP automatisch oder manuell auf den Clients konfiguriert. Ab sofort geht jede DNS Anfrage wie z.B. http://adminforge.de nicht mehr wie gewohnt zum DNS Server eures Providers sondern zum Pi-Hole Server in eurem Heimnetz. Dort wird die aufgerufene Domain sowie alle verlinkten Domains mit einer Liste an Domainnamen verglichen und bei Match direkt auf dem Pi-Hole Server geblockt. Alle gültigen Anfragen werden wie gewohnt an den Client ausgeliefert.
Punkt 1: Installation von Pi-Hole
Ich gehe davon aus euer Raspbian oder Debian Betriebssystem ist installiert und ihr kennt euer Netzwerkinterface (meist wlan0 oder eth0).
Installiert zuerst curl:
1 | apt-get install curl |
Nun kann auch schon die Pi-Hole Installation losgehen:
1 | curl -L https://install.pi-hole.net | bash |
Im nachfolgenden Installationsmenü immer Weiter drücken bis das Netzwerkinterface zur Asuwahl steht.
Dort euer genutztes Interface auswählen wo eure IP-Adresse konfiguriert ist wlan0 oder eth0.
Nun könnt ihr DNS Server festlegen, wählt Custom aus und fügt die DNS IP-Adressen aus dem Router ein.
Beispiel FRITZ!Box:
Unter http://fritz.box im Menüpunkt Internet -> Online-Monitor -> Genutzte DNS-Server findet ihr zwei DNS IP-Adressen die ihr im Pi-Hole hinterlegt.
Drückt <Weiter> bis die Installation abgeschlossen ist.
Punkt 2: Webinterface aufrufen
Im Browser kann nun das Admin Webinterface aufgerufen werden.
1 | http://192.168.1.x/admin or http://pi.hole/admin |
Punkt 3: Lokaler DNS-Server im Router einstellen
Nun könnt ihr den Pi-Hole im Heimnetz als DNS-Server eintragen. Ich führe das anhand eines Beispiel-Routers auf.
Beispiel FRITZ!Box:
Unter http://fritz.box im Menüpunkt Heimnetz -> Heimnetzübersicht -> Netzwerkeinstellungen scrollt herunter auf IPv4-Adressen und legt in der Zeile Lokaler DNS-Server die IP-Adresse eures Pi-Hole Servers fest.
Nach dem Klick auf OK könnt ihr das WLAN am Handy oder Rechner aus- und wieder einschalten und Werbefrei surfen.
Punkt 4: Cronjob anpassen (veraltet !)
In der Datei /etc/cron.d/pihole kommentieren wir Zeile 22 ein und aktivieren somit ein wöchentliches Update von Pi-Hole.
Ein manuelles Update ist mit pihole -up möglich.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # Pi-hole: A black hole for Internet advertisements # (c) 2015, 2016 by Jacob Salmela # Network-wide ad blocking via your Raspberry Pi # http://pi-hole.net # Updates ad sources every week # # Pi-hole is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # This file is under source-control of the Pi-hole installation and update # scripts, any changes made to this file will be overwritten when the softare # is updated or re-installed. Please make any changes to the appropriate crontab # or other cron file snippets. # Pi-hole: Update the ad sources once a week on Sunday at 01:59 # Download any updates from the adlists 59 1 * * 7 root /usr/local/bin/pihole updateGravity # Pi-hole: Update Pi-hole! Uncomment to enable auto update 30 2 * * 7 root /usr/local/bin/pihole updatePihole # Pi-hole: Flush the log daily at 00:00 so it doesn't get out of control # Stats will be viewable in the Web interface thanks to the cron job above 00 00 * * * root /usr/local/bin/pihole flush |
Danach starten wir den Crond neu.
1 | service cron restart |
Punkt 5: Listen hinzufügen (Update 15. März 2019)
Wir holen uns die folgende Datei von der firebog.net Webseite:
1 | wget "https://v.firebog.net/hosts/lists.php?type=nocross" -O /etc/pihole/adlists.list |
Danach lesen wir die Listen mit folgendem Befehl ein:
1 | pihole -g |
Nun sollten wir etwas über 1 Millionen Domains in der Blockliste haben.
Punkt 6: Munin Plugin (optional)
Eine kleine Eigenkreation um auch über einen längeren Zeitraum grafisch alles festzuhalten. (nicht schön aber funktionell)
Pi-Hole Stats:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #!/bin/sh # Munin plugin displaying Pi-Hole Stats # by Dominion http://adminforge.de # v1.0 case $1 in config) cat <<'EOM' graph_title Pi-Hole Stats graph_info Displays details of Pi-hole graph_vlabel pi-hole graph_category pi-hole blocked.label Ads Blocked blocked.info Number of Ads Blocked. query.label Query query.info Number of Query look ups. forwarded.label Forwarded forwarded.info Number of forwarded look ups. cached.label Cached cached.info Number of cached look ups. reply.label Reply reply.info Number of reply look ups. EOM exit 0;; esac awk 'match($0,/ \/etc\/pihole\/gravity.list | query\[.*\] | forwarded | cached | reply /){y=substr($0,RSTART,RLENGTH);if(y ~ /^ query/)y="query";a[y]++} END{for (x in a) {y=x;gsub(/^[ \t]+/,"",x);gsub(/[ \t]+$/,"",x);if(x=="/etc/pihole/gravity.list")x="blocked";print x ".value " a[y]}}' /var/log/pihole.log |
Pi-Hole Domains Being Blocked:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/bin/sh # Munin plugin displaying Pi-Hole Domains Being Blocked # by Dominion http://adminforge.de # v1.0 case $1 in config) cat <<'EOM' graph_title Pi-Hole Domains Being Blocked graph_info Displays details of Pi-hole graph_vlabel pi-hole domains graph_category pi-hole domainsblocked.label Domains Being Blocked domainsblocked.info Number of Domains Being Blocked. EOM exit 0;; esac cat /etc/pihole/gravity.list | wc -l | awk -F "[ \t\n/,]+" '{ print "domainsblocked.value "$1""; exit; }' |
Weitere nützliche Anleitungen:
- Pi-hole auf Synology NAS installieren (extern)
- Webinterface mit Passwort versehen (extern)
- Pi-Hole – Keepalived für die Hochverfügbarkeit
- Pi-Hole – IPv6 und die Fritz!Box
Das Betreiben der Dienste, Webseite und Server machen wir gerne, kostet aber leider auch Geld. Unterstütze unsere Arbeit mit einer Spende. |
Dickes Dankeschön für das Munin-Plugin! Das Admin-Tool von Pihole ist sehr gut, aber jetzt passt alles perfekt in mein Munin-System für das gesamte LAN
Super :)))
Geht das auch wenn Librelec installeirt ist?
Danke für deinen Artikel, es ist alles sehr verständlich beschrieben 🙂
Gruß Artur
Ja, und es „convertiert“ IPv6 DNS zu IPv4 DNS was praktisch ist wen man noch Windows Server 2003 im einsatz hat aber schon bei Windows 10 angekommen ist 🙂
Danke für die Anleitung.
Ich habe leider eine alte Fritzbox ( 7240) und dadurch kann ich Punkt 3 nicht befolgen.
Heimnetz -> Heimnetzübersicht -> Netzwerkeinstellungen ->IPv4 (Der Pfad ist bei mir auch etwas anders)
„Lokaler DNS-Server“ taucht da leider nicht auf. Zwar könnte ich bei jedem Gerät alles mit der Hand ändern, aber das ist ja auch nicht so schön. Gibt es da eine einfache Lösung?
Da smüsste in den Verbindungseinstellungen irgendwo stehen, wird immer auf „DNS Server“ hinauslaufen.
Gibt es eine kleines Howto für die Munin-Stats? 🙂
Du meinst generell wie man Munin installiert ?
Alternativ habe ich jetzt Grafana im Einsatz anstelle von Munin, sieht dann so aus: http://play.grafana.org/
Hallo, wie genau installiert man das Munin Plugin?
Einfach die Python Skripte in eine Datei und fertig oder was genau muss man machen?
Ne kleine Erklärung wäre super! 😉
Am besten auf Basis von Apache2 und PHP5 😀
Hallo,
weiß jemand wie man bei der FritzBox den PiHole als DNS Server einrichten kann, wenn man eine Verbindung zu der FritzBox per VPN herstellt? Bei VPN fungiert immer die FritzBox als DNS Server.
Hallo Alex,
je nach Betriebssystem anders. Unter Android bei der VPN Einstellung auf „Erweiterte Optionen“ klicken und dort unter DNS die Pi-Hole IP Adresse eintragen.
Gruß,
Dominion
Kleiner Hinweis für alle, die keinen DNS-Server im Router einstellen können: Pihole kann einen eigenen DHCP-Server liefern. Ich habe einfach im Router den DHCP-Server ausgeschaltet und im Pihole den DHCP-Server mit dem selben Adressbereich aktiviert. Funktioniert wunderbar.
Ich wollte schon meinen simplen O2-Router ersetzen. Das ist nun gar nicht nötig.
There may be noticeably a bundle to find out about this. I assume you made sure nice factors in features also.