Squid
Squid (dt. "Kalmar") ist ein freier Proxy-Server, der unter der GNU General Public Licence steht. Er zeichnet sich vor allem durch seine gute Skalierbarkeit aus und unterstützt die Netzwerkprotokolle HTTP, HTTPS, FTP über HTTP und Gopher.
Konfiguration
Die Konfigurationsdaten liegen standardmässig unter "/etc/squid/squid.conf". Unter dem URL http://www.squid-cache.org/Versions/v2/2.6/cfgman/ findet sich eine gut dokumentierte Fassung der Datei.
Zum besseren Verständnis wird über die Option "error_directory /usr/share/squid/errors/German" die Sprache der Squid-Fehlerseiten auf Deutsch umgestellt.
Einlesen einer geänderten Konfiguration durch Squid.
$ /etc/init.d/squid reload
Beispielkonfiguration
Das folgende Beispiel basiert auf der Vorkonfiguration der Pakete von Ubuntu 8.04 mit Squid in der Version 2.6.STABLE18. Alle gezeigten Beispiele funktionieren so, dass sie jeweils einzeln unterhalb der Zeile "INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS" eingetragen werden können. Werden mehrere Beispiele gleichzeitig angewendet, so gilt es auf die richtige Reihenfolge und Kombination der Parameter zu achten.
Systemvoraussetzungen
Im Beispiel steht ein Linux-Heimserver mit Firewall und Routing bereit. Er sollte als einziger Rechner am Internet hängen und allen anderen Rechnern den Zugang ermöglichen, damit niemand den Filter umgeht. Der Router selbst darf daher zumindest die TCP-Ports 21 und 80 nicht weiterleiten, damit die Clients bei den Protokollen FTP und HTTP auf den Proxy zugreifen.
Als Proxy dient Squid 2.6, das unter Debian und Ubuntu über die Systemverwaltung installiert werden kann. Für die Clients kommt jedes Betriebssystem in Frage, das auf TCP/IP als Netzwerkprotokoll aufsetzt.
Auf den Clients wird der Router als Proxy-Host im Webbrowser eingestellt. Unter Firefox z. B. im Menü "Bearbeiten > Einstellungen > Erweitert > Netzwerk: Verbindungen > Einstellungen > Proxies für den Zugriff auf das Internet konfigurieren"
- [X] Manuelle Prox-Konfiguration
- HTTP-Proxy: "gateway.local"
- Port: "3128"
- [X] Für alle Protokolle diesen Proxy-Server verwenden
- Kein Proxy für: "localhost, 127.0.0.1"
Grundkonfiguration
Konfiguration der Datei "squid.conf".
Die Firewall wird so eingestellt, dass eingehende Anfragen auf den Proxy von allen externen Netzen blockiert werden. Auf der Firewall sollten alle Ports gesperrt werden und nur die ausdrücklich benötigten geöffnet werden. Dafür empfehlen sich die folgenden beiden Möglichkeiten.
Eingehende Anfragen auf den Squid-Port 3128 werden verworfen, ausser sie kommen aus dem Netz "192.168.1.*".
iptables -I INPUT -p tcp --dport 3128 -s ! 192.168.1.0/24 -j DROP
Eingehende Anfragen auf den Squid-Port 3128 werden verworfen, ausser sie kommen von der Netzwerkschnittstelle "eth0" (lokales Netz).
iptables -I INPUT -p tcp --dport 3128 -i ! eth0 -j DROP
Einpflegen der Clients
Nun werden die Zugriffskontrollisten (engl. Access Control List / ACL) angepasst. Um für bestimmte Benutzer andere Filterregeln zu setzen, wird Squid zuerst mitgeteilt, anhand welcher Kriterien eingehende Anfragen beurteilt werden sollen.
Einpflegen der IP-Adressen der Clients. Eine genannte Netzmaske kennzeichnet die entsprechenden Adressen.
acl nutzer1 src 192.168.1.1/32 acl nutzer2 src 192.168.1.2/32 acl nutzer3 src 192.168.1.3/32 acl nutzer4 src 192.168.1.4/32
Gleichzeitig wird Squid angewiesen, 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
Mit Squid kann der Online-Zugang ausserhalb bestimmter Uhrzeiten automatisch gesperrt werden.
Die folgende Regel bestimmt von Montag bis Freitag ein Zeitfenster von 13:00 bis 21:00 für privilegierte Benutzer und von 13:00 bis 18:00 für unprivilegierte. Benutzer "nutzer3" wird der ersten Gruppe zugeteilt, "nutzer4" der zweiten. Die Lesart lautet: "Der Client namens nutzer3 darf nicht ins Internet, ausser zu den Zeiten, die in der ACL privilegierte_nutzer bestimmt sind." Am Samstag und Sonntag gibt es demnach für alle Nutzer keinerlei Einschränkungen.
acl privilegierte_nutzer time MTWHF 13:00-21:00 acl uprivilegierte_nutzer time MTWHF 13:00-18:00 http_access deny nutzer3 ! privilegierte_nutzer http_access deny nutzer4 ! privilegierte_nutzer
Clients händisch sperren
Manchmal soll der Zugriff eines Clients auf das Internet vorübergehend vollständig blockiert werden. Dazu werden folgende Zeilen in die Konfigurationsdatei "squid.conf" eingefügt.
acl gesperrte_clients src "/usr/share/squid/gesperrte_clients" http_access deny gesperrte_clients
Die Kontrolldatei "/usr/share/squid/gesperrte_clients" enthält nur die IP-Adressen der zu sperrenden Clients samt Netzmaske.
192.168.1.3/32
Mit dem folgenden Shell-Befehl wird der Client "192.168.1.4" zur Sperrliste hinzugefügt.
$ echo 192.168.1.4/32 >> /usr/share/squid/gesperrte_clients && /etc/init.d/squid reload
Mit dem folgendem Shell-Befehl wird der Client "192.168.1.4" wieder von der Sperrliste entfernt.
$ sed /^192.168.1.4\\/32$/d -i /usr/share/squid/gesperrte_clients && /etc/init.d/squid reload
Werbung und Cookies
Zusammen mit Privoxy können direkt beim Surfen Banner oder ähnliche Inhalte ausgefiltert werden.
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
Um bestimmte Seiteninhalte zu sperren, könnten entsprechende Zeichenfolgen in die Datei "/user/share/squid/blacklist" geschrieben werden, die für die Sperrung einer Seite sorgen, wobei auch reguläre Ausdrücke erlaubt sind. Natürlich können auch verschiedene Blacklists für jeden Benutzer eingesetzt werden.
Definition einer Blacklist, die für alle Benutzer ausser Benutzer "nutzer1" und "nutzer2" gilt.
acl blacklist url_regex -i "/usr/share/squid/blacklist" http_access deny blacklist !nutzer1 !nutzer2
Definition einer Blacklist, die zusätzlich nur für Benutzer "nutzer4" gilt.
acl blacklist_nutzer4 url_regex -i "/usr/share/squid/blacklist_nutzer4" http_access deny nutzer4 blacklist_nutzer4
Sperrung aller Seiten bzw. Domains, in denen die genannten Zeichenfolgen vorkommen.
gewalt.tld boese.xx schlimm.xyz
Sperrung der Adresse "http://(www.)versand.haus/bestellung", der Rest des Angebots ist zugänglich.
versand.haus/bestellung/
Dateien mit den Endungen ".exe" oder ".pif" können nicht heruntergeladen werden.
.exe .pif
Whitelists
Um einem Benutzer nur Zugriff auf eine oder wenige Seiten zu gewähren, bietet sich eine Whitelist an. Der Einsatz einer Whitelist bringt oft Probleme mit sich, da viele Seiten ihre Inhalte nicht nur von einer Adresse beziehen, sondern auch von vielen anderen Domains, die alle ausdrücklich zu nennen wären, da die Seite ansonsten unvollständig lädt.
Benutzer "nutzer4" darf nur auf die in der Datei "/usr/share/squid/whitelist" genannten Seiten zugreifen.
acl whitelist url_regex -i "/usr/share/squid/whitelist" http_access deny nutzer4 ! whitelist
Fertige Filter
Es gibt einige kommerzielle Filterlösungen, die auf Squid aufsetzen. Zwar stehen diese nicht alle unter einer freien Lizenz und kosten teilweise Lizenzgebühren, dafür verfügen sie über täglich aktualisierte, fein abgestufte Filterlisten, die einen guten Schutz vor einschlägigen deutschsprachigen Seiten bieten. Was diese Lösungen tatsächlich ausfiltern ist allerdings nicht immer ganz durchsichtig.
Beispiele:
- Time for Kids
- Squidgard
Weblinks
Herausgeber | Sprache | Webseitentitel | Anmerkungen |
---|---|---|---|
Squid-Cache.org | eng | Squid (Optimising web-delivery)wbm | offizielle Homepage |
Wikipedia | ger | Squidwbm | Enzyklopädischer Artikel |