17th Jul 2012

Raspberry Pi + Squid + Block Ads

Machen wir in meiner kleinen Pi Serie weiter. Auf normalen Desktop Computern hat man eigentlich immer AdBlock im Browser aktiviert um lästige Werbung loszuwerden. Auf den “neuen” Geräten wie Smartphone oder Tablet sind diese nicht verfügbar und man muss einen kleinen Umweg gehen.

Was bietet sich also nicht eher an als einen Proxy aufzusetzen und unerwünschten Inhalt zu filtern? Zensur im eigenen Netzwerk, basierent auf der Anleitung von calomel.org! Dank an pgl.yoyo.org gibt es eine ordentliche Liste die auch noch immer aktualisiert wird. Man kann sich die Liste in mehrere Formate ausgeben lassen und die Domains/IPs auch gerne per iptables sperren. Ich gehe den Weg des Proxies, weil zum Beispiel mein Blackberry Playbook kein IPv6 kann (ARGH!) (muss nur im Wlan Profil aktiviert werden) und ich durch den Proxy wenigstens sekundär v6 benutzen kann. Also erstmal Squid3 installieren, weil Squid2 kein v6 kann:

apt-get install squid3

In der Konfiguration /etc/squid3/squid.conf müssen wir folgenden Eintrag hinzufügen. Dieser muss vor allen anderen acl Einträgen stehen (ungefähr Zeile: 693) und sieht folgendermaßen aus:

acl ads dstdom_regex “/etc/squid3/ad_block.txt”
http_access deny ads

Damit haben wir Squid gesagt, dass es allen Zugriff auf die Domains in der txt Datei sperren soll. Die Liste der zu sperrenden Domains erhalten wir durch einen Cronjob den wir uns schreiben:

#!/bin/bash
# script: update ad server list
# get new ad server list
wget -q -t 5 ‘http://pgl.yoyo.org/adservers/serverlist.php?hostformat=squid-dstdom-regex&showintro=0&mimetype=plaintext’ -O /etc/squid3/ad_block.txt

# refresh squid
/usr/sbin/squid3 -k reconfigure

Das Script speichern wir unter /etc/squid3/fetch_adserver.sh. Es lädt sich die Liste herunter und Squid wird dazu gezwungen die Liste neu einzulesen. Ein einfacher Cronjob führt das Script alle drei Tage aus:

35   5    *   *   */3 /etc/squid3/fetch_adserver.sh >> /dev/null 2>&1

Erstmalig das Script per Hand ausführen und die Datei erstellen. Squid wird automatisch neu geladen und schon kann man surfen. Ach auf dem Playbook macht es wieder mehr Spaß :)

Vorher:

Nachher:

Damit man nicht zu viele Fehlermeldungen vom Squid im Browser sieht, sollte man noch die Datei “ /usr/share/squid3/errors/English/ERR_ACCESS_DENIED” bearbeiten und die Fehlermeldungen entfernen. Dabei sollte man den Inhalt einfach durch ein “<a>” ersetzen.

5 Responses to “Raspberry Pi + Squid + Block Ads”

  1. Andi Says:

    Hallo, danke für das geniale Tutorial – ich hätte nur eine Frage zu dem Skript für den Cronjob:
    wenn ich das manuell auf dem rpi ausführe, sagt es mir:
    “./fetch_adserver.sh: line 4: -O: command not found”
    weil er das -O nicht kennt. Was muss ich daran ändern, dass es wieder geht?

    Und weiterhin wollte ich fragen, ob man für das einzelne adblock file nicht auch mehrere dateien verwenden könnte – siehe Firefox Adblock Plus addon. Dort gibt es für jede Kategorie die man möchte, userverwaltete Listen, z.B. “Fanboy’s List” oder direkt Listen von deutschen Usern.
    Diese haben den Vorteil, dass sie extrem ausführlich und detailiert sind; in Firefox sind ads bei mir daher Vergangenheit.

    Vielleicht könntest du dem Tutorial diese noch dazufügen (Sofern dies möglich ist)
    Vielen Dank für die super Erklärungen!

    Andi

  2. Andi Says:

    So, hab gerade noch schnell nachgeschaut, eine Filterliste z.B. die “Easylist” hat den folgenden Link:
    https://easylist-downloads.adblockplus.org/easylist.txt

    Sie besteht allerdings nicht nur aus Addressen, sondern auch einzelnen Ausdrücken – kann man sowas in Squid überhaupt filtern?

    Grüße
    Andi

  3. Tom Says:

    Bei mir funktioniert alles wenn ich die ” in den Befehlen durch richtige Gänsefüßchen (“) ersetze

  4. raspberry pi - squid3 proxy and ad blocker Says:

    [...] itbert [...]

  5. xsas Says:

    @ andi versuch das mal dann kommt nicht mehr “command not found”

    wget -q -t 5 -O /etc/squid3/ad_block.txt “http://pgl.yoyo.org/adservers/serverlist.php?hostformat=squid-dstdom-regex&showintro=0&mimetype=plaintext”

Leave a Reply