Squid

Aus Mikiwiki
Version vom 10. Februar 2010, 21:08 Uhr von Michi (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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:

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
country US.gif Squid-Cache.org eng Squid (Optimising web-delivery)wbm offizielle Homepage
country DE.gif Wikipedia ger Squidwbm Enzyklopädischer Artikel