Pogoplug/ Raspberry Pi – transparenter Proxy als Werbefilter und Debuggingproxy

 

Proxyserver hatten zu Zeiten des „langsamen“ Internets (gut, das kommt dank der Telekom ja bald wieder) eine gewisse Daseinsberechtigung. Zur Beschleunigung von Seitenaufbauzeiten sowie Verringerung der Datenübertragungsmengen sind Proxyserver mittlerweile eher nicht mehr gebräuchlich. Eine gute Möglichkeit für einen Proxyserver (z.B. Squid) ist das Bereinigen von Internetseiten. Werbebanner, Tracking-Bilder und andere Datensammelgeschichten lassen sich recht einfach rausfiltern. Etwas Aufwand in die weitere Pflege der geblockten Seiten vorausgesetzt kommt man nach und nach nicht mehr mit den Adservern in Berührung, Webseiten werden wieder ansehnlich und die Datensammelleidenschaft einiger Seiten wird auch stark eingeschränkt. Apps auf Smartphones verlieren ihre zum Teil recht dominanten, blinkenden, bunten, flackernden Werbebalken. Statt dessen wird häufig nur noch ein schlichter, grauer Balken „no ads available“ angezeigt. Also lieber der als das geflackere nervender Werbebilder.
In Kurzform: Es wird wieder schöner…

Mein Raspberry Pi wurde eh schon soweit umgebaut, dass dieser per LAN angeschlossen einen OpenVPN Tunnel zu einem vertrauenswürdigen Server aufbaut und den Datenverkehr vom internen LAN bzw. WLAN Interface nur noch durch den VPN Tunnel zulässt. Er kann nunmehr als ideale Lösung für Netzzugänge dienen, denen man kein 100%iges Vertrauen zukommen lässt. Durch seine Größe und Kompaktheit kann er also recht einfach mitgenommen werden und im Hotel, bei Veranstaltungen usw. einen sicheren Internetverkehr regeln. Am USB Port einen LAN-USB-Adapter angeschlossen sorgt für das nötige Interface, um alles durch den Proxy zu schleifen.
Als Aufbaumöglichkeit: Router – Proxy – LAN/ WLAN.

Da Squid für diesen Anwendungsfall keine großen Anforderungen an CPU & Hardware stellt nutzen wir Squid & IPtables in Kombination um den ausgehenden normalen HTTP (Port 80) Datenverkehr vom internen LAN/ WLAN durch IPtables in Squid zu übergeben. Hier werden Tracking- & Adserver herausgefiltert.

Natürlich kann man auch anfangen, auf den Clients mit Adblockern im Browser zu hantieren. Das errfordert bei jedem Client einen Eingriff, sorgt nicht für eine „Bereinigung“ des Smartphone-Datenverkehrs und ist natürlich aus „Bastlersicht“ langweilig.

 

1. Squid installieren

Squid wird über apt installiert:
      Shell #> sudo apt-get install squid

 

2. Basis-Konfiguration anpassen

Die Konfiguration liegt in /etc/squid/squid.conf. Nur ein paar wenige Änderungen sind nötig.

 

3. Squid Filterregeln erstellen

In der squid.conf wird nun zusätzlich eine ACL angelegt, welche auf eine Datei /etc/squid/blocked-urls.conf verweist. Innerhalb dieser Datei werden dann nach und nach die gesperrten URLs bzw. Begriffe eingetragen.

      acl blockregexurl_ads url_regex "/etc/squid/blocked-urls.conf"
      http_access deny blockregexurl_ads

 

4. eigene Hinweisseiten ausgeben

Die Hinweisseiten von Squid über geblockte Seiten sind hilfreich, aber doch überflüssig. Wir wollen den Inhalt dieser Squid-Seite auf ein Minimum reduzieren. Hierzu legen wir in /usr/share/squid/errors/en/ und in /usr/share/squid/errors/templates/ eine Datei mit dem Namen ERR_TRACKING an. Zu Testzwecken nimmt man sich einfach eine vorhandene Datei und passt diese an bzw. löscht den Unnötigen Teil einfach heraus.
Danach wird in der squid.conf für die ACL ein deny_info Eintrag vorgenommen. Der deny_info sorgt dafür, dass der Nutzer eine entsprechende Seite oder URL o.ä. erhält. Wir wollen nur die Ausgabe der Hinweisseite.

      deny_info ERR_TRACKING blockregexurl_ads
(Das Schema ist deny_info Seitenname acl-name.)

 

5. Squid starten

Wenn Squid noch nicht gestartet wurde, kann er nun gestartet oder restartet werden.
     Shell #>sudo service squid (re)start

Händisch wird im Browser der Squid-Proxy mit konfiguriertem Port 3128 angegeben. Das sollte nun dafür sorgen, dass über den Proxy gesurft wird. Im Proxyserver-Log /var/log/squid/access.log werden nun die Seitenaufrufe erscheinen.

 

6. IPtables nutzen und ausgehenden HTTP Verkehr in den Proxy übergeben

Nun kommt der eigentliche Punkt: Wir wollen (ersteinmal) nur den ausgehenden HTTP Verkehr „umbiegen“ und an den Proxy übergeben. Damit keine Einstellungen an den Clients vorgenommen werden müssen und jeder HTTP Verkehr durch den Squid-Proxy geleitet wird geschieht dieses auf dem Pogoplug mit Hilfe von IPtables. Alle Geräte (Rechner, Mobilgeräte, Smartphones usw.) im Netzwerk, die die IP vom Proxyserver als Gateway eingetragen haben, werden somit automatisch durch den Proxyserver geschickt. Der HTTP Verkehr wird dadurch von Werbung und Trackingtools bereinigt. Dieses geschieht somit für den Nutzer transparent und ohne nötigen Konfigurationsaufwand. Der Proxy ist also „transparent“ im HTTP Datenverkehr zwischen Client und Server zwischengeschaltet.
Wenn man das Prinzip noch weiter dicht machen möchte kann man den ausgehenden Datenverkehr komplett unterbinden und nur noch vom Proxyserver erlauben. Somit würden auch die Systeme eingefangen werden, die das Gateway abändern. Kann man machen, muss es aber nicht…

Folgende Regeln kommen in IPtables (hinzu). LAN Interface ist eth1, externes („Internet“) ist eth0.

     # Prerouting von Port 80 zum SquidPort (hier: 3128)
     iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

     # Weiterleitung lokal generiertem Traffic zum SquidPort
     # ausgenommen der vom User proxy (unter der der Proxy läuft)
     iptables -t nat -A OUTPUT -p tcp --dport 80 -m owner --uid-owner proxy -j ACCEPT
     iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 3128

 

7. Client Datenverkehr umstellen

Nun auf dem Client den im Browser konfigurierten Proxyeintrag deaktivieren. Clients, die den Proxy als default-GW eingetragen haben surfen nun über den Proxy.
Den DHCP Server kann man nun anpassen, dass der als default-GW den Proxy ausgibt. Oder halt den Proxy „zwischenschleifen“…

 

8. Sichtung der Logs

Zu Debuggingzwecken lohnt es sich, ins Logs des Squid zu schauen. Dort werden gesperrte Seitenaufrufe mit TCP_DENIED vermerkt. Hat man überhaupt keine Logeinträge, so sollte man sicherstellen, ob die IPtables Regeln korrekt sind und der Clientrechner den Proxyserver als Gateway eingetragen hat.

 

9. Erweiterung der Filterregeln

Nun kann man den Datenverkehr im Log des Proxyservers betrachten. Gerade einige Smartphone-Apps und auch Webseiten nutzen viele verschiedene Adserver und anderen Tracking-Unfug. In den Logs tauchen diese auf. Je nach Vorliebe kann man nun nur bestimmte Hosts oder gleich ganze Domains, Pfade zu Skripten oder ganze Begriffe usw. in die Filterliste aufnehmen. Bei Nutzung von Begriffen sollte man allerdings vorsichtig sein. Schnell sperrt man zu viel 😉

Nach einer Erweiterung der Filterregeln den Squid reloaden:
      Shell #> sudo service squid reload

Treibt man diesen Aufwand nun regelmäßig, so nimmt die Anzahl unerwünschter Werbebanner stark ab… Bingo.

 

https://blog.rotzoll.net/2013/04/raspberry-pi-ein-rpi-wlan-access-point-mit-openvpn-tunnel/
https://blog.rotzoll.net/2013/04/raspberry-pi-wlan-access-point-einrichten-mit-realtek-8188cus-usb-wlan-adapter/

Dieser Beitrag wurde unter Dokus und Tipps, Linux/ UNIX, Pogoplug, RaspberryPI, Technikspielkram abgelegt und mit , , , , , , , , , , , , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

7 Antworten zu Pogoplug/ Raspberry Pi – transparenter Proxy als Werbefilter und Debuggingproxy

  1. Hendrik sagt:

    Und wenn man selber keine Filterregeln in Squid pflegen möchte gibt es hier ein schönes HowTo um die guten Ad-Block-Plus Filter als Grundlage automatisiert in Squid(Guard) reinzupumpen.

    https://thejimmahknows.com/easylist-to-squidguard-expression-list-conversion/

    • rotzoll sagt:

      Und wo ist der Spieltrieb hierbei? 😉

      • Hendrik sagt:

        Der Spieltrieb ist ja weiter gegeben. geht ja nur um eine gute Grundlage 🙂 Damit auf dem iPad erstmal ruhe ist und nicht n Auto über den Artikel fährt.

    • andi sagt:

      nach deiner Anleitung funtioniert zwar der Squid tansparent allerdings Port 80 downloads vom raspberry (apt-get und wget) nichtmehr mit dem Hinweis Verbindungsaufbau abgelehnt. Ist hier die Suche eher im iptables oder im squid.conf angesagt?

      Danke und Gruss

  2. Ich habe so meine Verständnisprobleme mit “ Clients, die den Proxy als default-GW eingetragen haben surfen nun über den Proxy. Den DHCP Server kann man nun anpassen, dass der als default-GW den Proxy ausgibt. Oder halt den Proxy “zwischenschleifen”…“

    Ist damit der Standardgateway in den Netzwerkeinstellungen gemeint? Wenn ich den manuell hinterlege, kann ich aber kein DHCP mehr verwenden, oder? Damit muss ich die Netzwerkeinstellungen in anderen Netzwerken immer wieder „anpassen“, bevor ich ins Netz kann. Oder habe ich nur ein Verständnisproblem?

    Hintergrund: Ich würde gern einen transparenten Proxy in mein Netzwerk hängen, der den gesamten Traffic aller Geräte (vor allem mobile Devices) filtert, ohne das ich irgendwelche Proxy-Server konfigurieren muss.

    • rotzoll sagt:

      Damit war gemeint, dass der Proxy ersteinmal nicht auch DHCP Server für das Netz spielt. Natürlich kann man diesen auch als DHCP Server nutzen,
      deaktiviert seinen schon vorhandenen DHCP Server (oder stellt in diesem das Default-GW auf die IP des RPi/ Pogoplugs, der wiederum das default-GW
      auf den Router stehen hat).
      Fertig 😉

      Und man wird wirklich erstaunt sein, was mobile WLAN Geräte (iOS genau so schlimm wie Android) alles mit der weiten Welt kommunizieren. Von den nervenden
      Werbebannern in einigen Apps mal ganz abgesehen…. Es lohnt sich auf jeden Fall.

      Gruß,
      malte

  3. Jan sagt:

    Hallo Malte,

    schöner Artikel! Ich hänge gerade an einem Problem und bekomme es mit deiner Anleitung nicht ganz gelöst. Also: Ich habe wie hier ( http://www.tacticalcode.de/2013/02/raspberry-pi-als-accesspoint-oder-wlan-bridge.html ) beschrieben eine WLAN/LAN Bridge realisiert. Am anderen (nicht Pi) Ende des LAN hängt der Router mit DNS/DHCP. Nun möchte ich nach deiner Anleitung eben zwischen WLAN und LAN (praktisch „in die Bridge“) den Sqid packen, sodass sich alle WLAN-Clients (Handy, Laptop, etc) wie gewohnt mit dem WLAN verbinden können und dann ohne Gateway o.ä. ändern zu müssen lossurfen können. Dabei soll der gesamte HTTP (nicht https etc) Traffic über den squid laufen – alles andere nur durchgereicht (an squid vorbei) werden.

    Ich denke das ist nur eine Sache der IP Tables – doch was muss man da einstellen???

    Ich hoffe du kannst mir helfen,
    LG
    Jan

Schreibe einen Kommentar

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