Internetzugänge steuern und filtern mit Squid

Aus LinuxUser 10/2008

Internetzugänge steuern und filtern mit Squid

Zugangskontrolle

Das Internet gehört für Kinder inzwischen zum Alltag, bringt aber auch unerwünschte Inhalte ins Haus. Neben einem wachsamen Auge helfen die richtigen Tools, um ungeeigneten Content von Kindern fern zu halten.

Das Thema Netzwerke und Filtern fällt äußerst komplex aus. Ansätze gibt es fast so viele wie zu filternde Inhalte. Aus diesem Grund scheint die Materie speziell für Anfänger oft mit großen Einstiegshürden verbunden. Mit ein wenig Grundwissen über Iptables und Squid bauen Sie aber quasi mit Bordmitteln auf einem Linux-Rechner einen wirkungsvollen Filtermechanismus auf.

Systemvoraussetzungen

Im Beispiel steht ein Linux-Heimserver mit Firewall und Routing bereit. Er sollte als einziger PC am Internet hängen und allen anderen Clients den Zugang ermöglichen, damit niemand den Filter umgeht. Der Router selbst darf daher mindestens die TCP-Ports 21 und 80 nicht weiterleiten, damit die Clients bei den Protokollen FTP und HTTP auf den Proxy zugreifen. Als Proxy arbeitet Squid [1] – im Beispiel in Version 2.6.

Bei Debian 4.0 und Ubuntu 8.04 heben Sie die Software mit einem einfachen apt-get install squid auf die Platte. Für die Clients kommt jedes beliebige Betriebssystem in Frage, solange es auf TCP/IP als Netzwerkprotokoll setzt. Stellen auf den Clients den Router als Proxy-Host im Browser ein (Abbildung 1). Denjenigen, die mit möglichst wenig Aufwand einen eigenen Router installieren wollen, sei Fli4l [2] ans Herz gelegt, das Squid als Zusatzpaket anbietet.

Abbildung 1: Lediglich die Konfiguration des Browsers erfolgt auf jedem Client.

Abbildung 1: Lediglich die Konfiguration des Browsers erfolgt auf jedem Client.

Grundkonfiguration

Laufen das Basissystem und Squid, so geht es an die Konfiguration. Standardmäßig liegt in /etc/squid/squid.conf die Konfigurationsdatei des Proxys. Online [3] finden Sie eine gut kommentierte Version. Eine wichtige Maßnahme nehmen Sie jedoch direkt in der Firewall vor, damit diese eingehende Anfragen auf den Proxy von allen externen Netzen blockiert. So geht niemand unbefugt von außen über den Server online. Listing 1 liefert zwei Alternativen, die Sie jedoch unbedingt auf das eigene Setup anpassen müssen. Es empfiehlt sich, bei der Firewall alle Ports zu sperren und nur diejenigen explizit zu öffnen, die Sie unbedingt benötigen.

Listing 1
# Variante 1
# verwirft eingehende Anfragen auf den Squid-Port 3128,
# außer sie kommen aus dem Netz 192.168.1.*
iptables -I INPUT -p tcp --dport 3128 -s ! 192.168.1.0/24 -j DROP
# Variante 2
# verwirft eingehende Anfragen auf den Squid-Port 3128,
# außer sie kommen von der Netzkarte eth0 (lokales Netz)
iptables -I INPUT -p tcp --dport 3128 -i ! eth0 -j DROP

Zum besseren Verständnis stellen Sie über die Option error_directory /usr/share/squid/errors/German in der squid.conf die Sprache der Squid-Fehlerseiten auf Deutsch um. Alle weiteren Beispiele in diesem Artikel funktionieren so, dass Sie diese jeweils einzeln unterhalb der Zeile INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS eintragen können.

Wenden Sie mehrere Beispiele gleichzeitig an, so gilt es auf die Reihenfolge und richtige Kombination der Parameter zu achten. Nähere Informationen liefert die Hilfe von Squid. Damit das Programm die aktualisierte Konfiguration einliest, bedarf es jeweils eines einfachen /etc/init.d/squid reload auf der Kommandozeile. Es lohnt sich aber in jedem Fall, die Ratschläge aus dem Kasten “Wichtige Sicherheitshinweise” zu beachten.

Wichtige Sicherheitshinweise

Die Konfiguration eines Proxys hängt maßgeblich davon ab, wie die Netzwerkstruktur aussieht. Dieser Artikel dient daher nur als Anregung und basiert auf der Vorkonfiguration der Pakete von Ubuntu 8.04 mit Squid in der Version 2.6.STABLE18. Andere Distributionen oder Versionen erfordern unter Umständen andere Schritte.

Vor Inbetriebnahme lohnt es, einen Blick in das Squid-Handbuch zu werfen und die Sicherheit des Systems zu prüfen, denn ein offener und falsch konfigurierter Proxy ist so schlimm wie ein ungesichertes WLAN: Er ermöglicht es theoretisch jedem Internet-Nutzer mit der Identität des Proxy-Betreibers zu surfen. Der Betreiber eines Proxys haftet dann eventuell für das Verhalten unberechtigter Mitnutzer. Eine funktionierende Firewall, aktuelle Pakete und eine abgesicherte Squid-Konfiguration gehören daher zur Pflicht.

Einpflegen der Clients

Im nächsten Schritt passen Sie die so genannten ACLs, die Access Control Lists, an. Um für bestimmte Nutzer andere Filterregeln zu setzen, beispielsweise strengere Filter für die Kinder, teilen Sie Squid zunächst mit, anhand welcher Kriterien Sie eingehende Anfragen beurteilen möchten. Im Beispiel helfen Sie einer vierköpfigen Familie beim Einrichten des Netzfilters.

Zu den einfachsten Varianten gehört das Einpflegen der IP-Adressen der Clients, wie in Listing 2 gezeigt. Hier finden sich Einträge für den PC der Mutter Marion, des Vaters Volker, des Sohnes Simon und der Tochter Tanja. Gleichzeitig weisen Sie Squid an, Anfragen aus dem lokalen Netz anzunehmen. Eine genannte Netzmaske [4] kennzeichnet die Adressen.

Listing 2
# Definition der einzelnen Clients
acl marion src 192.168.1.1/32
acl volker src 192.168.1.2/32
acl simon src 192.168.1.3/32
acl tanja src 192.168.1.4/32
# Squid erlauben, Anfragen aus dem lokalen Netz anzunehmen
acl localhost src 192.168.1.0/24
acl to_localhost dst 192.168.1.0/24

Sperren nach Uhrzeit

Oft fällt es gar nicht so leicht, die Kinder vom PC wegzubekommen, wenn das Internet lockt. Dank Squid sperren Sie den Online-Zugang außerhalb bestimmter Uhrzeiten automatisch. Listing 3 liefert ein Beispiel, das für Montag bis Freitag ein Zeitfenster von 13 bis 21 Uhr für die großen Kinder definiert und von 13 bis 19 Uhr für die kleineren Kinder.

Listing 3
acl grosse_kinder time MTWHF 13:00-21:00
acl kleine_kinder time MTWHF 13:00-19:00
http_access deny simon ! grosse_kinder
http_access deny tanja ! kleine_kinder

Simon darf als großes Kind länger surfen als seine kleine Schwester Tanja, was Sie über die Zeilen http_access erreichen. Die Lesart lautet: “Der Client namens Simon darf nicht ins Internet, außer zu den Zeiten, die in der ACL grosse_kinder definiert sind.” Am Wochenende dürfen übrigens beide Kinder unbegrenzt lang surfen, und die Eltern sind generell nicht eingeschränkt.

Clients händisch sperren

Manchmal erscheint es sinnvoll, den Zugriff eines Clients auf das Internet vorübergehend komplett zu blockieren. Das geht dank Squid ganz einfach. In die Konfigurationsdatei fügen Sie den Inhalt von Listing 4 ein. Die Datei /usr/share/squid/gesperrte_clients selbst enthält nur die IP-Adressen der zu sperrenden Clients samt Netzmaske (Listing 5).

Listing 4
acl gesperrte_clients src "/usr/share/squid/gesperrte_clients"
http_access deny gesperrte_clients

Listing 5
192.168.1.3/32
192.168.1.4/32

Mit einem einfachen Shell-Kommando fügen Sie Clients zu der Liste hinzu. Der Befehl echo 192.168.1.3/32 >> /usr/share/squid/gesperrte_clients && /etc/init.d/squid reload setzt Simon auf die Sperrliste. Mit einem sed /^192.168.1.3\\/32$/d -i /usr/share/squid/gesperrte_clients && /etc/init.d/squid reload entfernen Sie den Eintrag wieder.

Werbung und Cookies

Neben dem reinen Sperren von Webseiten beherrscht Squid noch viel mehr: Zusammen mit dem ebenfalls freien Privoxy [5] filtert er direkt beim Surfen Banner oder ähnliche Inhalte heraus. Das Einbinden geschieht mit den Zeilen aus Listing 6.

Listing 6
# Privoxy als Filter zwischenschalten
cache_peer 127.0.0.1 parent 8118 7 no-query
never_direct allow all
# FTP-Anfragen nicht über Privoxy laufen lassen
acl ftp proto FTP
always_direct allow ftp

Blacklists

Selbst, wenn die Kinder innerhalb der erlaubten Zeit im Internet sind, sollen sie natürlich keine Seiten mit pornografischen oder gewaltverherrlichenden Inhalten aufrufen. Dazu ergänzen Sie die Squid-Konfiguration einfach um einige Zeilen (Listing 7). In die Datei /usr/share/squid/blacklist schreiben Sie alle Zeichenfolgen, die für ein Sperren der Seite sorgen (Listing 8), wobei auch reguläre Ausdrücke [6] erlaubt sind. Nach einem /etc/init.d/squid reload liest der Proxy die Sperrliste ein.

Natürlich erlaubt Squid es auch, verschiedene Blacklists für jeden Nutzer einzusetzen. Simon darf zum Beispiel online in Auktionshäusern stöbern, während Tanja das noch nicht darf. Dafür legen Sie lediglich die entsprechende Blacklist analog Listing 8 in /usr/share/squid/blacklist_tanja an.

Listing 7
# definiert eine Blacklist, die für alle Clients außer denen der Eltern gilt
acl blacklist url_regex -i "/usr/share/squid/blacklist"
http_access deny blacklist !marion !volker
# definiert eine Blacklist, die zusätzlich nur für Tanja gilt
acl blacklist_tanja url_regex -i "/usr/share/squid/blacklist_tanja"
http_access deny tanja blacklist_tanja

Listing 8
# sperrt alle Seiten/Domains, in denen folgende Zeichenfolgen vorkommen
gewalt.tld
actionfilme.domain
nackt.xyz
# die Adresse http://(www.)versand.haus/bestellung/ wird gesperrt,
# der Rest des Angebots ist zugänglich
versand.haus/bestellung/
# Dateien mit der Endung .mp3 oder .exe können nicht heruntergeladen werden
.mp3
.exe

Das Beispiel sperrt äußert großzügig auch Seiten, in denen der genannte Text im Inhalt vorkommt. Über die regulären Ausdrücke grenzen Sie den Filter bei Bedarf genauer ein. Verlassen Sie sich beim Sperren jedoch nicht blind auf die Liste, sondern testen Sie regelmäßig, ob sie noch den gewünschten Effekt hat. Manchmal ändert sich zum Beispiel ein Server- oder Dateiname.

Whitelists

Eine andere Möglichkeit liegt im viel strengeren Filtern anhand von Whitelists. Falls Sie Tanja ausschließlich Zugriff auf eine oder wenige Seiten gewähren wollen, bietet sich eine Whitelist an. Die Konfiguration von Squid ergänzen Sie entsprechend Listing 9 und erstellen eine passende Adressliste. Die Syntax gleicht der Blacklist. Allerdings bringt der Einsatz von Whitelists mitunter Probleme mit sich, da viele Seiten nicht nur von einer Adresse Inhalte beziehen, sondern von vielen, die alle explizit zu nennen wären. Ansonsten lädt die Seite unvollständig.

Listing 9
# Tanja darf nur auf diese Seiten zugreifen
acl whitelist url_regex -i "/usr/share/squid/whitelist"
http_access deny tanja ! whitelist

Fertige Filter

Es existieren einige kommerzielle Filterlösungen, die auf Squid aufsetzen. Zwar stehen diese nicht alle unter einer freien Lizenz und kosten teilweise sogar Lizenzgebühren, der Vorteil liegt jedoch darin, dass sie über täglich aktualisierte, fein abgestufte Filterlisten verfügen, die einen sehr guten Schutz vor einschlägigen deutschsprachigen Seiten bieten.

So arbeitet zum Beispiel der Filter von Time for Kids [7] relativ unkompliziert mit Squid zusammen. Es gibt aber zahlreiche weitere Lösungen, die sich ebenfalls für das Zusammenspiel mit dem Proxy eignen, so zum Beispiel die freien Listen von Squidguard [8].

Fazit

Mit Squid behalten Sie die Kontrolle im heimischen Netz. Dabei brauchen Sie nicht unbedingt auf die Lösungen von Drittanbietern zurückzugreifen. Squid bringt zudem noch mehr Funktionen mit, als hier gezeigt. Für größere Netze bietet er sich beispielsweise an, um Inhalte zwischenzuspeichern. Bei Bedarf arbeitet er auch als transparenter Proxy, den Sie im Browser nicht mehr explizit einzustellen brauchen. Darüber hinaus beherrscht er sogar bedingt Traffic Shaping, das heißt, das Aufteilen der Bandbreite auf die Clients anhand eines Regelwerks.

Infos

[1] Squid: http://www.squid-cache.org

[2] Fli4l: http://www.fli4l.de

[3] Squid Configuration Guide: http://www.squid-cache.org/Versions/v2/2.6/cfgman/

[4] Informationen zur Netzmaske: http://de.wikipedia.org/wiki/Netzmaske

[5] Privoxy: Thomas Leichtenstern, “Der unsichtbare Dritte”, LinuxUser 03/2006, S. 82, http://www.linux-user.de/ausgabe/2005/08/072-webcleaner/

[6] Reguläre Ausdrücke: http://de.wikipedia.org/wiki/Regular_Expression

[7] Time for Kids: http://www.time-for-kids.de

[8] Squidguard: http://www.squidguard.org/blacklists.html

LinuxUser 10/2008 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben