10 Der Proxy Squid Z

Transcrição

10 Der Proxy Squid Z
10
Der Proxy Squid
In diesem Kapitel lernen Sie:
• Den Web-Proxy-Server squid zu konfigurieren.
• Webseiten zu sperren, Zugriffsbeschränkungen einzurichten
• Hierarchische Proxy-Cluster zur Last- und Ressourcenverteilung zu konfigurieren.
• Einen transparenten Proxy einzurichten, der gegenüber dem Benutzer nicht in
Erscheinung tritt, und damit auf der Client-Seite konfigurationsfrei ist.
10.1 squid, ein Konfigurationsmonster?
Der squid ist zu Recht einer der beliebtesten Proxy-Server, wenn es darum geht,
HTTP-, HTTPS- oder FTP-Verbindungen zu vermitteln.
Der squid ist dabei nicht einfach nur ein Proxy, also Stellvertreter, sondern dient
außerdem als Cache , d.h. er speichert die von ihm im Userauftrag“ geholten Daten
”
auch, so daß eine weitere Anfrage für dieselbe Seite/Datei nicht mehr aus dem Internet geholt werden muß, sondern direkt innerhalb des LAN/aus der DMZ ausgeliefert
werden kann, was wohl in 99% aller Fälle schneller geht.
Er ist extrem flexibel, genießt daher allerdings auch den Ruf eines Konfigurations”
monsters“.
Sie werden den squid allerdings von seiner freundlichen Seite kennenlernen, denn
für einen produktiven Einsatz reichen schon wenige Direktiven in seiner Konfiguration
(ein echtes Einschalten — läuft“ gibt es allerdings nicht. . . )
”
Der Name squid bedeutet übersetzt übrigens Tintenfisch“, was seine Rolle recht gut
”
wiederspiegelt; die vielen Arme sind die dünnen“ Verbindungen in das Internet, der
”
dicke Kopf“ ist die Verbindung in das LAN.
”
Z
Hinweis: Der squid hat im Laufe seiner Entwicklung mehrmals sein Cache-Format
geändert. Bei einer Neuinstallation ist das egal, aber bei einem Update sollten die
Vorteile der neuen Version gegen den Verlust aller Cache-Daten aufgewogen werden.
Wir besprechen hier die aktuelle Version 2.4, wobei die Konfiguration sich kaum
geändert hat.
Die neueste Version gibt es auf der WWW-Seite http://www.squid-cache.org/.
Dort finden Sie auch eine ausführliche(re) Dokumentation.
135
Der Proxy Squid
10.2 Zugriffskonzept/ACLs
Der squid bietet sehr flexible Möglichkeiten, den Zugriff sowohl auf sich selbst als
auch auf Seiten im Internet zu regeln.
So können als Kriterien z.B. bestimmte Hosts im LAN, ganze Netzwerke, aber auch
bestimmte User (via ident-Lookups) freigegeben oder gesperrt werden. Es k önnen
Zeiten angegeben werden, in denen surfen“ erlaubt/nicht erlaubt ist (z.B. Pausenzei”
ten erlauben in einem Schulungszentrum), es ist bei der Auswahl der erlaubten bzw.
verbotenen Seiten ein Rückgriff auf reguläre Ausdrücke möglich, aber auch auf fertige
Listen, die im Internet von alten Hasen“ zur Verfügung gestellt werden, etc.
”
Diese fein gestaffelten Zugriffsrechte werden über sogenannte Access Control Lists
ACL s geregelt, die fast beliebig miteinander verknüpft werden können.
Eine solche ACL könnte beispielsweise die Rechner in Ihrem Schulungsraum definieren, eine weitere den Rechner Ihres Dozenten, und eine dritte die Zeiten, in denen Sie
Pause haben.
Durch geschicktes Kombinieren von diesen drei Listen kann der squid jetzt so konfiguriert werden, daß er Ihrem Dozenten rund um die Uhr den Zugriff auf das Internet
gewährt, den anderen Rechner im Raum aber nur während der Pausenzeiten...
Hinweis: Sämliche im Folgenden dargestellten Konfigurationen betreffen die recht
umfangreiche Datei /etc/[squid/]squid.conf.
Z
Lassen Sie sich von der schieren Größe dieser Datei nicht abschrecken! Es werden,
wie oben erwähnt, nur wenige Direktiven wirklich benötigt.
Wenn Sie im folgenden Direktiven kennenlernen, benutzen Sie die Suchfunktion Ihres
Editors, um vergleichbare Direktiven in der squid.conf zu finden!
Alternativ können Sie sich mit folgendem Befehl eine kommentarbereinigte Version
anzeigen lassen:
# egrep -v ’(ˆ#|ˆ$)’ /etc/squid/squid.conf
Eine Datei von über 2000 Zeilen gerät sonst sehr schnell in einen sehr unübersichtlichen Zustand. . .
10.2.1
ACLs
Die Syntax der ACL-Definitionen:
acl aclname acltype <string1 [string2] ... [stringN]> | <Datei>
136
10.2 Zugriffskonzept/ACLs
Erläuterung:
Nach dem Schlüsselwort acl folgt ein (fast) frei wählbarer Name, ein Typ und eine
Liste von Argumenten für diesen ACL-Typ, wobei ein Argument auch ein Dateiname
mit absoluter Pfadangabe sein kann. In einer solchen Datei sind dann die Argumente
eingetragen, die sonst in der squid.conf stehen würden.
Mögliche ACL-Typen sind (u.a.):
src Quelle (source) des Zugriffs auf den Proxy (als IP/Netzmaske)
dst Ziel (destination) des Zugriffs (als IP/Netzmaske)
srcdomain bzw. dstdomain wie oben, aber Angabe als Name ( .meine-domain.de“)
”
srcdom regex bzw. dstdom regex w.o., aber hier k önnen reguläre Ausdrücke
für die Domainnamen angegeben werden ( .*porn.*“)
”
time Angabe von Zeiten (s.u.)
url regex, urlpath regex sucht im URL bzw. im URL-Path (ohne Protokoll
& Host) nach Übereinstimmungen mit regulären Ausdrücken
port Angabe des Zielports
proto Angabe des Protokolls (Argumente: HTTP, FTP)
method die für CGI -Programme genutzte Übermittlungsmethode (Argumente: GET,
POST)
browser welcher Browser wird verwendet (regulärer Ausdruck )
proxy auth ermöglicht die Authentifizierung eines Users mittels eines externen
Programms
arp die Clients werden nicht anhand ihrer IP-Adresse identifiziert, sondern anhand
der MAC-Adresse
Z
Hinweis: Werden in einer ACL mehrere Argumente angegeben, so werden diese mit
einem logischen ODER verknüpft.
137
Der Proxy Squid
✎
Einige Beispiele für ACLs:
• acl intern src 192.168.0.0/24
definiert als Quelle für Anfragen das Klasse-C-Netz 192.168.0.x, und gibt ihm
den Namen intern
• acl schmuddel dstdomain "/etc/squid/schmuddeldomains.txt" .microsoft.com
definiert eine ACL namens schmuddel, die jene Domainnamen enthält, die in
der Datei /etc/squid/schmuddeldomains.txt aufgelistet sind, sowie eine
weitere ;-).
• acl
SSL\_ports port 443 563
listet die Ports auf, über die SSL-Verbindungen i.A. gefahren werden
Diese ACLs werden dann als Argumente an die http access-Direktive übergeben:
10.2.2
Die http access-Direktive
Über die http access-Direktive können die vorher definierten ACLs nun gezielt gesperrt oder freigegeben werden.
Die Syntax der http access-Direktive:
http access allow|deny [!]acl [[!]acl] ...
12
Hinweis: Werden hier mehrere ACLs angegeben, so werden diese mit einem logischen UND verknüpft.
Z
Beispiele für http access-Direktiven:
✎
• http access allow intern erlaubt den Zugriff auf den Proxy vom (oben deklarierten) Netz intern aus
• oder besser: http access allow intern !schmuddel gibt den Zugriff f ür
das Netz intern frei, aber nur auf jene Webseiten, die nicht (!) in der acl
schmuddel aufgelistet sind
12 Das
138
(optionale) Ausrufezeichen bewirkt eine Negierung.
10.3 Minimalkonfiguration
10.3 Minimalkonfiguration
Da squid in der Voreinstellung einen Zugriff nur vom eigenen Rechner erlaubt,
müssen wir zuerst unseren Clients den Zugriff erlauben.
Dieses erreichen wir in den zwei (immer benötigten) Schritten:
• Zuerst werden die berechtigten Clients unter einem frei wählbaren Namen (hier:
meine rechner) in einer ACL zusammengefasst:
acl meine_rechner src 192.168.0.0/255.255.255.0
• Danach wird der Zugriff auf beliebige Hosts im Internet f ür diese ACL freigegeben:
http_access allow
Z
meine_rechner
Hinweis: Diese Zeilen müssen unbedingt vor dem bereits vorhandenen Eintrag
http access deny all eingetragen werden!!! (s.a. Hinweis auf S. 136)
Jetzt können wir den Proxy über sein Startskript starten und bereits benutzen:
# /etc/init.d/squid start 13
10.4 Client-Konfiguration
Im Allgemeinen wird der Proxy nun noch auf Client-Seite eingetragen (wahrscheinlich
haben Sie diesen Schritt schon mehrmals vorgenommen):
Viele Browser lassen sich per Menü konfigurieren. Bei netscape findet sich der
entsprechende Eintrag in dem Untermenü
Edit→Preferences→Advanced→Proxy→Manual Proxy Configuration
oder auf deutsch in
Bearbeiten→Voreinstellungen→Erweitert→Proxy→Manuelle Proxy Konfiguration.
Die meisten anderen Browser (opera, konqueror, lynx, wget, w3m . . . )
können allesamt über die folgenden Umgebungsvariablen konfiguriert werden:
$ export http proxy=http://x.x.x.x:y/
$ export ftp proxy=http://x.x.x.x:y/
(x.x.x.x = IP-Adresse des Proxy-Hosts, y=Port, auf dem der squid lauscht)
Tip:
Diese Einträge kann der Administrator z.B. direkt in der /etc/profile vor-
13 im Weiteren sollte dieses Skript mit reload statt restart aufgerufen werden, da der squid sich
selber einen Zeitraum von i.A. 30 Sekunden zum Herunterfahren gönnt.
139
Der Proxy Squid
nehmen. Sie gelten dann für alle User.
10.5 Webseiten sperren
Es können über Filterregeln im Proxy gezielt manche Webseiten gesperrt werden, z.B.
um die private Nutzung des Internets (Consors et. al.) außerhalb der Mittagspause
einzuschränken.
Dazu wird eine Sperrliste definiert, die in diesem Fall auf eine Datei mit den unerwünschten URLs verweist.
Diese Liste wird danach mittels einer http access-Direktive verboten (hier noch ohne die Zeit-Komponente):
acl FORBID_DOMAIN dstdomain "/etc/squid/forbidden"
http_access deny FORBID_DOMAIN
10.6 Zugriffszeiten definieren
Der ACL-Typ time ermöglicht es uns, auf die Minute genau festzulegen, zu welchen
Uhrzeiten gesurft werden darf:
acl mittag time MTWH 12:00-13:00 definiert z.B. die Mittagsstunden von Montag (M) bis Donnerstag (H, T ist bereits für Tuesday vergeben) in der ACL mittag.
Mit einer solchen ACL könnten wir jetzt schon den Zugriff auf die privaten“ Internet”
domains etwas lockern, denn in der Mittagspause steigert sich evtl. sogar die Produktivität der Mitarbeiter...
Hinweis:
Denken Sie daran, daß http access-Direktiven
• mehrere ACLs enthalten können, die dann per logischem UND miteinander verknüpft werden
• nach der first match“-Methode gelesen werden; die erste Regel, die paßt, wird
”
genutzt
Eine Kombination der Form:
acl mittag time MTWH 12:00-13:00
acl FORBID_DOMAIN dstdomain "/usr/local/lib/forbidden"
http_access allow FORBID_DOMAIN mittag
http_access deny FORBID_DOMAIN
140
Z
10.7 Feintuning/Anpassung an die lokalen Gegebenheiten
erlaubt also den Zugriff auf unerwünschte“ Domains während der Mittagspausen (so”
wohl FORBID DOMAIN als auch mittag treffen zu), verbietet den Zugriff aber zu allen
anderen Zeiten (nur FORBID DOMAIN trifft zu).
10.7 Feintuning/Anpassung an die lokalen Gegebenheiten
Gerne wird statt der Portnummer 3128 die 8080 (in Anlehnung an den http -Port 80)
verwendet. Der Eintrag dafür in der squid.conf lautet 14 :
http_port 8080
Die voreingestellte Cachegröße von 100MB ist bei aktuellen Festplatten viel zu klein.
Ebenfalls recht knapp bemessen ist die maximale Dateigröße von 4MB.
Wir erhöhen diese Werte in unserem Beispiel auf 1000M bzw. 16MB.
Wenn häufiger mehrfach benötigte, große Dateien (z.B. Servicepacks oder — hoffentlich — Linux-Kernel) heruntergeladen werden, sind auch erheblich gr ößere Werte
sinnvoll:
cache_dir ufs /var/cache/squid 1000 16 256
maximum_object_size 16384
Dabei geben die Zahlen nach der Größe die Anzahl der Unterverzeichnisse an, in denen
squid die Daten zwischenspeichern soll.
Tip: Es lohnt sich übrigens, /var/cache/squid/ auf eine eigene Festplatte auszulagern (den DMA-Modus bei IDE-Platten nicht vergessen!)
Mit der Direktive cache mem kann man begrenzen, wieviel Speicher f ür das Zwischenspeichern von Objekten benutzen soll. Dabei empfiehlt es sich, den Speicherverbrauch
von SQUID im normalen Betrieb zu beobachten, und dann durch die genannte Direktive die Anzahl von MB angeben, die er maximal zusätzlich verbrauchen darf. Dieser
Parameter bezieht sich nur auf die Größe des Zwischenspeichers im RAM, nicht auf
die Gesamtgröße des SQUID-Prozesses im Speicher.
Die Uhrzeit gibt der squid in den Log-Dateien als Unix-Systemzeit (vergangene Sekunden seit dem 1.1.197015 ) an.
Dieses Format ist für Menschen etwas schwer zu lesen, kann aber mit folgender Option
auf eine normale Zeitangabe umgestellt werden:
emulate_httpd_log on
14 Denken
15 der
Sie daran: Im Zweifelsfall ist jede Direktive bereits vorhanden!
sog. epoch“
”
141
Der Proxy Squid
Als weiteren Vorteil kann man jetzt die diversen Logfile-Analyzer (z.B. webalizer)
des Webservers Apache auch für den Squid verwenden.
10.8 Familienbande: squid mit Parents und Siblings
Die meisten Internet-Provider betreiben eigene Proxys, um den Datenverkehr ins Internet zu reduzieren.
In so einem Fall sollte unser squid alle Anfragen an den Proxy des Providers
schicken.
Man spricht dann von einem cache parent oder parent cache ( Elternteil“).
”
Aber auch in einem lokalen Netz kann die Verknüpfung mehrerer Proxys sinnvoll sein:
Wenn zwei Abteilungen jeweils einen squid betreiben, k önnen diese sich miteinander absprechen und so ihre Cache-Daten gemeinsam nutzen.
Zwei gleichberechtigte squids nennt man cache siblings (Geschwister).
Ein Squid, der sowohl parents als auch siblings kennt, wird seine Geschwister bevorzugen und den parent als letztes befragen.
Dieses Zusammenspiel innerhalb der Familie“ wird als Cache-Hierarchie bezeichnet.
”
Die Kommunikation zwischen den Proxies läuft dabei über ein sehr schlankes UDP Protokoll (ICP , Inter Cache Protocol ).
Zur Konfiguration dieser Hierarchie dient die cache peer-Direktive.
Syntax:
cache peer host parent|sibling TCP-Port ICP-Port
[weitere Optionen (default, no-query, ...)]
Beispiel für eine Cache-Hierarchie: Unser squid soll den Proxy des Providers (IP:
62.1.2.3) als parent verwenden. Er verwendet die Standard-Ports 3128 f ür normale
Anfragen und 3130 für ICP -Anfragen seiner Verwandten“:
”
cache_peer 62.1.2.3 parent 3128 3130
Tip: Natürlich kann statt der IP auch der Rechnername verwendet werden. Dieser
muß allerdings ausgeschrieben werden, die Suchliste aus der Datei /etc/resolv.conf
wird nicht verwendet (beliebter Fehler!).
142
✎
10.9 Transparent Proxy
Soll ein zweiter squid als sibling angesprochen werden, erfolgt ein Eintrag in dieser
Form:
cache_peer squid2.meine_domain.de sibling 3128 3130
Z
Hinweis:
Z
Hinweis: Wollen Sie einen MS-Proxy als parent oder sibling ansprechen, tragen Sie
als ICP -Port 0 und als weitere Option dahinter no-query ein. Dieses Produkt setzt ein
eigenes Protokoll zur Kommunikation zwischen den Hosts ein. 16
Hostnamen müssen hier immer inkl. Domain angegeben werden!!!
Tip: Sind Sie über einen Zwangs-Proxy mit dem Internet verbunden, so aktivieren
Sie zusätzlich zum parent -Eintrag mit Option default“ folgenden Eintrag:
”
always direct deny all
oder alternativ:
never direct allow all
Desweiteren sollte man an den Timeout-Werten drehen, denn der squid versieht andere Proxies, die zu langsam antworten, mit dem Status dead peer, so daß diese dann
nicht mehr angesprochen werden.
Wenn das mit dem einzigen parent passiert, hat man ein Problem...
10.9 Transparent Proxy
Eleganter als die Konfiguration jedes einzelnen Clients ist die Einrichtung eines Transparent Proxy . Dieser fängt alle WWW-Anfragen ab und leitet sie — für den Client
unmerklich, also transparent — auf den Proxy um.
Vorteil: Die Konfiguration des Client entfällt.
Nachteil: Da der Client den Proxy nicht kennt, kümmert er sich selbst um die Namensauflösung und benutzt, statt des Proxy-Ports, die Ports der Protokolle
HTTP, HTTPS und FTP. Ein Paketfilter zwischen den Clients und dem Proxy
muß also entsprechend großzügiger und damit unsicherer eingestellt werden.
Die Umleitung ist ein Teil der Linux-Firewall und wird f ür den Kernel 2.2 mit folgendem ipchains-Befehl aktiviert:
16 (Womit
wir einmal mehr beim Thema offene Standards“ wären)
”
143
Der Proxy Squid
ipchains -A input -i eth0 -p tcp --dport 80 -j REDIRECT 3128
Der Kernel arbeitet ab Version 2.4 stattdessen mit iptables:
modprobe ipt_REDIRECT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Auch die squid-Konfiguration ändert sich etwas, weil dieser jetzt nicht als Proxy
auftritt, sondern einen WWW-Server simuliert:
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
144
10.10 Querverweise
10.10 Querverweise
1. www.squid-cache.org Die squid-Homepage
2. http://squid.visolve.com/squid24s1/contents.htm Ein ausführliches Handbuch zur Konfiguration
145
Der Proxy Squid
146
10.11 Übungen
10.11
Übungen
1. Installieren und konfigurieren Sie den squid, so daß er den Clients im folgenden Netz zur Verfügung steht: 192.168.0.0/255.255.255.0
2. Konfigurieren Sie Browser und rufen Sie eine WWW-Seite zweimal auf.
3. Verbinden Sie Ihren Proxy gleichberechtigt mit dem Ihres Nachbarn (sibling ).
Rufen Sie eine Seite auf, die vorher nur Ihr Nachbar kannte“.
”
4. Tragen Sie den squid Ihres Dozenten als parent cache ein. Er soll Ihre einzige Verbindung ins Internet darstellen. Rufen Sie jetzt gemeinsam mit Ihrem
Nachbarn die gleiche WWW-Seite auf.
5. Beobachten Sie mit tcpdump die Kontrollnachrichten des squid auf dessen
ICP-Port (3130).
6. Blockieren Sie über eine ACL die WWW-Seiten von microsoft.de :)
7. Was passiert dabei mit benachbarten Proxys, die den Ihren als sibling eingetragen haben?
Wie lösen Sie das Problem?
Z
Hinweis: Sollte in Ihrem Schulungsraum kein direkter Zugriff auf das Internet
möglich sein, ziehen Sie bitte Schritt 4 vor!!!
147
Der Proxy Squid
10.12 Lösungen
1. Dazu ist die Definition einer ACL notwendig:
acl mein netz src 192.168.0.0/255.255.255.0
Dann diese ACL für den Zugriff freigeben:
http access allow mein netz
2. Der zweite Zugriff sollte dabei deutlich schneller erfolgen.
3. Eintrag in der /etc/squid.conf:
cache peer sibling x.x.x.x 3128 3130
Dabei sollte der Aufruf einer WWW-Seite auch dann schneller sein, wenn nur
der fremde squid sie bereits kannte.
4. Eintrag:
cache peer parent x.x.x.x 3128 3130 default
....
never direct allow all
always direct deny all
5. # tcpdump -i eth0 port 3130
6. acl Unerwuenscht dst domain .microsoft.de
..
http access deny Unerwuenscht
(vor http access allow mein netz)
7. Für die siblings bietet die Option login=user:password für die cache peerDirektive eine Lösung.
Alternativ könnte man auch für die siblings eine eigene ACL definieren.
148

Documentos relacionados