Werbung wegsperren für Nerds

Wer hat nicht schon immer mal überlegt, ob es eine Möglichkeit der Sperrung von Werbung gibt? Ich kann mich noch dran erinnern, dass es damals bei VHS Aufnahmen eine Möglichkeit gab, die Werbung heraus zu filtern – anhand eines Signals, das im TV übertragen wurde. Das war aber nur kurze Zeit möglich.

Jetzt im Internet-Zeitalter ist dermassen viel Werbung zu finden, dass man teils die Webseiten gar nicht mehr erkennen kann. Ich schütze mich vor dieser Werbung mit Werbeblockern auf Endgeräten, die mehr oder weniger gut filtern. Aber ich hätte gerne eine Möglichkeit im Vorfeld einfach alles was durch meinen Router geht zu filtern. Hier habe ich schon öfter mal sinniert – aber nie wirklich im Netz geschaut, ob es da schon Möglichkeiten gibt. Mehr durch Zufall bin ich dann doch noch auf etwas gestoßen, was meine Aufmerksamtkeit auf sich gezogen hat.

pi-hole

Diese kleine niedliche Software filtert anhand von DNS die URLs heraus, die Werbemist im Netz verteilen und ersetzt in jeder Anfrage die entsprechene IP der Werbeseite durch eine lokale IP, wodurch dann einfach nichts geladen wird.

Für die Leute, die sich darunter vielleicht noch nicht so richtig etwas vorstellen können – nochmal etwas detaillierter:

Es gibt URLs – so wie “www.wehmoeller.net”. Eurer Browser (Firefox, Chrome, Edge, etc.) benötigt eine Adresse um euch den Inhalt von Webseiten zu zeigen. Hinter dieser URL liegen immer IP-Adressen.

Hier gibt es mittlerweile 2 Versionen – IPv4 und IPv6. Der Einfachheithalber gehe ich nur auf IPv4 ein, da diese bei mir im lokalen Netzwerk ausschliesslich genutzt werden. diese IP Adressen sehen im lokalen Netzwerk beispielsweise so aus: 192.168.0.1 – das ist eine sogenannte private Class-C Netzadresse.

Um die Auflösung der URL auf eine IP Adresse zu ermöglichen, muss es einen Service geben, der dies erledigen kann. Dieser Service nennt sich DNS – Domain Name System.

Wenn ihr einen Internet Anschluss besitzt, dann habt ihr normalerweise einen Router, der die Verbindung zum Internet für ihre lokalen Systeme (Handys, Laptops, Smart-TVs, IoTs, etc.) zur Verfügung stellt. Der Router löst für eure Hardware die DNS Anfragen auf. Die DNS Anfragen, die euer Router selber nicht beantworten kann, reicht er weiter ins Internet, und hofft darauf, dass irgendein anderer Server ihm diese beantworten kann. Diese Antwort geht dann an euer System zurück, damit dieses weiß, zu welcher IP Adresse die Verbindung hergestellt werden soll. Jetzt weiß euer System, wo es beispielsweise eine Webseite abrufen kann.

Falls die Webseite, die ihr aufruft, Werbung geschaltet hat, dann wird diese Werbung ebenfalls von einer anderen URL in die Webseite herein geladen. Diese Werbe-URLs werden von verschiedenen Anbietern gesammelt und in eine große Datenbank (Datei) geworfen. Diese Datei(en) lädt sich pi-hole herunter und gleicht jede DNS Anfrage mit dieser Datenbank ab. Falls sich unter den Webseiten URLs eine URL befindet, die in der Datenbank gefunden wird, wird anstelle der wirklichen IP Adresse zu dieser URL, einfach die IP Adresse von pi-hole gesetzt und die Werbung kann nicht geladen werden – was dazu führt, dass an dieser Stelle einfach nichts steht – somit auch keine Werbung.

Damit pi-hole für das lokale Netzwerk funktioniert, muss dieser DNS Service bei dem Router eingetragen werden.

Soweit zur Theorie…..

pi-hole ist im Original für einen Rasperry Pi geschrieben worden. Die Werbung verschwindet sozusagen in einem schwarzen Loch – daher der Name pi-hole.

Ich habe in meinem Netzwerk aber diverse Systeme auf Docker aufgesetzt, so dass ich pi-hole hier auch aufsetzen wollte – um nicht noch zusätzlich Hardware kaufen zu müssen. Glücklicherweise gibt es ein offizielles Docker Image von pi-hole. Docker sowie Docker-Compose wiederum habe ich auf ein Ubuntu 18.0.4 aufgesetzt. Folgende Schritte waren notwendig, um dies erfolgreich zu erreichen.

Aufsetzen von pi-hole in Docker

  1. Hinzufügen einer virtuellen IP Adresse auf Ubuntu, damit Docker diese IP für sich benutzen kann, und es keine Fehler aufgrund von doppelter Belegung von bereits genutzten Ports gibt.
  2. Einrichten eines Docker-Compose Scripts, welches pi-hole installiert, konfiguriert und startet.
  3. Einrichten des DNS Server pi-hole im Router (hier eine Fritzbox).
  4. Ggf. Whitelisten von Einträgen.

zu 1.:
Um eine zusätzliche IP Adresse hinzu zufügen, sollte man auf eine statische Vergabe der IP Adresse setzen. Diese habe ich bei mir anhand der Beschreibung auf linuxconfig.org erstellt. Die zusätzliche IP habe ich bei der Umstellung direkt miteingefügt. Nach dem Einrichten hilft ein Neustart des Servers, falls die IP Adresse nicht richtig angesprochen werden kann. Ich hatte beispielsweise Probleme die IP Adresse anzupingen. Erst ein Neustart half, dass eine Rückmeldung von der zusätzlichen IP kam.

zu 2.: Hier habe ich mir zuerst das Script von Github genommen, und es dann nach und nach auf meine Situation angepasst. Das war einige Zeit mit versuchen, suchen, ersetzen und wieder von vorne versuchen. Dieses Script ist nun bei mir lauffähig:

 pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      - "192.168.1.1:53:53/tcp"
      - "192.168.1.1:53:53/udp"
      - "192.168.1.1:67:67/udp"
      - "192.168.1.1:80:80/tcp"
      - "192.168.1.1:443:443/tcp"
    environment:
      TZ: 'Europe/Berlin'
      WEBPASSWORD: 'MeinPasswort'
    volumes:
      - './etc-pihole/:/etc/pihole/'
      - './etc-dnsmasq.d/:/etc/dnsmasq.d/'
    dns:
      - 127.0.0.1
      - 1.1.1.1
    cap_add:
      - NET_ADMIN
    restart: unless-stopped

Wobei die IP Adresse 192.168.1.1 die zweite (virtuelle) IP des Ubuntu Servers ist und mit dem jeweiligen Port verknüpft. Diese IP Adresse wird auch nicht von meinem Router (Fritzbox) vergeben, so dass keine doppelte Vergabe im Netzwerk entstehen kann. Die IP 127.0.0.1 sagt aus, dass zuerst der eigene DNS Service genutzt werden soll, und danach der cloudflare DNSServer 1.1.1.1. Hier kann auch ein anderer genutzt werden.

Zu Docker-Compose will ich nicht groß etwas schreiben. Mit

docker-compose up -d

wird der Dienst mit der aktuellen yml-Datei neugestartet und das Docker Image heruntergeladen, als Container konfiguriert und gestartet. Das Log von Docker für den Container pihole kann so geprüft werden:

docker logs --tail 50 --follow --timestamps pihole

Falls hier keine Fehler sind, sollte man sich bereits in die Admin-Oberfläche von pi-hole einloggen können. Die folgende URL in den Browser des geringsten Misstrauens eingeben:

http://192.168.1.1/admin

zu 3.: In der Fritzbox gibt es zwei Einstellungen, in denen man DNS Server einstellen kann. Hier muss die besser versteckte Einstellung gefunden und genommen werden. Unter “Heimnetz -> Netzwerkeinstellungen -> IPv4-Adressen -> Lokaler DNS-Server” kann der pi-hole Server mit seiner IP eingetragen werden.

zu 4.: Ggf. werden auch zuviele Dienste gestört – beispielsweise habe ich festgestellt, dass Spotify nicht richtig funktioniert und eine URL von Spotify auf die Whitelist gesetzt werden muss. Ebenfalls andere URLs sollten auf die Whitelist gesetzt werden.

Die nächsten Wochen werde ich dann schauen, ob sich das auch ohne Probleme so betreiben lässt.

Update…. :

Zwischen 20 und 30 % der Zugriffe von allen Systemen meines Netzwerks nach außen sind durch pihole erkannte und geblockte Werbung.

Und da sind noch keine Werbungen von Youtube, instagram oder sonstigen Plattformen, die Werbung in der App selber und direkt am den User ausgeben beinhaltet. Also locker 30-40% ist Werbung. Das ist echt ein Witz. Internet ist also DIE Werbeplattform schlechthin.

2 Antworten auf „Werbung wegsperren für Nerds“

  1. …ja nee, is klar… Hauptsache wir können Satelliten programmieren, eine Marssonde oder Navigationsgerät und Drohnen bevölkern Mutter Erde, aber Werbung aus dem Äther halten is soo krass kompliziert. War schon bei “DNS” und “URL” raus, aber kann ja auch keine Marssonde programmieren oder ein Navigationsgerät… Deswegen sollten wir lieber nicht zum Mars, im Notfall eine Landkarte benutzen und mehr Bücher lesen…
    Aber das Bild mit dem schwarzen Loch finde ich echt schön 🙂
    Cheers

    1. 🙂 Ich bin aus der Branche und war auch in der Nähe von DNS und URL raus 🙂

      Aber was ich sicher weiß, eine Marssonde, einen Satelliten oder ein Navigationsgerät zu programmieren ist tatsächlich einfacher, da ist nämlich niemand der ein Interesse daran hätte das besonders kompliziert zu machen … hingegen wird beim Thema Werbung alles Geld und jede Macht investiert, um sicher zu stellen, dass sie beim Produkt (also uns, da wir das Produkt von Fernsehen, Internet und Co sind) ankommt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.