Ad-Blocking auf die billige Tour

Mittlerweile gibt es auch für den Safari-Browser von Apple ein AdBlock-Plugin, aber irgendwie blockt mir das zu wenig.

Früher habe ich das mal anders gemacht. Seit vorgestern mache ich es wieder wie damals:

Auf so ziemlich allen unixoiden Systemen existiert die Datei /etc/hosts. Wenn man eine URL in den Browser eingibt oder irgendein Programm sich zu einem Domain-Namen verbindet, dann schaut das Betriebssystem zunächst in die Datei /etc/hosts, vergleicht den Domain-Namen und wenn er dort steht, dann wird die dazugehörige IP-Adresse zurückgegeben. Wenn dort nichts von dieser Domain steht, dann werden der Reihe nach die Nameserver abgefragt, die in der Datei /etc/resolv.conf aufgelistet sind. Das ist naturgemäß langsamer. Allerdings haben manche Browser einen eigenen DNS-Cache. Bei Firefox bin ich mir da sicher, bei anderen Browsern bin ich mir wiederum nicht sicher. 

Ich habe mal gehört, dass es unter Windows auch so eine Datei geben soll. Aber da ich in diesem Artikel ein Bash-Script vorstelle, das sicher nicht einmal von diesem neumodischen Windows Powershell-Schwachsinn unterstützt wird, können Windows-Benutzer hier praktisch schon aufhören, mitzulesen.

In die /etc/hosts schreibt man also IP-Adressen und Hostnamen rein, die man miteinander assoziiert haben will. Das kann verschiedene Zwecke haben:

1.) Man will die anderen Computerbenutzer ärgern. Man kann beispielsweise DNS-Anfragen nach microsoft.de auf apple.de umleiten. Dazu einfach eine Zeile zur /etc/hosts zufügen: “17.149.160.31 microsoft.de”, wobei die Nummern da Apples IP-Adresse darstellen.

2.) Man will gewisse Seitenaufrufe beschleunigen. (Wenn der Browser einen eigenen DNS-Cache hat, bringt das hier nichts) Oft aufgerufene Domains kann man hier also statisch eingeben und schon läuft alles schneller, vor allem wenn von der gleichen Domain viele Dateien pro Seite geladen werden.

3.) Man hat keine Lust, zuhause immer “192.168.1.1” im Browser einzugeben, wenn man auf seinen Router zugreifen will. Also assoziiert man einfach ein Kürzel damit, indem man eine Zeile an die /etc/hosts anfügt: “192.168.1.1 router”. Und man kann sofort über “router” auf den Router zugreifen, anstatt umständlich die IP einzugeben. Das mache ich auch mit meinem gejailbreakten iPod so, wenn ich per SSH drauf will, weil ich seine IP ständig vergesse.

 4.) Man will Werbeseiten blocken, und darum geht es in diesem Artikel eigentlich: Viele Server im Internet würde man gerne komplett blockieren, denn von denen bekommt man immer nur Werbung und nichts anderes zu sehen. Diese Domains kann man mit der /etc/hosts-Methode einfach auf Localhost (127.0.0.1) umleiten und schon kommen dort nie HTTP-Requests nach Werbebildchen an, also kommen auch keine nervigen Werbebildchen, Javascripts oder sonstwas zurück. Perfekt!

Aber es gibt so viele Werbeserver. Alle per Hand einfügen? NEE!

Es gibt eine ständig gepflegte Liste an nervigen Werbeservern im Internet auf http://pgl.yoyo.org/adservers/. Das tolle an dieser Liste ist, dass man sie in den verschiedensten Formaten anfordern kann, so dass man auch verschiedene Werbeblocker damit füttern kann. Im /etc/hosts-Format bekommt man sie praktischerweise auch.

Und damit man möglichst kaum Hand anlegen muss, kann man sich das alles schön automatisieren.

Zunächst sollte man sich eine Datei anlegen, die eine “nackte” /etc/hosts Datei repräsentiert. Also so wie man sie normal hat, ohne dass Werbeserver eingetragen sind. Ich habe meine einfach mal /etc/hosts.bak genannt. Wenn man sowieso noch keine Werbeserver eingetragen hat, gibt man einfach in die Konsole ein (Der folgende Befehl kopiert die bestehende Datei einfach):

sudo cp /etc/hosts /etc/hosts.bak

Und als nächstes schreibt man sich ein kleines Script zusammen:

#!/bin/sh
echo "Updating adserver list..."
sudo cp /etc/hosts.bak /etc/hosts
curl "http://pgl.yoyo.org/
adservers/serverlist.php?
hostformat=hosts&showintro=0&
startdate%5Bday%5D=&startdate%5B
month%5D=&startdate%5Byear%5D=&
mimetype=plaintext"
| sudo tee -a /etc/hosts >& /dev/null
echo "Done. Have fun!"

Diesen Bash-Code kann man jetzt einfach per Texteditor unter /usr/bin/adblockrefresh abspeichern und mittels “chmod +x /usr/bin/adblockrefresh” ausführbar machen (Das sollte mit Root-Rechten geschehen, sonst klappt’s nicht!). Ein kleiner Aufruf von “adblockrefresh” in der Konsole macht jetzt die ganze Arbeit.

Werbeserver sind jetzt auf dem gesamten System blockiert. Für jeden Browser, für jedes Programm. Browser mit DNS-Cache sollte man vielleicht mal neu starten.

War Adblocking jemals einfacher? Jedenfalls muss ich jetzt nicht mehr diese verdammt nervige Javascript-Werbung wegklicken, bevor ich serienjunkies.org betreten kann.

4 thoughts on “Ad-Blocking auf die billige Tour

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s