„Mother Of All Ad-Blocking“

Im XDA-Forum gibt es die „Mother Of All Ad-Blocking“ für Android-Geräte. Hierbei wird eine individuelle „hosts“-Datei installiert und so Werbung blockiert.
Ob für den lokalen DNS-Server, den Desktop oder das Smartphone: Werbung blockieren tut in der heutigen Zeit immer gut, denn es spart Bandbreite und, ganz wichtig, schont die Nerven.

Changelog

  • 16.01.2014 – Cronjob ersetzt, da vorher nicht auf allen Debian/Ubuntu-Varianten gleichermaßen funktionsfähig

Die angebotene Liste ist eine große Zusammenfassung aus verschiedenen Quellen, weshalb ich sie lokal auf einem DNS-Server installieren möchte. Als Nameserver-Forwarder benutze ich „dnsmasq“, welcher, sofern nicht anders konfiguriert, die Einträge aus der „hosts“-Datei respektiert (=kein „no-hosts“ in der Konfiguration).
Der Download erfolgt via „http://adblock.mahakala.is“. Mit „wget“ und „curl“ funktioniert der Download nicht direkt, weshalb „Mozilla/5.0“ als User-Agent gesetzt wird. Außerdem hat die Liste eine eigene Kopfzeile, die weg geschnitten werden muss:

# AD BLOCKING by: Jake Thomas
# Last Update on: 07 January 2014
# Domain Block Count: 339285
# contact me on XDA: http://forum.xda-developers.com/member.php?u=4877037
# Copyright (c) 2007-2014, Jake Thomas (BSDgeek_Jake) (thomasj-gnugpl@usa.net)

# DEFAULT
127.0.0.1 localhost
127.0.0.1 localhost.localdomain
255.255.255.255 broadcasthost
127.0.0.1 android

Vorhandene/Eigene Einträge möchte ich zudem beibehalten. Der Einfachheit halber verwende ich „curl“ für den Download, dieses kann vorab installiert werden. Für Debian und Derivate:

sudo apt-get install curl

Der Befehl, um die Liste einmalig anzuhängen (als root):

curl -s -A "Mozilla/5.0" http://adblock.mahakala.is | \
sed -e '1,/android/d' >> /etc/hosts

Zum aktualisieren der Liste (ebenfalls als root):
ACHTUNG: Das Aktualisieren funktioniert nur, wenn die Liste bereits einmal angehängt wurde, da „sed“ nach „BLOCKING STARTS“ sucht.

sed -n "/BLOCKING STARTS/q;p" /etc/hosts >> /etc/hosts.new && curl -s -A "Mozilla/5.0" http://adblock.mahakala.is | sed -e "1,/android/d" >> /etc/hosts.new && mv /etc/hosts.new /etc/hosts && sed -i '/^$/d' /etc/hosts

Und als Cronjob jeden Tag aktualisieren:

sudo crontab -e

Einfügen:

0 0 */1 * * PATH=/usr/bin:/bin sed -n "/BLOCKING STARTS/q;p" /etc/hosts >> /etc/hosts.new && curl -s -A "Mozilla/5.0" http://adblock.mahakala.is | sed -e "1,/android/d" >> /etc/hosts.new && mv /etc/hosts.new /etc/hosts && sed -i '/^$/d' /etc/hosts

Das schöne ist, dass zusätzlich viel In-App Werbung blockiert wird, wenn das Smartphone im WLAN des eigenen DNS-Servers steht. Aber auch so, auf dem Desktop, ist es eine sehr umfangreiche Liste.

Optional: Alternative als dnsmasq-Konfigurationsdatei

Via „yoyo.org“ ist es möglich, eine etwas weniger umfangreiche, dennoch starke Liste, komplett im Konfigurations-Format des „dnsmasq“ herunterzuladen.
Einmalig herunterladen und aktivieren:

sudo wget -O /etc/dnsmasq.d/adblock.conf "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=dnsmasq&showintro=0&mimetype=plaintext" && sudo service dnsmasq restart

Als Cronjob jeden Tag aktualisieren:

sudo crontab -e

Einfügen:

0 0 */1 * * wget -O /etc/dnsmasq.d/adblock.conf "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=dnsmasq&showintro=0&mimetype=plaintext" && service dnsmasq restart

Anmerkung: Ich fühle mich verpflichtet zu sagen, dass Entwickler guter Software immer unterstützt werden sollten. Wer keine Werbung will, der kauft die „Pro/Ultra/Sonstwas“-Version von XY.
Leider gibt es auch dubiose Entwickler, die trotz Bezahlung noch vereinzelt Werbung einblenden, wofür ich kein Verständnis habe.

4 Antworten auf “„Mother Of All Ad-Blocking“

  1. Elinoy

    Dazu nochmal eine Frage: Was mache ich denn wenn der Port 80 tatsächlich besetzt ist? Ich möchte das auf einem DD-WRT-Router laufen lassen, dessen GUI Port 80 sinnigerweise besetzt.

  2. coacx

    Wenn Werbung in Textform geblockt wird ist das sicher richtig gut, wie verhält es sich jedoch mit Bildern?
    Wenn man AdBlock im Browser benutzt werden Mechanismen verwendet die den sichtbaren ausgegebenen HTML Code ändern so das durch nicht angezeigte Werbung frei gewordener Platz auch wieder anderes ausgenutzt wird. Wird jedoch nur das auflösen der Adresse unterbunden dann wird ja immer ein, je nach Browser unterschiedlicher, Platzhalter angezeigt der die nicht verfügbaren Bilder ersetzt und mit „broken“-icons ersetzt.
    Ist das dann nicht auch eher unansehnlich wenn die halbe Webseite als „broken“ angezeigt wird?
    Wie empfindest du das ‚Look and Feel‘ mit der Methode?

    1. André P. Autor

      Hi,
      bei Bildern kannst du mit „pixelserv“ arbeiten.
      Zum Beispiel alle „127.0.0.1“ in der „hosts“-Datei durch „192.168.1.1“ (eben dein DNS-Server oder Desktop) ersetzen:

      sed -i "s/127\.0\.0\.1/192\.168\.1\.1/" /etc/hosts

      Dann „pixelserv“ herunterladen und die IP für den Listener ändern (hier wieder „192.168.1.1“):

      sudo su
      cd /opt
      curl http://proxytunnel.sourceforge.net/files/pixelserv.pl.txt | tee /tmp/pixelserv | sed "s/0\.0\.0\.0/192\.168\.1\.1/" > pixelserv
      chmod +x pixelserv
      exit

      Init-Script für „pixelserv“:

      sudo nano /etc/init.d/pixelserv

      Mit Inhalt:

      #! /bin/sh
      # /etc/init.d/pixelserv
      #
      
      # Carry out specific functions when asked to by the system
      case "$1" in
         start)
           echo "Starting pixelserv "
          /opt/pixelserv &
           ;;
         stop)
           echo "Stopping script pixelserv"
           killall pixelserv
           ;;
         *)
           echo "Usage: /etc/init.d/pixelserv {start|stop}"
           exit 1
           ;;
      esac
      
      exit 0
      

      Den Service installieren und starten:

      sudo chmod +x /etc/init.d/pixelserv && sudo update-rc.d pixelserv defaults && sudo service pixelserv start

      Am besten im Anschluss noch den DNS-Dienst neustarten. Danach wird anstatt der Werbung ein Pixel im .gif-Format angezeigt. :)
      Voraussetzung ist natürlich, dass noch kein Dienst auf Port 80 arbeitet und dieser überhaupt zugänglich ist (iptables etc…)

      1. coacx

        Klasse, vielen Dank für den Hinweis!

        Ich werde das in der kommenden Woche mal evaluieren, aber ich denke das wird damit eine Lösung um einen globalen AdBlocker zu haben.

        Super Sache :)

Schreibe einen Kommentar

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