AA_kein-durchgang_123rf-13956990_OleksandrPlakhotniuk.jpg

© Oleksandr Plakhotniuk, 123RF

Kein Durchgang

Squid als Spiel- und Social-Network-Bremse

09.01.2013
Mit Squid kontrollieren Sie den HTTP-Datenverkehr schnell und einfach, ohne die Nutzer allzusehr einzuschränken.

Der Sohn erledigt allnächtlich Monster in den virtuellen Welten diverser Online-Rollenspiele, die Tochter postet rund um die Uhr auf Facebook, die Mitarbeiter verschleudern Arbeitszeit auf Ebay, Amazon, Twitter oder noch viel schlimmeren Seiten – nimmt solch unerwünschtes Verhalten Überhand, ist guter Rat oft teuer. Pures Verbieten erzeugt Heimlichkeit und zieht möglicherweise unangenehmere Folgen nach sich, als ein kontrolliertes Erlauben. Da trifft es sich gut, dass sich mit dem freien Proxy Squid schnell und einfach Grenzen setzen lassen.

Bei Squid [1] handelt es sich um einen Fork des 1994 gegründeten Harvest-Projects (Harvest Cache Daemon), der 1996 von Duane Wessels ins Leben gerufen wurde. Die Version 1.0 erschien bereits im Juli 1996. Der Proxy-Server steht unter der GPLv2 und wird von den Entwicklern in erster Linie als Caching Proxy bezeichnet. Tatsächlich eignet sich Squid hervorragend, um Webseiten zwischenzuspeichern, den Verbrauch von Bandbreiten zu verringern, lahmen Webservern zu einem Performance-Schub zu verhelfen oder die Last zwischen mehreren Webservern zu verteilen. Doch neben diesen Haupteinsatzgebieten bietet Squid etliche andere interessante Funktionen, mit deren Hilfe sich elegant steuern lässt, wer wann welche Webseiten ansurfen darf.

Squid installieren

Squid findet sich in den Repositories aller gängigen Distributionen und lässt sich daher in der Regel mithilfe der distributionseigenen Paketwerkzeuge installieren.

Es gilt dabei zu beachten, dass einige Distributionen noch auf ältere Squid-Versionen vor 3.2 setzen, die HTTP 1.1 noch nicht unterstützen. Wer auf die aktuelle Version des HTTP-Protokolls angewiesen ist, muss in dem Fall ebenfalls manuell installieren oder prüfen, ob sich nicht ein anderer Web-Proxy (Privoxy, Tinyproxy) besser eignet.

Möchten Sie die aktuellste Version (zu Redaktionsschluss Squid 3.2.5 vom 10.12.2012) nutzen oder selbst bestimmen, wo der Proxy installiert wird und welche Features er beinhalten soll, dann greifen Sie zum Quellcode. Sie entpacken der Tarball in ein beliebiges Verzeichnis, wechseln dorthin und übersetzen Squid mit dem klassischen Dreischritt configure, make und (als root) make install.

Mit ./configure --help lässt sich eine Liste aller verfügbaren Features ausgeben. Interessante Kandidaten für selbst kompilierte Squid-Instanzen stellen beispielsweise --enable-linux-netfilter oder --with-openssl=/usr/bin/openssl dar. Es gibt zudem ein Languagepack [2], mit dem sich Squid in 44 Sprachen lokalisieren lässt.

Theorie …

Sie konfigurieren Squid über die Datei /etc/squid/squid.conf. Für gewöhnlich nimmt der Proxy seine Anfragen am Port 3128 entgegen, diesen Wert gilt es auch in den Proxy-Einstellungen des Webbrowsers anzugeben. Möchten Sie einen anderer Port verwenden, setzen Sie diesen in der Anweisung http_port Port in der squid.conf.

Für diesen Artikel betrachten wir nur die Access Control Lists (ACLs), lassen das Caching komplett außen vor und übernehmen hier die Einstellungen der Distribution beziehungsweise der Entwickler. Über die ACLs und die damit verknüpften _access-Direktiven steuern Sie, wer wann auf welche Webseiten zugreifen darf. Dazu bilden Sie ACLs nach dem Schema acl Name Typ Werte, wobei Sie die Werte direkt angegeben oder mittels einer Datei übergeben. Bei letzterer Variante geht Squid von einem Wert pro Zeile aus. Squid unterscheidet bei den ACL-Namen zwischen Groß- und Kleinschreibung. Geben Sie mehrere ACLs mit dem gleichen Namen und unterschiedlichen Werten an, behandelt Squid diese additiv, also wie eine einzige ACL mit mehreren Werten.

Bei den ACL-Typen sind verschiedene Möglichkeiten erlaubt. So lassen sich beispielsweise IP-Adressen und Domainnamen für Quell- und Zielrechner ebenso angeben wie MAC-Adressen, Zeiten, reguläre Ausdrücke [3] in Domainnamen, URLs oder Referers, Ports, Protokolle oder HTTP-Request-Methoden. Die Tabelle "ACL-Typen" gibt einen Überblick über die wichtigsten Typen, mit denen sich unser Vorhaben realisieren lässt. In der Tabelle finden sich zusätzlich Hinweise, ob es sich um einen "schnellen" oder "langsamen" ACL-Typ handelt. Schnelle Typen kann Squid sofort abarbeiten, während er bei langsamen noch zusätzliche Informationen einholen muss – etwa über eine DNS-Abfragen oder eine Nutzerauthentifizierung.

ACL-Typen

Typ Beschreibung fast/slow
arp MAC-Adressen fast
browser Regulärer Ausdruck, um anfragende Browser zu identifizieren fast
dst Server-IP-Adresse slow
dstdomain Domainname des Servers fast
dstdom_regex Regulärer Ausdruck in Server-Domainname fast
myip | localip IP-Adresse am Squid-Proxy, mit der sich ein Client verbunden hat, ab Squid 3.2 localip fast
myport | localport Port am Squid-Proxy, mit dem sich ein Client verbunden hat, ab Squid 3.2 localport fast
port Port-Nummer am Server fast
proto Übertragungsprotokoll (http, https, ftp, gopher) fast
random Pseudozufälliger Typ ab Squid 3.2, der auf einer angegebenen Wahrscheinlichkeit basiert fast
rep_header Regulärer Ausdruck für Regeln, die Response-Header auswerten fast
rep_mime_type Regulärer Ausdruck, um Content-Type in Antwort zu identifizieren fast
req_header Regulärer Ausdruck, um Regel auf Header in Anfrage anzuwenden fast
req_mime_type Regulärer Ausdruck, um Content-Type in Anfrage zu identifizieren fast
src Client-IP-Adresse fast
srcdomain Domainname des Clients slow
srcdom_regex Regulärer Ausdruck im Client-Domainname slow
time Zeitangabe, Tag und Stunde fast
url_regex Regulärer Ausdruck in URL fast
urlpath_regex Regulärer Ausdruck in URL-Pfad, berücksichtigt Protokoll und Hostname nicht fast

Die ACLs allein bringen jedoch noch nicht viel. Um ihr Potenzial zu entfalten, müssen Sie sie mit den Access-Control-Directives kombinieren, also den Angaben, was nun erlaubt ist und was nicht. Diese Direktiven haben die Form

Direktive allow|deny [!]ACL

Hier dürften http_access und http_reply_access die interessantesten Anweisungen sein, die Tabelle "Direktiven" nennt weitere. Die Access-Direktiven lassen sich mit mehreren ACLs verknüpfen, was recht komplexe Regeln ermöglicht. Die Direktiven arbeitet Squid von oben nach unten ab. Enthält eine Zugriffsregel mehr als eine ACL, so greift sie nur, falls alle ACLs zutreffen. Findet Squid eine nicht zutreffende ACL, verwirft er die komplette Anweisung.

Direktiven

Direktive Beschreibung
http_access Erlaubt oder verbietet HTTP-Requests auf Basis der angegebenen ACLs.
http_reply_access Erlaubt oder verbietet Antworten (Replies) eines Servers auf Client-Anfragen.
log_access Legt fest, welche Requests Squid protokolliert.
request_header_access Regeln für bestimmte Header, beispielsweise User-Agent, Link, Server, Referer oder From. Header, für die Sie ein Deny gesetzt haben, entfernt Squid.
reply_header_access Wie request_header_access, jedoch für Reply-Header.

Squid arbeitet die Direktiven solange ab, bis er eine findet, die er auf die aktuelle Anfrage anwenden kann. Erkennt er keine passende Regel, verhält sich Squid recht interessant: Er wendet dann das Gegenteil der letzten Anweisung in der Kette an. Um hier keine Überraschungen zu erleben und sicherzugehen, dass Squid wirklich nur das Erlaubte zulässt, ist es sinnvoll, http_access deny all als letzte Regel anzuwenden.

… und Praxis

Schreiten wir zur Tat. Wie bei allen Vorhaben hilft es auch bei der Squid-Konfiguration, die Probleme vorher einzukreisen und dann gezielt abzuarbeiten. In Listing 1 bis Listing 3 finden sie eine Beispielkonfiguration, die browserbasierte MMORPGs und Social Networks im heimischen Netz nur zu festen Zeiten zulässt. So kommen die Kurzen auf ihre Kosten, aber trotzdem rechtzeitig zum Essen und ins Bett.

Listing 1

# ---- /etc/squid/squid.conf
acl all src 0.0.0.0/0.0.0.0
#lokales Heimnetzwerk
acl localnet src 192.168.10.0/24
#Rechner der Eltern
acl eltern_rechner src 192.168.10.5/32 192.168.10.11
# Definition der zu ueberwachenden Spiele und Social
# Networks. Ausgelagert in leicht zu ergaenzende
# Extra-Dateien, da es hier haeufig Aenderungen gibt
#
# Browserbasierte MMORPGs
acl mmorpgs dstdomain "/etc/squid/mmorpgs.txt"
# Social Networks
acl social_networks dstdomain "/etc/squid/soc_nets.txt"
# Spiel- und Social-Network-freie Zeiten
# Mittagessen am Wochenende
acl spielfrei time AS 12:00-15:00
# Abendessen an allen Tagen
acl spielfrei time DAS  19:00-21:00
# Nachtruhe Sonntag bis Donnerstag
acl spielfrei time SMTWH        23:00-23:59 0:00-7:00
# FTP-Anfragen
acl ftp_reqs proto ftp
# HTTP-Anfragen an soziale Netze und Browser-MMORPGs
# zu bestimmten Zeiten verbieten
http_access deny localnet !eltern_rechner social_networks spielfrei
http_access deny localnet !eltern_rechner mmorpgs spielfrei
# alle FTP-Anfragen verbieten
http_access deny ftp_reqs
# für lokales Netz vieles erlauben
http_access allow localnet
# Deny-Direktive für alle sonstigen Fälle
http_access deny all
# Logging für Eltern ausschalten
log_access deny eltern_rechner

Listing 2

# ---- /etc/squid/mmorpgs.txt
.gilforstales.com
.juggergame.com
.gaiaonline.com
.playomg.com
.gunshine.net
.aq.com
.bigpoint.com
.kabam.com
.r2games.com
.callofgods.com
.drakensang.de
.wsgame.com

Listing 3

# ---- /etc/squid/soc_nets.txt
.facebook.com
.schuelervz.net
.jappy.de
.netlog.com
.tumblr.com
plus.google.com
.pferde.de
.youtube.com

Diese Konfiguration sollte ein komfortables Surfen erlauben, mit den von uns gewünschten Einschränkungen. Wir haben bewusst auf portbasierte Filterungen und Ähnliches verzichtet und gehen davon aus, dass im Netzwerk nur "gewöhnliche" Nutzer agieren, die meist mit dem Browser arbeiten und auf zusätzliche spezielle Anwendungen wie FTP-Clients verzichten. Für ausgebuffte Früchtchen müssen Sie sich neben der Squid-Filterung sicherlich auch noch mit wasserdichten Firewall-Regeln und zusätzliche Filterprogramme wie Dansguardian beschäftigen.

Beim Betrachten von Listing 2 und Listing 3 fällt auf, dass bei den dstdomain-ACLs viele Werte mit einem Punkt beginnen. Damit sorgen Sie dafür, dass auch alle Subdomains in der ACL berücksichtigt werden. Würden Sie auf den Punkt verzichten, müssten die Domains exakt den Anfragen entsprechen, um in der Access-Control-Direktive einen Treffer zu erzielen.

Bei den zeitbasierten ACLs dürfen Sie entweder Zeitspannen oder Tage angeben. Auch Kombinationen sind erlaubt, aber mindestens eine Angabe müssen Sie machen. Tage notieren Sie dabei in abgekürzter Form (siehe Tabelle "Tage"), bei den Zeiten sollte der erste Wert kleiner sein als der zweite.

Tage

Tag Abkürzung
Montag M
Dienstag T
Mittwoch W
Donnerstag H
Freitag F
Samstag A
Sonntag S
Alle Tage D

Mit squid -k parse testen Sie erst einmal, ob die Konfiguration formal stimmt: Bei Fehlern verweigert Squid sonst beim nächsten Start den Dienst. Wie bei so vielen Linux-Kommandos ist alles gut, wenn das Kommando durchläuft, ohne eine Meldung zu erzeugen. Erst jetzt lassen Sie Squid die neue Konfiguration mittels /etc/init.d/squid reload oder squid reconfigure neu einlesen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare

Infos zur Publikation

title_2014_10

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 4 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...
Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...
o2 surfstick software für ubuntu?
daniel soltek, 15.07.2014 18:27, 1 Antworten
hallo zusammen, habe mir einen o2 surfstick huawei bestellt und gerade festgestellt, das der nic...