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 www.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. www.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.
|
|