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.
http://blog.rotzoll.net/2013/04/raspberry-pi-ein-rpi-wlan-access-point-mit-openvpn-tunnel/
http://blog.rotzoll.net/2013/04/raspberry-pi-wlan-access-point-einrichten-mit-realtek-8188cus-usb-wlan-adapter/