Razien – Irgendwas geht immer …

Raspberry PI als Werbeblocker

Die Gründe

Wieso ist die zweite Hälfte der Anleitung gestrichen?
Da das Script zum automatischen Installieren, mittlerweile alle macht und sehr gut funktioniert :-)
Das Webinterface, klappt auch sehr gut, deshalb hab ich es hier in der Anleitung jetzt  mit aufgenommen.
Jetzt habe ich auch den PI-Hole an einem TP-Link Router TL-WR941ND an dem er bestens funktionert,da dort das IP bindung rausgenommen  ist, bzw. rausgenommen werden kann.

Der alte Proxy hat bei mir ausgedient, der neue Adblocker, PI-Hole , ist auf DNS-Basis.
Warum ?
Dies hat mehrere Gründe:

  • ich kann ihn Zentral in meinem DSL-Router als DNS-Server eintragen, wodurch ihn JEDER Client (auch Handys, Spielkonsolen etc.) in meinem Netz benutzt
  • Er spart bei mit ca. 20 Prozent Bandbreite, da die Anfragen mein Netz erst gar nicht verlassen und daher nichts übertragen wird.
  • er kann IPv4 und IPv6
  • er aktualisiert einmal pro Woche seine Listen (kostenlos :-) )
  • DNS liegt unter HTTPS, daher werden die Anfragen (Werbung, Tracker, etc.) abgeblockt und der verschlüsselte Quelltext bleibt unberührt :-)
  • alles ist OpenSource (also der Quellcode einsehbar) und das filtern, findet im eigenen Heimnetz, Lokal, statt (unabhängig)

Was wird benötigt?

Los geht’s, zuerst …

  • ein Raspberry PI 2
  • eine Microsdkarte Class 10, ich benutzte eine 32 GB, eine 16 GB sollte ausreichen
  • Debian 7 (Wheezy), hierauf bezieht sich die Anleitung, es sollte läuft auch unter Debian 8 (Jessie)
    Nachtrag: Unter Debian 8 sollte IPv6 standardmäßig installiert und aktiviert sein
  • PI-Hole
  • etwas Zeit und wie immer … gute Laune :-)

Wie die Grundinstallation mit Debian auf einem Raspberry funktioniert, sollte mittlerweile jeder Besitzer eines Raspberry kennen,
ansonsten kurz eine Suchmaschine benutzen.

Raspberry updaten

Als erstes den Raspberry auf den neuesten Stand bringen, also der übliche 3-Kampf:

sudo apt-get update
sudo apt-get upgrade
sudo rpi-update

jetzt führen wir auf dem Raspberry folgenden Befehl aus (bei bedenken könnt ihr euch das Script auf der Seite direkt ansehen)

curl -L install.pi-hole.net | bash

damit steht die Grundinstallation, die jedoch bei mir beim Surfen teilweise sehr langsam war.
Das war’s mit Scripte, denn jetzt gibt es den …

„pihole“ Command

Einfach auf der Kommadozeile pihole -h eingeben und Du erhälst folgende Hilfe:

::: Usage: pihole [options]
:::     Add -h after -w (whitelist), -b (blacklist), or -c (chronometer)  for more information on usage
:::
::: Options:
:::  -w, whitelist                      Whitelist domains
:::  -b, blacklist                      Blacklist domains
:::  -d, debug                          Start a debugging session if having trouble
:::  -f, flush                          Flush the pihole.log file
:::  -u, updateDashboard                Update the web dashboard manually
:::  -g, updateGravity                  Update the list of ad-serving domains
:::  -s, setupLCD                       Automatically configures the Pi to use the 2.8 LCD screen to display stats on it
:::  -c, chronometer                    Calculates stats and displays to an LCD
:::  -h, help                           Show this help dialog
:::  uninstall                          Uninstall Pi-Hole from your system!

Das Webinterface

Einfach aufrufen mit http://DEINE-RASPBERRY-PI-IP/admin/index.php

falls es nicht klappt, gibt es die Anleitung zum nachinstallieren HIER.
Den Punkt Modify /etc/lighttpd/lighttpd.conf brauchte ich nicht, da er bereits jetzt bereinigt ist.

IPv6 installieren

Warum? IPv6 ist auf dem Raspberry standardmäßig nicht aktiviert, also:

sudo nano etc/modules

und am Ende folgende Zeile einfügen:

ipv6

mit der F3 Taste speichern und mit Strg + x den Nano verlassen.
Jetzt müssen wir unserem DNS-Server noch verklickern, das wir IPv6 benutzen,
das tun wir indem wir in der

dnsmasq.conf
sudo nano
/etc/dnsmasq.conf

und unter dem IPv4 Eintrag folgendes einfügen:

listen-address=::1

jetzt wieder mit der F3 Taste speichern und mit Strg + x den Nano verlassen.
Es sollen hierzu auch in Zukunft die passen AdListen generiert werden,
also folgenden anpassen:

sudo nano /usr/local/bin/gravity.sh

und

$piholeDir/$eventHorizon | awk '{sub(/r$/,""); print "'"$piholeIP"' " $0}' > $piholeDir/$accretionDisc

durch

cat $piholeDir/$eventHorizon | awk '{sub(/r$/,""); print "127.0.0.1 "$0"n::1 "$0}' > $piholeDir/$accretionDisc

ersetzen und … ihr ahnt es sicher schon …
… wieder mit der F3 Taste speichern und mit Strg + x den Nano verlassen.

automatische Updates

Was brauchen wir noch? Ja, klar sich selbst einmal die Woche die Listen aktualisieren, wäre schick …

sudo crontab -e

und folgendes hinzu fügen:

@weekly /usr/local/bin/gravity.sh

bei mir benutzt der crontab Nano, also wieder: mit der F3 Taste speichern und mit Strg + x verlassen.
Jetzt das ganze einmal neu starten:

sudo shutdown -r now

danach mit

ip a

die IPv4 und die IPv6 Adresse des Raspberry auslesen und als DNS-Server im DSL-Router eintragen
( bei mir in der Fritzbox unter Internet/Zugangsdaten/DNS-Server)
Fast vergessen in der Fritzbox unter Heimnetz/Netzwerk, beim Raspberry auf bearbeiten klicken und den Haken bei

  • Diesem Netzwerkgerät immer die gleiche IPv4-Adresse zuweisen.

setzten, damit er immer die gleiche Adresse nach einem Neustart bekommt :-)

Alternative DNS-Server

Wer nicht die DNS-Server von Google benutzen möchte, kann alternativ, die von OpenDNS benutzen.
Die Serveradressen sind 208.67.222.222 und 208.67.220.220, einfach die

/etc/dnsmasq.conf

wie unten anpassen:

domain-needed
bogus-priv
no-resolv
server=208.67.222.222
server=208.67.220.220
interface=eth0
listen-address=127.0.0.1
cache-size=10000
log-queries

Wie kann ich geblockte Seiten auf Dauer freigeben oder wie selbst blocken?

Hierfür legt man eine Whitelist (zum Freischalten) und/oder eine Blacklist (zum Sperren) an:

/etc/pihole/whitelist.txt

und/oder

/etc/pihole/blacklist.txt

in jede Zeile wir immer nur eine Domaine/Subdomaine (URL ohne www.) eingetragen,
diese werden danach mit:

sudo /usr/local/bin/gravity.sh

eingelesen.
Bei der Whitelist, muss man alle gesperrten, der Domaine, also auch subdomains freischalten.
Man bekommt eine Liste mit dem Befehl:

for list in /etc/pihole/list.*;do cat $list | grep gesperrte-Seite.com;done

einzelne Befehle

das Update der Listen per Hand starten:

sudo /usr/local/bin/gravity.sh

sich das Filtern in Echtzeit auf dem Raspberry anschauen:

tail -f /var/log/pihole.log

Empfohlene Firefox-Addons:

wofür das jetzt? zum Analysieren für die Back-/ Whitelist und für den Rechner (Laptop) unterwegs. :-)

der zur Zeit, meiner Meinung nach, beste Adblocker für den Firefox: uBlock Origin

um Scripte vernünftig zu handhaben (mein persönlicher Favorit): NoScripte

Damit die Verbindungen nach Möglichkeit geschützt sind: HTTPS Everywhere

auch von der EFF um Spying Ads und Tracker zu analysieren: Privacy Badger

um sich den Wahnsinn zu veranschaulichen: Lightbeam einfach mal testen und Staunen ;-)

um die Cookies vernünftig in den Griff zu bekommen: CookieKeeper

um den Tracker Wahn in den Griff zu bekommen: Disconnect

Hinweis

Es wurde alles von mir getestet, jedoch kann ich keine Gewährleistung dafür übernehmen,
das alles vollständig ist, klappt und Eure Daten sicher sind.
Um es auf den Punkt zu bringen: Ihr handelt auf eigene Gefahr und Verantwortung!
(Natürlich könnt Ihr unten Fragen stellen,
wenn etwas unklar ist und konstruktive Kritik ist immer willkommen! :-) )

Viel Spaß mit dem Raspberry PI als Werbeblocker!

Für Dich noch mehr interessante Artikel:


    18 Kommentare zu “Raspberry PI als Werbeblocker”

    1. th sagt:

      Hallo,

      danke für die schöne Anleitung. Ich habe das Problem, dass die Fritzbox durch den dns rebind Schutz die Auflösung auf den Lokalen Pixelserver nicht zulässt.
      Wie haben Sie das gelöst??

      Viele Grüße

      • Razien sagt:

        Hallo,

        Danke für das Lob :-) . Ich hatte am Anfang auch Probleme,
        es müssen beide IPv4 wie auch IPv6 Adressen, als DNS-Server bei der Fritzbox eingetragen werden
        (es kann ein paar Minuten dauern,
        bis die Clients die neue Einstellung übernommen haben, ggf. einmal die Clients neu starten).
        Nur mit IPv4 hat es bei mir nicht geklappt.

        Viele Grüße
        Razien

    2. th sagt:

      Das hat bei mir auch nicht geholfen. Die Fritzbox bleibt immer DNS-Proxy und verbietet den DNS-rebind (also das Weiterleiten ins eigene Netzwerk) auch auf die leere Seite des Pi-hole, die statt der Werbung angezeigt werden soll.
      So wird die Werbung zwar geblockt, aber es werden teilweise Fehler angezeigt, dass die Seiten nicht geladen werden.
      Dass Ihre Lösung überhaupt funktioniert liegt daran, dass sie die Adresse des Pi-hole durch 127.0.0.1 ersetzt haben, andernfalls wird das Ganze unerträglich langsam, da die Adressen der Werbung nicht aufgelöst werden können.

      Lange Rede kurzer Sinn: Ich habe auf dem Pi jetzt auch einen DHCP Server laufen, der die IPs verteilt und den pi-Hole direkt als DNS-Server rausgibt. DHCP an der Fritzbox ausschalten, Neustart, fertig.

      • Razien sagt:

        Ok, Danke für den Hinweis/Tipp, auch ich lerne immer gerne dazu. :-)

        • Manu sagt:

          Ich werfe einmal in den Raum, dass man beim DHCP Server der FritzBox einfach als DNS Server den Raspberry eintragen kann.

          Bei der DHCP Vergabe durch die FritzBox wird dann bei den Clients ganz regulär der Raspberry als DNS-Server vergeben.

          Einen zusätzlichen/weiteren DNS-Server aufzusetzen und den der FritzBox abzuschalten…kann man machen, wäre aber absolut unnötig.

          • Razien sagt:

            Im Prinzip, stimme ich Dir zu.
            Das Problem ist nur, das die Fritzbox „Bind“ aktiviert (laut AVM als Phishing schutz) hat und man ihn leider nicht deaktivieren kann.
            Hierdurch wird das „ändern“ der DNS, auch wenn der Raspberry als DNS-Server eingretragen ist, verhindert.
            Ich habe noch einen Router von TP-Link wo das Binding deaktiviert werden kann, dann funktioniert, das mit dem eintragen.
            Kann man das Binding eventuell bei den „Laborversionen“ von AVM aktiviert?

            • René sagt:

              Also, man muss den DNS-Server nicht unter Internet -> Zugangsdaten -> Tab „DNS-Server“ ändern,
              sondern unter Heimnetz -> Tab „Netzwerkeinstellungen“ -> dann unten IPv4-Adressen -> dort bei „Lokaler DNS-Server“ die IP des RP eintragen

            • Razien sagt:

              Ok, wenn das jetzt klappt, wäre das natürlich Super, :-)
              Schon getestet ?
              PS: Nach dem Punkt Heimnetz auf Heimnetzübersicht klicken, dort ist dann der Tab Netzwerkeinstellungen

    3. Tomasww sagt:

      Sind die Hinweise von th in der aktuellen Anleitung berücksichtigt, wenn ich das so alles einrichte, wie im Artikel beschrieben?

      • Razien sagt:

        Noch nicht, das Rebind Problem existiert im Augenblick, wie es aussieht nur bei der FritzBox.
        Wenn ich die Zeit habe, werde ich den Artikel überarbeiten.
        Sollte es Problem geben, einfach hier Fragen. :-)

    4. Sascha sagt:

      habe mich nun auch mit der Thematik auseinandergesetzt, läuft im Grunde ganz ok. Nur würde ich gerne die aus Adblock bekannten Listen Easylist sowie die Fanboys-List mit einbinden.
      Leider bekomme ich es nicht hin, jemand schon versucht?

    5. otcho sagt:

      Hallo!

      Wie sieht das Setup aus, wenn man IPv6 verwenden möchte? Habe bereits vieles ausprobiert, aber mein Pi bekommt regelmäßig (?) eine neue IPv6-Adresse, die dann nicht mehr mit dem eingetragenen DNS-Server in der FritzBox zusammenpasst.

      Viele Grüße!

      • Razien sagt:

        Hallo,
        Du kannst im setup ip v6 einstellen/eine ip-adresse zuweisen.
        Das Problem ist wahrscheinlich eher die Fritzbox, da Du dort das Bind(ing) nicht deaktivieren kannst.
        Entweder also einen anderen Router, oder auf dem Raspberry einen zusätzlichen DHCP-Server installieren und den der Fritzbox deaktivieren.

        Gruß Razien

    6. Thomas sagt:

      Ich habe mal eine Frage zum Hinzufügen von alternativen Filterlisten wie EasyList oder Prebake. Und zwar: die .txt-Dateien müssen „geparsed“ werden – also das Runterkürzen auf reine Domains. Ich habe diesbezüglich auch schon Scripts gefunden und es zum Teil bewerkstelligen können. Das Ergebnis war: aus fast 300.000 Domains wurden 3000 – ich habe den Eindruck, dass da ein bisschen zu viel „geparsed“ wurde! :)

      Tipps, wie man das besser anstellen kann? :)

      • Razien sagt:

        Gute Frage :)
        Ich kenne weder die Listen, noch die Scripte, daher kann ich dazu schlecht etwas sagen.
        Ein Vermutung wäre, das das Script alles auf den Hostnamen herunterbricht (Wegfall der „Unterseiten“) und alle doppelten Hosts raus filtert.

    7. […] Raspberry PI als Werbeblocker Leider werden auch “böse” Programme/Dialer/Abos als Werbung verteilt, ein eigener Werbeblocker, steigert deshalb auch die Sicherheit. Da er über DNS funktioniert, muss er nur einmal installiert werden und funktioniert sofort auf allen Geräten (Desktop, Smartphone, Tablett, Spielekonsole etc.). Die eingesparte Bandbreite, kommt auch der Netzwerkgeschwindigkeit zu gute. […]

    8. Torsten sagt:

      „die IPv4 und die IPv6 Adresse des Raspberry auslesen und als DNS-Server im DSL-Router eintragen
      (bei mir in der Fritzbox unter Internet/Zugangsdaten/DNS-Server)“
      FUNKTIONIERT NICHT BZW. NICHT MEHR WIE BESCHRIEBEN! An dieser Stelle wird der WAN DNS eingestellt.
      Sofern ein interner DNS (so wie in diesem Fall der PI) benutzt wird erfolgt die Einstellung in der Fritz-Box hier: Heimnetz/Netzwerkeinstellungen/IPv4-Adressen/“Lokaler DNS-Server“

      Ansonsten vielen Dank für die Anleitung, hat bis auf den o.g. Punkt gut funktioniert!

    Schreibe einen Kommentar

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