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
Unterstütze unsere Arbeit mit einer Spende. |