DecaTec

Programmieren, Fotografie, Home-Server und einiges mehr

Nie mehr Werbung – Pi-hole auf Ubuntu Server 18.04

Pi-hole Logo

Wer kennt das nicht: Wenn man sich durch das Internet bewegt, wird man unweigerlich mit Werbung konfrontiert. Wenn diese Werbung eher dezent platziert ist, sollte dies nicht weiter stören. Leider gibt es immer mehr Webseiten, die den Bogen überspannt haben. Spätestens, wenn der Lesefluss durch übermäßige Werbung gestört wird, möchte man die Webseite am liebsten sofort wieder verlassen.

Werbebanner sind dabei allerdings noch das kleinere Übel: Bedenklich wird es spätestens beim sog. Malwaretising (Verteilung von Schadcode über Online-Werbung) oder dem Einsatz von Mining-Code auf Webseiten (Code, der im Hintergrund – und meist ohne Wissen der Website-Besucher – Mining für Kryptowährungen ausführt). Das Tracking von Benutzern ist ein weiteres Thema, welches den meisten Nutzern nicht recht sein dürfte.

Werbeblocker (Adblocker) wirken diesen Problemen entgegen: Meistens sind dies Erweiterungen für den Browser, die Werbung und Schadcode im Hintergrund blockieren. Die bekanntesten Vertreter sind hier wohl AdBlock Plus und uBlock Origin. Diese Erweiterungen wirken allerdings nur im Browser, für den sie installiert wurden.

Doch nicht nur Browser sind von der Problematik betroffen. Sämtliche Geräte, die mit dem Internet verbunden sind, wollen meist „nach Hause telefonieren“. So sendet ein Windows-PC regelmäßig Telemetrie-Daten zu Microsoft. Spätestens seit Windows 10 lässt sich dieses Verhalten nicht mehr komplett abschalten. Ich spreche hier absichtlich von Geräten (und eben nicht von Computern), da dies auch auf andere Geräte-Klassen zutrifft. Man denke hier z.B. an Streaming-Multimedia-Systeme oder auch LED-Lichterketten, die komfortabel mit dem Handy bedient werden können.
Irgendwie kommunizieren solche Geräte immer mit irgendwelchen Webdiensten, ohne dass dies dem Nutzer klar ist oder er dieses Verhalten abschalten könnte.

Pi-hole: Ein Adblocker für das gesamte Netzwerk

Pi-hole ist ein Projekt zum Blockieren von Werbung, Schadcode und Trackern. Im Unterscheid zu Browser-Addons wird Pi-hole nicht Client-seitig installiert (wie z.B. als Addon im Browser), sondern wirkt Netzwerk-weit. Dazu wird das Programm einfach auf einem Rechner im Netzwerk installiert .Ursprünglich war dafür ein Raspberry Pi (Affiliate Link), vorgesehen, was sich ja schon aus dem Namen des Projekts erahnen lässt. Pi-hole läuft mittlerweile allerdings auf den verschiedensten (Linux-)Plattformen.

Einmal installiert und eingerichtet, blockiert das Programm unerwünschte Werbung und Schadcode – und zwar im kompletten Netzwerk. Als praktisches Beispiel sei hier der Browser Chrome auf einem Android Smartphone erwähnt: In der mobilen Variante können keine Addons genutzt werden, die man von der Desktop-Version kennt. Daher wird man im mobilen Chrome immer Werbung angezeigt bekommen. Nicht jedoch, wenn Pi-hole im gleichen Netzwerk installiert ist, über das das Smartphone mit dem Internet verbunden ist. Dann wird Werbung ohne weiteres Zutun des Nutzers auch im mobilen Browser blockiert – quasi von Geisterhand.

Ein paar Anmerkungen vorweg

Wenn ihr dem Tutorial folgt, dann müsst ihr euch folgender Punkte bewusst sein:

  • Mit der Installation von Pi-hole als Netzwerk-weiten Adblocker greift ihr tief in die Netzwerk-Infrastruktur ein. Wenn hier irgendetwas nicht klappen sollte, dann ist das komplette Netzwerk offline, d.h. es kann nicht mehr gesurft werden, da keine Domains mehr aufgelöst werden können.
  • Dessen solltet ihr euch bewusst sein und auch einen „Plan B“ haben, mit dem ihr die Änderungen durch Pi-hole wieder rückgängig machen könnt. Dies hängt wiederum von der Variante ab, die ihr gewählt habt, um Pi-hole im Netzwerk als DNS-Server zu installieren (siehe Abschnitt Netzwerk-Konfiguration).
  • Die Maschine mit Pi-hole muss immer laufen. Sollte die Maschine mal nicht verfügbar sein (Absturz oder auch nur ein kurzer Reboot), dann ist das Netzwerk in dieser Zeit offline.
  • Ich versuche hier eine möglichst detaillierte Anleitung für die Installation von Pi-hole zu liefern. Trotzdem kann ich nicht garantieren, dass diese Konfiguration mit allen Netzwerk-Konstellationen läuft. Ich übernehme daher keinerlei Haftung für evtl. auftretende Probleme, die nach der Installation von Pi-hole auftreten könnten.
  • Das Thema Adblocker wird kontrovers diskutiert: Zum einen kann Werbung im Internet wirklich nervig sein, besonders wenn man Webseiten besucht und sofort von Werbung überhäuft wird. Dann macht die Suche nach Informationen und das Surfen im Allgemeinen wenig Spaß.
    Auf der anderen Seite muss man bedenken, dass sich viele Webseiten durch Werbung finanzieren. Gerade für viele kleinere Websites und Blogs sind die Einnahmen durch Werbebanner die einzige „Finanzspritze“, damit die Kosten für das Hosting (zumindest teilweise) gedeckt sind. Wenn hier die Einnahmen ausbleiben, darf man sich nicht wundern, wenn private Websites/Blogs irgendwann aus dem Netz verschwinden.
    Ich will hier gar nicht den Moral-Apostel spielen, aber dies sollte man immer im Hinterkopf behalten, wenn man sich mit einem aktiven Adblocker durch das Internet bewegt. Wenn eine Webseite hilfreich und informativ ist, dann gibt es in den meisten Fällen auch die Möglichkeit, den Betreiber direkt zu unterstützen (z.B. durch eine kleine Spende oder auch durch das Einkaufen über Affiliate-Links).

Voraussetzungen

Auch wenn man Pi-hole problemlos auf einem Raspberry Pi betreiben kann, möchte ich in diesem Artikel die Installation des Adblockers auf einem Ubuntu Server zeigen. Zum einen habe ich mit Ubuntu (Server) durch meine Blog-Artikel schon einiges an Erfahrung sammeln können, zum anderen lässt sich Ubuntu recht einfach über Hyper-V virtualisieren, d.h. man kann den Adblocker ohne viel Aufwand auf einer virtuellen Maschine betreiben.

Als Grundlage für die Installation des Betriebssystems dient wie schon so oft der Artikel Ubuntu Server 18.04 LTS als Hyper-V Gastsystem installieren und optimal einrichten. Meine Empfehlung dabei ist, Pi-hole auf einer extra VM zu installieren, auf der ansonsten nichts weiter läuft. In diesem Fall kann man die virtuelle Maschine auch recht klein bemessen: Pi-hole braucht nicht viele Hardware-Ressourcen. Auch die virtuelle Festplatte muss nicht viel Speicherplatz bieten: 10 GB reichen hier für Betriebssystem und Pi-hole aus.

Wichtig dabei ist nur, dass die Pi-hole-VM eine statische IP im Netzwerk hat. Am besten nimmt man die entsprechende Konfiguration gleich im Rahmen des Installations-Prozesses des Betriebssystems vor.

Funktionsweise Pi-hole

Bevor es in den praktischen Teil geht, soll kurz die Funktionsweise des Werbeblockers erklärt werden.

Alles beginnt mit einem der wichtigsten Dienste im Internet: Dem Domain Name System (DNS). Dieses funktioniert ähnlich wie eine Telefonauskunft. Wenn man z.B. in einem Browser eine Website aufrufen möchte, dann wird eine DNS-Abfrage gestartet, da für die URL (z.B. decatec.de) zuerst die tatsächliche IP-Adresse ermittelt werden muss (in diesem Beispiel 85.13.128.144). Erst über diese IP-Adresse ist die Website erreichbar und der Request kann ausgeführt werden.

Pi-hole arbeitet nun als DNS-Proxy, der sich zwischen den Geräten im Netzwerk und dem eigentlichen DNS-Server sitzt. Möchte ein Nutzer im Netzwerk eine Website aufrufen, wird dieser DNS-Request von Pi-hole einfach an den eigentlichen DNS-Server durchgeschleift und die Client-Anwendung bekommt die passende IP-Adresse geliefert.

Sind auf dieser Website dann allerdings Werbebanner zu finden, werden weitere DNS-Abfragen gestartet, da die Werbebanner ja nicht auf dem Webspace der Internet-Seite gehostet werden, sondern über ein Content-Delivery-System verteilt werden. Wenn sich nun die URL eines Werbebanners auf einer schwarzen Liste vom Pi-hole befindet, blockiert der Adblocker die Anfrage, indem er den eigentliche DNS-Server gar nicht befragt, sondern einfach nur seine eigene IP-Adresse zurück liefert. Da unter dieser IP-Adresse nichts gefunden werden kann, wird in der Client-Anwendung das entsprechende Werbebanner gar nicht angezeigt.

Zwei DNS-Abfragen mit Pi-hole: Die obere Abfrage wird an den DNS-Server weitergeleitet, die untere Abfrage beantwortet Pi-hole mit seiner eigenen LAN-IP und leitet diese nicht an den DNS-Server weiter

Zwei DNS-Abfragen mit Pi-hole: Die obere Abfrage wird an den DNS-Server weitergeleitet, die untere Abfrage beantwortet Pi-hole mit seiner eigenen LAN-IP und leitet diese nicht an den DNS-Server weiter

Als Nebeneffekt spart man sich dadurch auch etwas Bandbreite, da der Web-Request für das Werbebanner das lokale Netzwerk niemals verlässt.

Installation und Konfiguration Pi-hole

Die Installation von Pi-hole wird durch ein einfaches Skript erledigt. Anschließend muss die Netzwerk-Umgebung so konfiguriert werden, dass das Pi-hole als DNS-Proxy verwendet wird.

Vorbereitungen

Bevor das Installations-Skript ausgeführt werden kann, muss sichergestellt sein, dass das Ubuntu Universe-Repository in den Paketquellen eingerichtet ist. Gerade nach einer frischen Installation von Ubuntu Server 18.04.1 ist dies nicht der Fall, daher muss das Repository mit folgendem Befehl hinzugefügt werden:

Installation Pi-hole

Die Installation erfolgt dann über den Aufruf eines Skripts:

Nach der Überprüfung aller Abhängigkeiten wird das Setup von Pi-hole gestartet. Das System wird durch mehrere Installationsschritte konfiguriert.

Nach den einleitenden Worten wird darauf hingewiesen, dass das System eine statische IP-Adresse haben muss. Im Idealfall hat man dies gleich während der Installation des Betriebssystems so eingerichtet. Andernfalls wird der Setup-Assistent dazu auffordern, die Netzwerk-Konfiguration entsprechend anzupassen.

Pi-hole Setup: Hinweis auf statische IP-Adresse

Pi-hole Setup: Hinweis auf statische IP-Adresse

Anschließend wählt man den sog. Upstream DNS-Provider. Dies ist der DNS-Server, den Pi-hole befragen soll, wenn eine DNS-Abfrage nicht blockiert werden soll. Ich empfehle hier den DNS-Server von Cloudflare, besser bekannt als 1.1.1.1. Dies ist ein schneller DNS-Server, der Wert auf Privatsphäre legt.
Man kann den verwendeten Upstream-DNS-Server allerdings auch nachträglich in der Weboberfläche von Pi-hole jederzeit ändern.

Pi-hole Setup: Auswahl des Upstream-DNS-Servers

Pi-hole Setup: Auswahl des Upstream-DNS-Servers

Als nächstes werden die Block-Listen konfiguriert. Hier wird bereits ein Standard-Set an Block-Listen vorgeschlagen, die man alle aktiviert lassen sollte.
Auch hier können die Block-Listen nach dem Setup jederzeit in der Weboberfläche geändert werden.

Pi-hole Setup: Auswahl der Block-Listen

Pi-hole Setup: Auswahl der Block-Listen

Im nächsten Schritt wird festgelegt, ob Pi-hole sowohl IPv4, als auch IPv6-Verbindungen überwachen soll. Hier sollten beide Optionen aktiviert sein.

Pi-hole Setup: Auswahl Protokolle (IPv4/IPv6)

Pi-hole Setup: Auswahl Protokolle (IPv4/IPv6)

Es folgen ein paar informative Schritte im Assistenten, bis gefragt wird, ob man die Web-Oberfläche von Pi-hole installieren möchte. Dies sollte man auf jeden Fall aktivieren, da man ansonsten alle Einstellungen nur umständlich über die Kommandozeile ändern kann.

Pi-hole Setup: Die Web-Oberfläche sollte mit installiert werden

Pi-hole Setup: Die Web-Oberfläche sollte mit installiert werden

Da Pi-hole für die Web-Oberfläche einen Webserver benötigt, sollte dieser im folgenden Schritt ebenfalls mit installiert werden.

Pi-hole Setup: Der Webserver sollte ebenfalls installiert werden

Pi-hole Setup: Der Webserver sollte ebenfalls installiert werden

Im letzten Schritt wird man gefragt, ob man die Queries loggen möchte. Auch diese Option sollte aktiviert sein, da man sich ansonsten schwertut, fehlerhaft geblockte Inhalte zu identifizieren.

Pi-hole Setup: Auch die Queries sollten geloggt werden

Pi-hole Setup: Auch die Queries sollten geloggt werden

Nun startet der eigentliche Installations-Prozess.

Im Anschluss wird nochmals eine Zusammenfassung und das initiale Passwort für die Admin-Oberfläche angezeigt.

Pi-hole Setup: Installation abgeschlossen

Pi-hole Setup: Installation abgeschlossen

Wieder zurück in der Kommandozeile sollte man dieses Passwort am besten sofort ändern. Dies geschieht über folgenden Befehl:

Dann noch zwei Mal das gewünschte Passwort eingeben und das Setup ist endgültig abgeschlossen.

Nun kann die Weboberfläche über die URL http://192.168.178.64/admin/ erreichen (wenn die IP-Adresse der Maschine 192.168.178.64 ist). Im Menü kann man sich über Login mit dem soeben angelegten Passwort anmelden, damit man Zugriff auf sämtliche Optionen von Pi-hole erhält.

Pi-hole: Admin-Oberfläche

Pi-hole: Admin-Oberfläche

Pi-hole Einstellungen

Nun sollten als erstes die Einstellungen vom Pi-hole überprüft und ggf. angepasst werden. Dazu einfach (nach dem Login) in linken Menü auf Settings klicken. Über das obere Menü können nun verschiedene Optionen eingeblendet werden:

  • System: Dies ist eine einfache Übersicht des Systems. Von Interesse sind hier erst einmal nur die IP-Adressen (IPv4 und IPv6), über die Pi-hole erreichbar ist. Diese werden später noch für die Netzwerk-Konfiguration benötigt, daher sollten die Adressen am besten gleich notiert werden.
  • Blocklists: Die Übersicht der Block-Listen, die Pi-hole momentan verwendet (im Jargon von Pi-hole „Gravity“ genannt). Das Standard-Set an Block-Listen wurde bereits während der Installation angelegt. An dieser Stelle können Block-Listen hinzugefügt oder entfernt werden.
  • DNS: Hier sind alle Einstellungen bzgl. DNS zu finden. Zunächst einmal sind dies die DNS-Server, die Pi-hole als Upsteam-DNS verwendet. Wir haben im Rahmen des Setups die Cloudflare-DNS-Server angegeben, daher sollten hier die entsprechenden Optionen angehakt sein (sowohl für IPV4, als auch IPv6).
    Pi-hole Einstellungen: DNS

    Pi-hole Einstellungen: DNS

    Etwas weiter unten findet man die Option für DNSSEC, welche nach der Installation zunächst einmal deaktiviert ist. Dabei handelt es sich um die Domain Name System Security Extensions. Vereinfacht ausgedrückt kann man damit die Validierung der über DNS erhaltenen Daten einschalten. Unterstützt der verwendete DNS-Dienst DNSSEC (was bei Cloudflare der Fall ist), sollte diese Option gleich aktiviert werden.

Alle anderen Optionen können auf Standard-Werten belassen werden.

Netzwerk-Konfiguration

Pi-hole ist nun einsatzbereit, wird jedoch noch nicht genutzt. Um dies zu ändern, muss jeder Client im Netzwerk die IP-Adresse von Pi-hole als DNS-Server verwenden. Hier gibt es prinzipiell zwei Ansätze. Welche Variante die passende ist, hängt vom jeweiligen Einsatzzweck und Anforderungen ab.

Variante 1: Pi-hole als DNS-Server am Router

Wenn man nicht auf jedem Client einzeln einen den DNS-Server angeben möchte, dann sollte man den Pi-hole einmal zentral als DNS-Server festlegen. Dies passiert in der Weboberfläche des Routers.

Ich empfehle diese Vorgehensweise, da man ohne viel Aufwand zum gewünschten Ergebnis kommt und die Konfiguration für 99% der privaten Netzwerke passen sollte.

Pi-hole als DNS-Server am Router

Pi-hole als DNS-Server am Router

Leider unterscheidet sich die Vorgehensweise von Router zu Router. An dieser Stelle wird das Vorgehen exemplarisch an einer FritzBox gezeigt.

Die DNS-Einstellungen befinden sich hier unter Internet > Zugangsdaten > DNS-Server. Hier sind die IP-Adressen (jeweils IPv4 und IPv6) von Pi-hole einzutragen.

DNS-Einstellungen der FritzBox

DNS-Einstellungen der FritzBox

Wichtig: Wie im Screenshot zu erkennen, werden für den bevorzugten und alternativen DNS-Server jeweils die gleichen IP-Adressen angegeben. Hier sollten nur die Adressen des Pi-hole und keine anderen DNS-Server (wie z.B. 1.1.1.1) angegeben werden. Hintergrund ist, dass die FritzBox wahlweise mal den bevorzugten und den alternativen DNS-Server nutzt. Wenn hier nun noch ein zweiter DNS-Server eingetragen werden würde, hätte dies zur Folge, dass Werbung manchmal blockiert werden würde und manchmal jedoch nicht.

Wenn die Einstellungen übernommen wurden, nutzt die FritzBox Pi-hole als einzigen DNS-Server. Alle Clients (PCs, Tablets, Smartphones, etc.) die nun ihrerseits die FritzBox als DNS-Server verwenden sind dann automatisch und ohne weiteres Zutun durch Pi-hole „geschützt“.

Vorteile Variante 1:

  • Es sind keine Anpassungen auf den Clients notwendig, die den Router als DNS-Server verwenden.
  • Daher kann ein Client auch nicht falsch konfiguriert werden und kann die DNS-Abfrage über Pi-hole nicht „umgehen“.
  • Gilt sowohl für DHCP-Clients, als auch Geräte mit statischer IP (siehe Variante 2).

Nachteile Variante 1:

  • Um eine DNS-Abfrage durchzuführen wird hier ein zusätzlicher „Hop“ benötigt (Client -> Router -> Pi-hole -> Upstream-DNS-Server). Dies kostet etwas mehr Zeit pro DNS-Abfrage, allerdings sollte dies in der Praxis nicht spürbar sein.
  • Im Normalfall nutzen alle Clients den Router als DNS-Server (und damit nun auch Pi-hole). Soll ein Client nicht durch Pi-hole geschützt werden, so müssen die DNS-Einstellungen dieses Clients manuell angepasst werden.

Variante 2: Pi-Hole als DNS-Server im Router (DHCP)

Die meisten Heimnetzwerke sind so konfiguriert, dass alle Clients eine IP über DHCP vom Router zugewiesen bekommen. Da über DHCP auch der zu verwendende DNS-Server mitgegeben wird, kann man sich dies bei Variante 2 zu Nutze machen.

Pi-hole als DNS-Server am Router (per DHCP)

Pi-hole als DNS-Server am Router (per DHCP)

Hier wird nicht der DNS-Server für den ganzen Router geändert, sondern nur die DHCP-Einstellungen angepasst. Exemplarisch findet man bei einer FritzBox diese Einstellungen unter Heimnetz > Netzwerk > Netzwerkeinstellungen > IP-Adressen > IPv4-Adressen/IPv6-Adressen.

Unter Lokaler DNS-Server ist hier die IP der Maschine mit Pi-hole anzugeben.

DHCP-Einstellungen der FritzBox (IPv4)

DHCP-Einstellungen der FritzBox (IPv4)

Neben den DHCP-Einstellungen für IPv4 müssen dann ebenso die Einstellungen für IPv6 angepasst werden.

Wichtig: Dieses Vorgehen ist sehr praktisch, wenn alle Client im Netzwerk ihre IP per DHCP zugewiesen bekommen. Wenn Client allerdings eine statische IP haben, ist diese meist manuell konfiguriert. Hier ist dann kein DHCP im Spiel und somit müssen alle Clients mit statischer IP auf den neuen DNS-Server „umgehoben“ werden.

Vorteile Variante 2:

  • Es sind keine Anpassungen auf den Clients notwendig, wenn diese ihre IP über DHCP zugewiesen bekommen.
  • DHCP-Clients können Pi-hole nicht umgehen.
  • Man spart sich einen „Hop“ bei einer DNS-Abfrage (DHCP-Client -> Pi-hole -> Upstream-DNS-Server).

Nachteile Variante 2:

  • Clients mit statischer IP (ohne DHCP) müssen manuell konfiguriert werden, so dass Pi-hole als DNS-Server genutzt wird. Wird dies an einem Client vergessen, wird hier weiterhin Werbung angezeigt werden.
  • Wenn viele Clients mit statischer IP im Netzwerk vorhanden sind, ist Variante 2 u.U. sehr aufwendig, da wieder jeder Client einzeln konfiguriert werden muss.

Variante 3: Pi-hole als DNS-Server auf den Clients

Als Alternative kann können aber auch sämtliche Clients so konfiguriert werden, dass diese Pi-hole als DNS-Server verwenden (und nicht mehr den Router). In diesem Fall müssen alle Geräte, die von Werbung befreit werden sollen, einzeln konfiguriert werden.

Pi-hole als DNS-Server auf den Clients

Pi-hole als DNS-Server auf den Clients

Auch hier ist es schwierig eine detaillierte Anleitung zu liefern, da sich die Vorgehensweise von Gerät zu Gerät unterscheidet. Hier soll daher nur die Vorgehensweise unter Windows 10 exemplarisch demonstriert werden.

Dazu muss in den Netzwerk-Einstellungen von Windows ein eigener DNS-Server angegeben werden. Dazu einfach in der Windows-Suche nach „Netzwerk“ suchen und Netzwerk- und Freigabecenter wählen. Hier werden dann alle verfügbaren Netzwerk-Schnittstellen aufgelistet. Durch einen Klick auf die jeweilige Verbindung wird der Status der Verbindung gezeigt. Hier wählt man nun Eigenschaften und geht durch einen Doppelklick in die Einstellungen von Internetprotokoll, Version 4 (TCP/IPv4). In diesem Dialog kann dann ein eigener DNS-Server angegeben werden.

DNS-Einstellungen unter Windows 10 (IPv4)

DNS-Einstellungen unter Windows 10 (IPv4)

Wichtig: Auch hier sollte ausschließlich die IP-Adresse der Pi-hole Maschine sowohl als bevorzugter, als auch alternativer DNS-Server angegeben werden.

Vorteile Variante 3:

  • Hier können Clients selektiv konfiguriert werden. Soll auf einem Client keine Werbung blockiert werden, kann dieser so konfiguriert werden, dass dieser weiterhin den Router als DNS-Server verwendet und daher von der Filterung durch Pi-hole nicht betroffen ist.
  • Man spart sich einen „Hop“ bei einer DNS-Abfrage (Client -> Pi-hole -> Upstream-DNS-Server).

Nachteile Variante 2:

  • Man muss jeden Client einzeln so konfigurieren, so dass Pi-hole als DNS-Server verwendet wird. Vergisst man dies bei einem Client, wird dieser weiterhin Werbung angezeigt bekommen.
  • Da der zu verwendende DNS-Server auf jedem Betriebssystem/Gerät anders eingerichtet wird, ist diese Variante gerade bei großen Netzwerken sehr aufwändig.

Test der Funktionalität

Nachdem nun alle Clients Pi-hole als DNS-Server verwenden, wird es Zeit für einen ersten Test. Dazu einfach eine Website aufrufen, die normalerweise Werbung anzeigt. Wenn alles geklappt hat, dann sollte diese Werbung nun wie von Geisterhand verschwunden sein.

Darüber hinaus gibt es auf der Website von Pi-hole eine spezielle Testseite, mit der man die Funktion von Pi-hole testen kann.

Das Tolle ist nun, dass man nicht nur am PC/Browser nicht mehr von Werbung bombardiert wird, sondern dass alle netzwerkfähigen Geräte davon profitieren, egal ob Smartphones, Tablets oder gar Smart-TVs.

Pi-hole in Aktion auf dem Smartphone (hier am Beispiel der Google News App)

Pi-hole in Aktion auf dem Smartphone (hier am Beispiel der Google News App)

DNS over TLS mit Stubby

Viele Webseiten nutzen Verschlüsselung über HTTPS. Hier können die Website-Inhalte also nicht von einem Angreifer, der sich zwischen den Webserver und einen Client „einhängt“ (Man-in-the-Middle) mitgelesen werden. DNS-Abfragen werden in der Regel unverschlüsselt über UDP übertragen. D.h. der Kommunikationsweg zwischen Client und DNS-Server ist mehr oder weniger ungeschützt. Auch wenn ein Angreifer nicht an die (dank HTTPS verschlüsselten) Inhalte herankommt, so kann er jedoch die DNS-Abfragen eines Clients mitlesen und ggf. auch manipulieren.

Um diese Lücke zu schließen, wurde das Protokoll DNS over TLS (DoT) entwickelt. Dabei werden sämtliche DNS-Abfragen über TLS verschlüsselt. Mit dem zusätzlichen Programm Stubby kann man mit Pi-hole ebenfalls DNS over TLS nutzen, so dass sämtliche DNS-Abfragen nicht mehr unverschlüsselt über die Leitung gehen.

Pi-hole als DNS-Server am Router mit Stubby

Pi-hole als DNS-Server am Router mit Stubby

Wie man auf dem Bild erkennen kann, ist hier ein zusärtlicher „Hop“ erforderlich (Client -> Router -> Pi-hole -> Stubby -> Upstream-DNS-Server). Ebenso gibt es einen gewissen Overhead durch das verwendete Protokoll für DNS over TLS. Daher dauern bei dieser Variante DNS-Abfragen nochmals ein bisschen länger. Die Praxis zeigt allerdings, dass man auch hier im Alltag keinen Unterschied feststellen wird.

Voraussetzungen

Um dies umzusetzen sind zwei Voraussetzungen zu erfüllen:

  • Pi-hole ab Version 4.0.0
  • Der Upstream-DNS-Server muss DNS over TLS unterstützen. Bei den hier gezeigten Servern von Cloudflare ist aber auch diese Voraussetzung erfüllt.

Installation Stubby

Das kleine Programm Stubby ist ein DNS-Daemon: Das Tool beantwortet DNS-Anfragen lokal auf dem „traditionellen Weg“ (also unverschlüsselt über UDP), nach außen (zum Upstream-DNS-Server) kommt jedoch DNS over TLS zum Einsatz.

Stubby ist bereits in den Paketquellen von Ubuntu enthalten und kann durch folgenden Befehl installiert werden:

Falls das Paket nicht gefunden werden kann, muss evtl. das Universe-Repository in die Paketquellen von Ubuntu mit aufgenommen werden (siehe Ubuntu Server 18.04 LTS als Hyper-V Gastsystem installieren und optimal einrichten).

Konfiguration Stubby

Nach der Installation von Stubby muss noch die Konfiguration des Tools angepasst werden, damit es mit Pi-hole zusammenarbeiten kann.

Die Konfiguration wird in der folgenden Datei vorgenommen:

Hier sollten zwei Änderungen vorgenommen werden:

  • Ändern der verwendeten Ports: Da der DNS-Server von Pi-hole bereits auf Port 53 lauscht, muss Stubby auf einen anderen Port „ausweichen“. Dazu sucht man in der Konfiguration nach listen_addresses und ändert die folgenden Zeilen ab, damit Stubby auf Port 5353 läuft:
  • Upstream-DNS-Server festlegen: Der von Stubby verwendete DNS-Server wird weiter unten in der Datei angegeben. Hier sind bereits mehrere DNS-Server hinterlegt, die Stubby verwenden kann. Diese sollten jedoch alle auskommentiert werden, da Stubby ja nur einen einzigen DNS-Server verwenden soll. In diesem Beispiel nehme ich wieder die DNS-Server von Cloudflare.
    Alle anderen DNS-Server, die in der Datei vorhanden sind, müssen auskommentiert werden (einfach eine Raute ‚#‘ vor jede Zeile schreiben).

Stubby in Pi-hole als Upstream-DNS-Server einrichten

Der letzte Schritt zum funktionierenden DNS over TLS führt wieder in die Admin-Oberfläche von Pi-hole: Unter Settings > DNS wählt man dazu alle vorkonfigurierten DNS-Server ab. Nun wird Stubby als Custom DNS-Server eingetragen:

  • Custom 1 (IPv4): 127.0.0.1#5353
  • Custom 3 (IPv6): ::1#5353

Der Port wird hier nicht wie üblich durch einen Doppelpunkt, sondern durch eine Raute von der IP getrennt.

Pi-hole Einstellungen: DNS mit Stubby

Pi-hole Einstellungen: DNS mit Stubby

Nach dem Übernehmen der Einstellungen ist Stubby als Upstream-DNS-Server von Pi-hole eingerichtet und alle DNS-Abfragen werden über DNS over TLS verschlüsselt.

Der Alltag mit Pi-hole

Nach der Installation von Pi-hole sollte euer Netzwerk nun so gut wie werbefrei sein. Meine Erfahrung zeigt, dass man nach der Ersteinrichtung zunächst einmal ein paar Tage abwarten und beobachten sollte, die das System wirkt. Anschließend kann man Pi-hole auf seine eigenen Bedürfnisse anpassen.

Whitelisting

Evtl. wird man feststellen, dass einige Dienste nicht mehr wie gewohnt funktionieren. Hier kann Pi-hole die Ursache sein, indem zu viel geblockt wird. In diesem Fall kann man einige Domains wieder in eine Whitelist aufnehmen, so dass diese in Zukunft nicht mehr geblockt werden.

Dazu muss man zunächst einmal herausfinden, welche Domains fälschlicherweise geblockt werden. Hier kann das Log von Pi-hole helfen, welches man unter Tools Tail pihole.log findet. Wenn man das Log aufruft und anschließend den Dienst startet, der nicht mehr richtig funktioniert, dann wird man in diesem Log Einträge finden, die vom Dienst ausgehen und geblockt werden. Diese Domains kann man dann unter Whitelist eintragen, so dass diese zukünftig nicht mehr geblockt werden.

Da die fälschlicherweise geblockten Domains meist nicht so offensichtlich sind, muss man hier meistens etwas herumprobieren. Wenn eine Domain auf der Whitelist nicht die gewünschte Wirkung erzielt, dann probiert man eben weitere Domains aus, die beim Starten des entsprechenden Dienstes angesprochen werden. Das kann u.U. etwas Zeit in Anspruch nehmen, bis man die richtige(n) Domain(s) ausgemacht hat.

Hinzufügen weiterer Filterlisten

Beim Setup von Pi-hole wurden bereits einige Filterlisten hinzugefügt. Diese sind für den Anfang erst einmal ausreichend. Man kann jedoch jederzeit unter Settings > Blocklists weitere Listen hinzufügen. Welche Listen zum Einsatz kommen, ist natürlich von den eigenen Bedürfnissen abhängig. Hier sollte man es aber nicht übertreiben: Je mehr Block-Listen in Pi-hole geladen werden, desto höher ist auch die Wahrscheinlichkeit, dass bestimmte Dienste nicht mehr wie gewohnt funktionieren.

Folgende Seiten sind eine gute Quelle für weitere Block-Listen:

  • EasyList: Diese Listen sind bei den aus Browsern bekannten Adblockern Adblock Plus und uBlock Origin sehr beliebt.
  • EasyList Germany: Hier findet man Block-Listen, die auf bestimmte Länder „zugeschnitten“ sind.
  • Firebog: Eine Sammlung der unterschiedlichsten Block-Listen.
  • FilterLists: Eine weitere (sehr große) Sammlung an Block-Listen.
  • No Coin adblock list: Spezielle Liste für Bitcoin-Mining in Browsern.

Pi-hole + VPN

Pi-hole wirkt prinzipiell nur, wenn man sich im gleichen Netzwerk wie der Werbeblocker befindet. Sobald man beispielsweise mit dem Smartphone im Mobilfunknetz unterwegs ist, wird man wieder Werbung zu Gesicht bekommen.

Hier besteht jedoch die Möglichkeit, einen VPN-Tunnel ins Heimnetzwerk aufzubauen. Dies ist z.B. mit der App VpnCilla unter Android möglich. Hier befindet man sich dann dank VPN wieder im gleichen Netzwerk wie die Maschine, auf der Pi-hole läuft und als „Nebeneffekt“ wird dann wieder automatisch Werbung blockiert. Somit ist man dann auch im Mobilfunknetz wieder praktisch werbefrei unterwegs.

Der Vorteil, dass man durch Pi-hole etwas Bandbreite spart, ist im Heimnetzwerk eher weniger relevant. Bei den Mobilfunk-Volumen-Tarifen ist dies jedoch ein handfester Vorteil.

Pi-hole Admin-Oberfläche über das Internet erreichen

Pi-hole wurde in diesem Artikel auf einer separaten Maschine eingerichtet, so dass die Admin-Oberfläche nur im lokalen Netzwerk erreichbar ist. Dies sollte in den meisten Fällen ausreichend sein.

Wer jedoch aus dem Internet Zugriff auf die Pi-hole-Oberfläche benötigt, kann dies ebenfalls einrichten. Die genaue Vorgehensweise ist bereits im Artikel Zweite Web-Anwendung neben ownCloud/Nextcloud einrichten (am Beispiel WordPress) beschrieben, daher soll an dieser Stelle nur kurz auf diese Möglichkeit verwiesen werden.

Fazit

Sobald Pi-hole eingerichtet ist, ist man im Heimnetzwerk werbefrei unterwegs. Dies ist zunächst einmal eine Erleichterung, da man nicht mehr von Werbung überflutet wird, zusätzlich spart man auf diese Art und Weise auch etwas Bandbreite. Durch die zentrale Installation im Netzwerk wirkt dies auch ohne weiteres Zutun auf alle Geräte im Heimnetzwerk.

Dennoch muss man sich bewusst sein, dass man durch das Blockieren von Werbung Website-Betreibern schaden kann. Denn gerade kleinere Anbieter sind auf die Einnahmen durch Online-Werbung angewiesen. Hier sollte man sich Gedanken machen, ob man seine Lieblings-Webseiten nicht auf anderem Wege unterstützen oder zumindest eine Ausnahme in Pi-hole für diese Webseiten hinzufügen möchte.

Wie steht ihr zum Thema Adblocker? Habt ihr Pi-hole bereits im Einsatz und könnt weitere Block-Listen empfehlen, oder habt weitere Tipps und Tricks zum Netzwerk-weiten Werbeblocker? Hinterlasst mir dazu doch einfach einen Kommentar.

Weiterführende Artikel

Links

, , , , , ,

Kommentare: 8

  • Hans sagt:

    Hi Jan,

    TOP, vielen Dank.
    Aktuell setze ich nur adblockplus (Firefox) ein. Mit dieser Anleitung werde ich mal Pi-hole zusammen mit NC und WP installieren und testen.

    Gruß Hans

  • Murderhead sagt:

    Stubby Funktioniert auch unter Raspbian Strech.

    Dazu öffnen wir mit:
    sudo nano /etc/apt/sources.list

    Dort fügen wir das Raspbian Repository von Buster hinzu:
    deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi

    Jetzt Updaten wir noch unsere Repositorys mit:
    sudo apt-get update

    Anschließend Installieren wir Stubby mit:
    sudo apt-get install stubby

    Danach Kommentieren wir in der sources.list die neu angelegte Zeile mit # zur Sicherheit schnell wieder aus. Schließlich wollen wir unser Stabiles System ja nicht abschießen!

    Vielleicht für den ein oder anderen nützlich!

    Gruß
    Murderhead

    • Jan sagt:

      Hi,

      danke für den Tipp.
      Wenn du das Repository nur wegen Stubby hinzugefügt hast (in der sources.list), dann brauchst du es eigentlich nicht sofort nach der Installation des Programms auskommentieren. Ansonsten würdest du die Updates ja nicht mitbekommen.

      Gruß,
      Jan

  • Alex sagt:

    Ich favorisiere die Variante 3:
    In der FritzBox unter Heimnetz – Heimnetzübersicht – Netzwerkeinstellung – IPv4-Adressen: den lokalen DNS-Server ändern. Damit wird über DCHP die Adresse von dem PiHole-Server verteilt.

    • Jan sagt:

      Hi Alex,

      das geht natürlich auch. Danke für den Hinweis, vielleicht nehme ich das ja noch in den Artikel mit auf.
      Hat aber einen entscheidenden Nachteil: Das funktioniert nur für Geräte, die ihre IP über DHCP zugewiesen bekommen. Alle Geräte mit statischer IP (manuelle Konfiguration) laufen dann nicht über Pi-hole.

      Gruß,
      Jan

  • Murderhead sagt:

    Für Leute die Ads von YouTube loswerden möchten habe ich vielleicht was nützliches gefunden.

    Shell Script:
    https://github.com/kboghdady/youTube_ads_4_pi-hole

    Falls wer eine Bessere Möglichkeit kennt immer her damit.

    Gruß
    Murderhead

    • Jan sagt:

      Hi,

      danke für den Hinweis. Ich nutze YouTube nur wenig, dass hier allerdings hin und wieder Werbung zu sehen ist – trotz Pi-hole – ist mich auch schon aufgefallen.
      Ist sicherlich ein guter Tipp, werde ich demnächst mal ausprobieren.

      Gruß,
      Jan

  • Hendrik Marten sagt:

    Hi,
    mein pi-hole läuft auf einem reinen Debian Stretch Server. Dort kann man sich das kompilieren auch sparen.

    Es geht ganz einfach:

    sudo nano /etc/apt/sources.list

    Dort die erste Zeile kopieren und weiter unten wieder einfügen.
    Das stretch zu buster ändern. Strg + O, Strg + X.

    jetzt:

    sudo apt update && sudo apt install stubby

    Zur Sicherheit, um das stabiles System nicht kaputt zu machen, die zuvor hinzugefügte Zeile wieder auskommentieren (#deb… ).

    Gruß
    Hendrik

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.