Startseite
Updates · Suchen

Gefiltertes Surfen

Jänner 2019

Endlich habe ich mich mal dazu aufgerafft und meiner kleinen Raspberry Pi-Kiste wieder ein wenig Leben eingehaucht. Allerdings dieses Mal mit einem langfristigen Ansatz und zwar als Pi-hole. Klingt irgendwie seltsam, ist aber der Name für eine Lösung zum Blockieren von Werbung und Trackern, aber nicht nur für einen Computer, sondern gleich für sein gesamtes, eigenes Netzwerk in der Wohnung.

Adblocker im Browser

Diverse Adblocker wie uMatrix und uBlock oder Andere kennt jeder und fast die Meisten haben solche Plugins oder Addons in ihrem Browser laufen. Bei einem Seitenaufruf wird anhand eingespielter Listen und Vergleichen von Links beziehungsweise Webseiten-Adressen entweder eine Seite ganz gesperrt oder nur Teile davon - zum Beispiel eben Werbung oder diverse Tracker, die im Hintergrund mitgeladen werden. Auch werden oft Skripte an der Ausführung gehindert. All das verhilft zu einem aufgeräumteren und etwas sichereren Surf-Erlebnis und das WWW macht gleich wieder mehr Spaß.

Das Problem

Allerdings heißt das dennoch, dass man beim Aufruf einer Seite erst mal das ganze Webseiten-Paket auf seinen Rechner zieht, verschiedene Server womöglich kontaktiert, weitere Elemente auf unseren Computer laden und der Browser versuchsweise alles zusammensetzt. Und oftmals werden erst dann die einzelnen Elemente gefiltert oder an der Ausführung gehindert. Irgendwie wäre es doch viel netter, doch schon wesentlich früher anzusetzen - und da kommt der Pi-hole in das Spiel, denn direkt beim Aufruf filtert er die Domain-Abfragen auf gut oder schlecht vor, bevor die Anfrage überhaupt abgeschickt wird. Und unterstützt dabei, dass man generell weniger Spuren im Netz hinterlässt.

Was ist DNS?

Was macht das Ding also? Es arbeitet über die DNS-Auflösung. Denn hinter jeder Webseite oder auch Domain-Adresse verbirgt sich in der Regel eine IP-Adresse - man könnte ganz stark vereinfacht sagen, das Domain Name System (DNS) ist so was wie die Ansammlung von einfach beschriebenen Wegweisern auf die zahlenlastigen IP-Adressen, die sich so kaum einer merken könnte.

Beim Aufruf einer Website fragt der Computer, respektive über den Router, zu Hause im Wohnzimmer zunächst diese Informationen bei einem der unzähligen öffentlichen DNS-Server im weltweiten Netz ab und gibt diese an den Browser zurück... also "Hey DNS, ich will Muli.cc, wo finde ich denn diesen Server mit diesem Namen?"... und der DNS-Server schaut dann mal in seinem Server-Verzeichnis nach und antwortet "Kein Problem, fahre da über den da drüber, dann rechts und links und dann klopf mal direkt bei der 123.456.789 an! Sollte gerade da sein, dann kannst dir Muli.cc gleich laden!".

Manche Webseiten lösen dabei oft ein unzähliges Hin-und-Her-Abfragen aus, weil sie auf viele verschiedene Quellen zurückgreifen und beim Öffnen der Seite noch viele weitere Elemente nachgeladen werden - und auch die liegen oftmals wiederum auf verschiedenen Servern herum - und so geht das Spiel mehrfach immer wieder von vorne los. Allerdings mit extrem hoher Geschwindigkeit, so dass man diese Vorgänge so eher selten überhaupt bemerkt.

Man könnte es auch mit einem Telefonbuch vergleichen. Zwar kenne ich den Namen und so in etwa den Ort, weiß aber jetzt nicht genau, bei welcher Haus- und Türnummer ich anklopfen muss. Im DNS-Verzeichnis finde ich unter dem Namen jedoch dann schnell die genaue Adresse. Oftmals möchte/muss ich gleich auch die ganze zugehörige Familie besuchen (manchmal unfreiwillig) und erfahre beim Öffnen der ersten Türe die weiteren Namen der restlichen Familienmitglieder und schaue damit erneut im Telefonbuch nach, wo die nun genau wohnen.

Meistens nutzt man als normaler Anwender übrigens einfach den DNS-Server, der im Router voreingestellt ist - das kann entweder der DNS-Server vom eigenen Provider sein oder auch einer von Google, Cloudflare und anderen, großen Diensten.

Und die kleine Pi-Kiste?

Die wird zwischen dem eigenen Computer und dem Router geschaltet und übernimmt in dem Spiel dabei die DNS-Auflösung - soll heißen, bevor die Anfrage an einen der DNS-Server im Netz geht (mit der Bitte um Infos, wo man denn den gewünschten Server nun genau überhaupt in den Weiten des "Internet" finden kann), schaut Pi-hole erst mal in den eigenen Filterlisten nach, ob man denn überhaupt mit dem Server reden mag.

Auf meinem Pi zum Beispiel sind aktuell mehr als 680.000 Domainnamen hinterlegt, die entweder Werbung ausliefern oder mich auf eine nicht so nette Art und Weise tracken wollen.

Steht nun eine Domain auf einer der Filterlisten, dann gibt die kleine Kiste einfach seine eigene lokale IP-Adresse zurück - also sich selber - und macht gar nicht weiter. Der zusätzlich integrierte kleine Webserver liefert stattdessen gleich eine leere Antwort an den Browser zurück.

Datenstaub sparen

Und nun sind wir auch endlich am Ziel... statt eines unerwünschten Werbebanners erscheint auf der Website dadurch einfach nichts. Soll heißen, wir haben eine Webseite aufgerufen, die löst 20 weitere Aufrufe an verschiedene Server aus, weil soviel Werbung mit dabei ist, aber meine Filter sagen "Wir lassen nur diese 5 Aufrufe durch, die restlichen Domains stehen auf meiner Blackliste, da sage ich gleich jetzt schon: nein, das schicken wir gar nicht ab, wir melden gleich stattdessen eine leere Antwort, da ersparen wir uns den Aufwand".

Oder im nochmaligen Vergleich: wir schauen in ein Telefonbuch, um eine genaue Adresse zu finden, fahren dort hin und bekommen dort 20 weitere Namen, um alle Puzzleteile zusammenzusetzen. Wir schauen also erneut im Telefonbuch für die genauen Adressen nach und entdecken bei 15 der Einträgen einen kleinen Warnhinweis, dass das gefährlich sein könnte... und lassen die somit gleich mal aus und fahren erst gar nicht hin - nur zu den restlichen 5 und bemerken dabei, dass das eigentlich eh auch ok und ausreichend ist.

Leicht umzusetzen

Die Lösung Pi-hole gibt es als fertige Lösung online zum Download und ist schnell eingerichtet. Wer schon mal einen Raspberry Pi genutzt hat, bekommt schnell ein Debian Lite oder dergleichen auf die Speicherkarte, schafft es dann auch, das System einzurichten und dann über SSH die vorgegebene Pi-hole-Installation durchzuführen.

Danach gilt es eigentlich nur mehr den Pi als Schnittstelle ins weltweite Netz zu nutzen. Hier gibt es die meisten Probleme, weil vor allem moderne Router eigene DNS-Einträge oft gar nicht oder nur eingeschränkt zulassen. So auch mein UPC-Router, der sich standhaft weigert, einen anderen DNS-Eintrag zu akzeptieren. Glücklicherweise arbeite ich nur mit meinem Stand-PC hier und einem anderen, lokalen Zweit-Gerät, und habe deswegen sowohl unter Linux und Windows einfach lokal den DNS-Eintrag direkt bei beiden Geräten geändert. Und die Sache läuft - recht fein und empfehlenswert aus meiner persönlichen Sicht.

Rekursive Ergänzung

Ich habe das Frage-nach-dem-Server-Spiel nach ein paar Lektüren im Netz übrigens dann noch erweitert und das Setup zusätzlich mit dem lokalen DNS ~ Up-Stream-Server Unbound, der rekursive arbeitet, ergänzt. Damit beantwortet der autoritative Nameserver der jeweiligen Domain jeweils direkt und meine Anfragen im Netz verengen sich nicht zu sehr auf eine der externen Schnittstellen. Auch hier eine zusätzliche Ergänzung zur Sicherheit seiner Daten und seines Netz-Profiles.

Schwarze Listen

Jetzt bleibt noch die Frage, woher weiß man denn überhaupt, welche Seiten oder Adressen nicht so fein sind? Dazu gibt es heutzutage glücklicherweise von der Netz-Community gesammelte Listen, wo Werbe- und Trackingseiten erfasst sind und werden. Beispielsweise dieses Verzeichnis hier oder auch Andere. Diese Listen können in die kleine Pi-Kiste - besser gesagt in die Pi-hole-Lösung - ganz unkompliziert zum größten Teil einfach so importiert werden.

Ist das nicht langsam?

Ganz im Gegenteil - mein Surferlebnis ist unverändert schnell, auch der Speed stimmt und viele Lade-Vorgänge bzw. Adressabfragen erspare ich mir schon im Vorfeld damit. Außerdem kann ich nun jederzeit unbeliebte Domains meinerseits einpflegen und mir mein eigenes Netz-Erlebnis passend freifiltern - oder auch Werbung bewusst auf die weiße Liste setzen, um zum Beispiel einen Entwickler besser zu unterstützen. Aber Sicherheit geht vor und deswegen filtere ich meistens lieber mehr, als zu wenig. uBlock und uMatrix töten dann das übrige Zeugs, das mittels DNS-Einträge nicht gefiltert werden kann und der Rest ist gesunder Menschenverstand.

Innerhalb von zwei Tagen wurden beim Surfen meinerseits mehr als 3300 Anfragen gestellt und davon 1000 und etwas mehr von Pi-hole geblockt. Um genau zu sein, wurden 31,8% der Anfragen an diverse Server, ausgelöst durch unzählige Webseiten-Aufrufe im Hintergrund oder durch Programme und Co., blockiert. Das ist eine erschreckend hohe Summe eigentlich und zeigt wie viel Datenstaub für Nichts eigentlich durch das Netz auf und von seiner Kiste fließt - und zugleich auch die Nützlichkeit einer solchen Lösung. \o/


Nachtrag Februar 2019

Mittlerweile habe ich nicht nur die Blacklists erweitert und auch selber immer wieder diverse Domains über Wildcards nachgetragen, sondern bin auch sehr erfreut über die Idee und Einsatz. Man kann tatsächlich sagen, dass ca. 20-30% des eigenes Netzverkehres damit eingespart wird - ohne Einbußen in irgendeiner Art und Weise. Manche Seiten sind damit sogar schneller und man kann sich recht gut anschauen, wo und wann Seiten bzw. diverse Abfragen geblockt werden.

Zur Sicherheit und auch wenn die CPU-Temperatur sehr niedrig bei ihren üblichen 40~45 Grad steht, habe ich für das Frühjahr und den Sommer vorgesorgt. Mittels eines Cron-Job und einem kleinen Python-Script (gefunden bei Leonardo), das die Temperatur im 30 Minuten-Intervall prüft, sorge ich bei zu hoher Dauerbelastung oder zu großen Plusgraden vor.

Bei 60 Grad schickt mir die kleine Pi-Kiste ein Informations-Email, sollte aus ungewöhnlichen Gründen die CPU-Temperatur auf 80 Grad ansteigen (Hochsommer, Sonneneinfall/Spiegelung oder System-Überlastung) wird ebenfalls ein Email verschickt und das System wird heruntergefahren.

#coding=utf-8
import os
import smtplib
from email.mime.text import MIMEText

critical = False
high = 60
too_high = 80

# Zuerst mal die Temperatur ermitteln
def getCPUtemperature():
res = os.popen('vcgencmd measure_temp').readline()
return(res.replace("temp=","").replace("'C\n",""))

# Wert umwandeln
temp = float(getCPUtemperature())

# Check, ob Temperatur 60 Grad plus - Mail senden - bei 80 Grad plus Pi runterfahren
if (temp > high):
if temp > too_high:
critical = True
subject = "Kritische Temperatur: {} shutting down!!".format(temp)
body = "Vorsicht: aktuelle Temperatur ist zu hoch: {} \n\n Pi wird abgeschaltet!".format(temp)
else:
subject = "Temperatur: {} ".format(temp)
body = "Aktuelle Temperatur: {} ".format(temp)

# SMTP-Daten
server = smtplib.SMTP('XXXX', 587)
server.ehlo()
server.starttls()
server.ehlo
# Login
server.login("USERXXX", "PASSXXXX")
    
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = "XXXX"
msg['To'] = "XXXX"

# Email versenden
server.sendmail("XXXX", "XXXX", msg.as_string())
server.quit()
    
# Bei kritischer Temperatur System halt
if critical:
os.popen('sudo halt')

Ein Überspannungsschutz bei der Steckdosenleiste sorgt ebenfalls vor und ein externer Temperatursensor in der Nähe mit unabhängigen GSM-Alarm auch bei Stromausfall plus Rauchmelder als Brandschutz in der Wohnung sind weitere Schutzfaktoren - denn sowohl Router als auch der Pi laufen als einzige Geräte in der Wohnung auch dann, wenn ich mal nicht da bin. Da schaden einfach Schutzmaßnahmen um wenige Euro grundsätzlich nicht und man hat noch mehr ruhige und entspannte Freude mit solchen Lösungen. \o/


Nachtrag Februar 2019

Und noch ein kleiner Nachtrag... da ich mit einem zweiten, alten Rasperry Pi-Kistchen gerade an einer Überwachungskamera schraube, habe ich heute mal etliche Info- und Hilfeseiten nach Ideen und dergleichen durchforstet.

Und siehe da, die Pi-hole Lösung hat tatsächlich in den letzten 24 Stunden mehr als 38% aller Aufrufe geblockt, also beinahe und aufgerundet fast 40% aller Anfragen gar nicht erst durchgeführt, weil die eingeforderten Domains auf Blacklists stehen. 40% des Netzkonsumes meinerseits wurden somit eingespart - und es ist mir nicht mal bewusst aufgefallen, noch hat es mein Surferlebnis verändert. Man sieht hier auf erschreckende Weise, wie verseucht das Surferlebnis sonst wäre und wie frustrierend eigentlich diese Entwicklung des WWW geworden ist. Einstmalig als Hoffnungsträger für neue Freiheiten, hat es sich zu einem Ort des dunklen Kommerzes verformt.