Das Setzen der Rechte unter Squid ist sehr flexibel, aber leider nicht selbsterklärend.
Mit einer ACL wird zunächst festlegt, auf was (Ziel) oder von was (Quelle) zugegriffen wird. Über http_access wird dieser ACL anschließend ein Verbot oder eine Erlaubnis zugewiesen.
Die Syntax einer ACL sieht folgendermaßen aus:
acl <frei_definierbarer_acl_Name> <acl-Typ> <Wert ...>
|
Über den frei definierten ACL-Namen kann mit Hilfe des unten erläuterten http_access das gewünschte Recht vergeben werden. Diese ACL-Namen dürfen natürlich nicht doppelt vergeben werden.
Es können verschiedene Arten von Quellen und Zielen zur ACL-Definition verwendet werden. Hier die für die Zugriffsverwaltung genutzten ACL-Typen:
- src: Absender-IP-Adressen der Client-PCs, die über Squid auf Web-Inhalte zugreifen wollen.
- dst: Ziel-IP-Adressen, auf die zugegriffen werden soll.
- dstdomain: Name der Ziel-Domain, auf deren Server im Internet zugegriffen werden soll. Hier kann auch direkt ein Server angegeben werden!
- dstdom_regex: Wie dstdomain, zusätzlich können
Reguläre Ausdrücke verwendet werden, um die Liste der Server zu erweitern.
- time: Zur Festlegung bestimmter Zeitbereiche, in denen gesurft werden darf.
- url_regex: URLs können über Reguläre Ausdrücke definiert werden.
- urlpath_regex: Der Pfad, also alles, außer dem Protokoll (wie http://) und dem Rechnernamen (wie selflinux.org), wird mit dem angegebenen Regulären Ausdruck verglichen.
- ident: Vergleich der Namen, die von den Unix-Clients mit dem identd übertragen werden, mit denen in der Liste. So kann eine einfache Benutzerverwaltung genutzt werden. Den identd gibt es auch für Windows als Programm oder als Dienst.
- external: Einbinden eines externen Hilfsprogramms, das z. B. ermöglicht, zur Benutzerverwaltung einen NT-Domänen-Kontroller zu nutzen.
Weitere ACL-Typen stehen für spezielle Anwendungen des Squid zur Verfügung, die nicht für die Benutzerverwaltung wichtig sind.
Werden mehrere Werte hinter dem ACL-Typ aufgelistet, braucht nur einer der Werte zu passen, um das zugehörige http_access zu aktivieren (OR-Logik, siehe Logik der Rechtevergabe).
Zur besseren Übersicht können die aufzulistenden Werte auch in eine eigene Datei ausgelagert werden. Dort wird für jeden Eintrag eine eigene Zeile angelegt. Die Datei muss Squid wie folgt bekanntgegeben werden:
acl <frei_definierbarer_Name> <acl-Typ> "<Pfad_zur_Datei>"
|
|
Mit http_access wird in Kombination mit allow bzw. deny ein Recht für die definierten ACL-Elemente festgelegt.
Die Syntax:
http_access allow|deny <acl-Name ...>
|
Das sieht zunächst sehr simpel aus. Einer definierten ACL wird über deny oder allow" ein gewünschtes Recht zugewiesen, so wie im Beispiel des Abschnittes Squid-Konfiguration auf die Schnelle gezeigt:
acl allowed_hosts src 192.168.10.0/255.255.255.0
http_access allow allowed_hosts
|
Komplexer wird es, wenn mehrere ACL-Namen in einer Zeile aufgelistet sind. Dies bewirkt, dass alle aufgelisteten ACLs zutreffen müssen, damit das allow oder deny" in Kraft treten kann.
Beispiel:
acl all src 0/0
acl selflin dstdom .selflinux.org
acl pcRestr src 192.168.20.0/255.255.255.0
acl allowed_hosts src 192.168.10.0/255.255.255.0
http_access allow selflin pcRestr
http_access allow allowed_hosts
http_access deny all
|
Die Angabe der zwei ACL-Namen selflin und pcRestr nach dem ersten http_access bewirkt, dass Rechner mit der IP 192.168.20.* nur auf SelfLinux-Seiten surfen dürfen. Die allowed_hosts dürfen alles sehen, da diese nicht mit einer zusätzlichen ACL in der http_access-Zeile eingeschränkt werden.
Hier ist gleich eine wichtige Eigenart des ACL-Typs dstdom zu erkennen: Der '.' vor dem Domainnamen sagt Squid, dass auch Subdomains in diese ACL fallen, wie z. B. selflinux.org oder srv.sub.selflinux.org.
|
Es ist sehr wichtig für das Berechtigungsmodell von Squid, die OR/AND-Logik zu verstehen:
- Alle Elemente eines ACL-Eintrags werden mit OR verknüpft.
- Alle Elemente eines Access-Eintrags dagegen werden mit einem AND verknüpft.
Noch ein Beispiel, das fatalerweise überhaupt keinen Zugriff ermöglicht:
acl wir src 192.168.10.0
acl ihr src 192.168.20.0
http_access allow wir ihr
|
Hier würden Zugriffe dann erlaubt werden, wenn sich der Surfende zugleich mit den beiden Quell-IPs an den Proxy wendet, was nicht möglich ist. Somit werden keine Zugriffe mehr erlaubt.
Sollen dagegen beide IP-Adressen Zugriff erhalten, muss folgendes eingetragen werden:
acl wir src 192.168.10.0 192.168.20.0
http_access allow wir
|
Ein weiterer wichtiger Punkt ist die Reihenfolge der access-Listen.
Ist erst einmal ein Zugriff erlaubt worden, kann er durch darunter liegende Zeilen nicht wieder zurückgenommen werden.
Beispiel:
acl selflin dstdom .selflinux.org
acl verboten src 10.0.0.23
http_access allow selflin
http_access deny verboten
|
Obwohl 10.0.0.23 in der letzen Zeile alles verboten wird, kann dieser PC die Seiten von SelfLinux sehen, da die Erlaubnis über dem kompletten Verbot vergeben wurde.
|
|