Eigener WLAN-Hotspot als Kindersicherung oder Adblocker mit Squid

Will man seine Kinder vor Webseiten schützen, die noch nicht altersgerecht so bieten viele Router schon dieses Feature eingebaut. Die Erfahrung hat aber gezeigt, dass diese Filter nicht immer korrekt funktionieren oder schwer zu pflegen sind. Vor allem wenn dann noch mobile Endgeräte ins Spiel kommen, deren Apps nur dann funktionieren, wenn bestimmte Domains erreichbar sind, wird es schwer eine vernünftige Whiteliste zu pflegen. Ohne Logfile-Auswertung („Was wurde von der App X alles aufgerufen?“) helfen diese Filter auch nicht weiter. Natürlich kann man auch den Blacklist-Ansatz wählen, aber das kommt dann einem Katz-und-Maus-Spiel gleich.

Der sicherste Schutz ist ein eigenes WLAN einzurichten, das über eine Whiteliste nur die Verbindungen zulässt, die gewünscht sind.

WLAN-Hotspot einrichten

Benötigt wird dafür nur ein Raspberry Pi 2 B und ein WLAN-Stick (z.B. Edimax EW-7612UAn). In dem Artikel „Den Raspberry Pi als WLAN-Hotspot einrichten“ wird beschrieben, wie man den Raspberry als Hotspot konfiguriert, was Voraussetzung für die folgenden Schritte ist.

Squid installieren und konfigurieren

Der Raspberry sollte nun ein eigenes WLAN aufspannen. Der Squid übernimmt nur die Filterung der ausgehenden Verbindungen. Als erste wird dieser installiert mittels

sudo apt-get install squid3

Nach der Installation kann die mitgelieferte squid.conf umbenannt und mit folgenden Inhalt neu angelegt werden:

mv /etc/squid3/squid.conf /etc/squid3/squid.conf.bak
vi /etc/squid3/squid.conf
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl blocknet src 192.168.66.0/24

acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 443 # https
#acl Safe_ports port 21 # ftp
#acl Safe_ports port 70 # gopher
#acl Safe_ports port 210 # wais
#acl Safe_ports port 1025-65535 # unregistered ports
#acl Safe_ports port 280 # http-mgmt
#acl Safe_ports port 488 # gss-http
#acl Safe_ports port 591 # filemaker
#acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

acl whitelist dstdomain "/etc/squid3/whitelist"

http_access allow manager localhost
http_access deny manager

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access deny to_localhost

http_access allow blocknet whitelist
http_access deny blocknet !whitelist

http_access allow localhost

http_access deny all
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?

cache_dir ufs /var/spool/squid3 256 16 256

coredump_dir /var/spool/squid3
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320

In der Config werden nur die Ports für http/s (80, 443) behandelt. Sollten auch andere Dienste (FTP) freigeschaltet werde, so müssen diese Zeilen einkommentiert oder hinzugefügt werden.

Aktuell arbeitet Squid mit einer Whitelist. Diese muss auch noch erstellt werden:

vi /etc/squid3/whitelist

Diese kann z.B. folgendermaßen aufgebaut sein:

.google.de
.google.com
.youtube.com
.wikipedia.de
.lego.de
.lego.com

# Windows intern (Update-Dienste)
.windowsupdate.com
.microsoft.com
.msftncsi.com
.geotrust.com
.bing.com
.mozilla.org
.mozilla.net
.digicert.com

Natürlich kann auch der Blacklist-Ansatz gewählt werden. Dafür muss die squid.conf entsprechend anders aufgebaut werden:

...

#acl whitelist dstdomain "/etc/squid3/whitelist"
acl ban dstdomain "/etc/squid3/blacklist"

...

#http_access allow blocknet whitelist
#http_access deny blocknet !whitelist

http_access deny ban 
http_access allow all

...

Entsprechend muss eine blacklist unter /etc/squid3/blacklist erstellt und gefüllt werden.

Im Anschluss den Squid neu starten, bzw. die Config einlesen lassen

sudo /etc/init.d/squid reload

iptables anpassen

Damit der Traffic über den Squid geleitet wird, müssen die iptables angepasst werden. Dazu die Datei, die in dem Artikel „Den Raspberry Pi als WLAN-Hotspot einrichten“ angelegt wurde, erneut öffnen

sudo vi /etc/network/if-up.d/accesspoint

und mit folgendem Inhalt überschreiben.

#!/bin/sh
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -i wlan0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.66.1:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

und den Raspberry neu starten.

Whitelist oder Blacklist aufbauen

Am Einfachsten lassen sich die Listen über das Squid-Logfile sinnvoll füllen. Dazu einfach mittels tail das Logfile ausgeben

tail -f /var/log/squid3/access.log

und eine Seite aufrufen. Ein Aufruf von „www.amazon.de“ listet nun alle aufgerufenen Elemente auf (kleiner Ausschnitt):

...
1428951891.297     65 192.168.66.152 TCP_MISS/200 40913 GET http://ecx.images-amazon.com/images/I/51nWEoCM%2BeL._SY450_.jpg - DIRECT/54.230.45.175 image/jpeg
1428951891.304     61 192.168.66.152 TCP_MISS/200 350 GET http://aax-eu.amazon-adsystem.com/s/iu3? - DIRECT/178.236.7.137 text/html
1428951891.332    114 192.168.66.152 TCP_MISS/200 9758 GET http://ecx.images-amazon.com/images/I/31pBRnZT5cL._SY450_.jpg - DIRECT/54.230.45.175 image/jpeg
1428951891.358    105 192.168.66.152 TCP_MISS/200 37627 GET http://g-ecx.images-amazon.com/images/G/03/gno/sprites/global-sprite-32-2x-v1._V333159664_.png - DIRECT/54.192.14.182 image/png
...

Nun kann gezielt eine Domain (hier z.B. .images-amazon.com) in die White- oder Blacklist aufgenommen werden. So kann auch Werbung gezielt geblockt werden.

Schreibe einen Kommentar

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

 
x