| |
| Der Tintenfisch speichert
zwischen
Installation und Konfiguration des Squid-Caches
|
|
(Mai 2005)
|
| Inhalt dieses Artikels:
Betriebssystem
und Installation vorbereiten | Installation
| Konfiguration | Test
| Autostart | Browserkonfiguration
| Logdateien | Ausblick
|
|
| |
| Die Installation eines Webcaches und Proxyservers
kann sich schnell bezahlt machen. Der Open-Source-Web-Proxy-Cache
Squid speichert besuchte Seiten auf der Festplatte und lädt
beim nächsten Aufruf nur den geänderten Inhalt vom Webserver.
Zudem ist eine ausgefeilte Zugriffskontrolle Bestandteil des Programms.
Der IT-Administrator, das professionelle Fachmagazin für System-
und Netzwerkadministration, hat GULP einen Workshop zur Verfügung
gestellt, der die Installation und Konfiguration vom Squid-Quellcode
aus unter Suse Linux 9.1. zeigt:
Squid läuft auf jedem Posix-kompatiblen Betriebssystem, unter
anderem also unter Solaris, AIX, Linux und Windows.
Bevor Sie mit der Softwareinstallation loslegen, sollten Sie sich
über die Funktionsweise eines Cachesystems bewusst sein und
eine Hardwareplattform wählen, die am besten dessen Anforderungen
gerecht wird. Denn nichts ist schlimmer als ein Webcache, der zu
langsam für seine Benutzer ist. Da einzelne Webseiten aus vielen
kleineren Text-HTML-Dateien und Grafiken bestehen, sollte der zu
Grunde liegende Rechner mit Festplatten bestückt sein, die
sich durch eine sehr schnelle Zugriffszeit auszeichnen. Das ist
sogar wichtiger als eine hohe Datentransferrate. Ein RAID-System
macht nach Angaben der Squid-Entwickler sogar weniger Sinn als viele
einzelne Festplatten.
Als weiteren wichtigen Punkt sollten Sie sich überlegen, wie
viel RAM Sie dem System spendieren. Squid behält eine Tabelle
aller Dateien, die sich im Festplattencache aufhalten, im Arbeitsspeicher.
Aus diesem Grund trifft hier die Faustregel “viel hilft viel”
zu, denn falls unser System Teile dieser Tabelle auf die Festplatte
auslagert, verwandelt sich Ihr Squid zu einer langsamen Schnecke.
Als Letztes sollten Sie die Prozessorgeschwindigkeit des Systems
prüfen. Squid liest nach seinem Start die Cachetabelle von
der Festplatte aus und behält diese danach im Arbeitsspeicher.
Deswegen sollten Sie nur Geld für einen modernen Prozessor
ausgeben, falls ein schneller Programmstart für Sie wichtig
ist. Ansonsten ist auch ein paar Jahre altes Pentium-2-Modell mit
300 MHz vollkommen ausreichend. |
| Betriebssystem
und Installation vorbereiten |
|
| |
|
|
Nachdem Sie nun einen Rechner mit vernünftiger Hardware vor
sich haben, können Sie mit der Installation des Betriebssystems
beginnen. Hier sollten Sie sich überlegen, ob Sie den Rechner
ausschließlich als Cachemaschine verwenden wollen, oder ob
er noch andere Serverfunktionen in Ihrem Netzwerk übernehmen
soll. Für den ersten Fall reicht es aus, ein nur minimales
Suse-System zu installieren. Vermeiden
Sie unnötigen Ballast wie zum Beispiel die X-Windows- und
KDE-Installation.
Um Squid vom Quellcode zu kompilieren und installieren, benötigen
Sie lediglich einen ANSI-C-Compiler wie gcc, das “binutils”-RPM-Paket
und Perl. Zum einfacheren Download des Quellcodes aus dem Internet
werden wir das “wget”-Programm verwenden. Wir setzen voraus,
dass Sie sich mit einem Texteditor unter Linux (vi, emacs) auskennen.
Nachdem Sie das Betriebssystem installiert haben, sollten Sie sicherstellen,
dass das System Zugang zum Internet und zu Ihrem Firmennetzwerk hat.
Danach melden Sie sich am Rechner als Benutzer “root”
an und erstellen die Squid-Verzeichnisstruktur: |
|
| |
mkdir -p /usr/local/squid |
|
| Dies ist das Hauptverzeichnis für
Squid, alle weiteren Verzeichnisse legen Sie unter diesem Ordner an: |
|
| |
cd /usr/local/squid mkdir
src (für den Quellcode) mkdir
bin (für das Programm und seine Utilities) mkdir
etc (für die Konfigurationsdatei) mkdir
var (Für variable Daten wie Cache- und Logdateien)
cd var mkdir
cache (für die Cache-Dateien) mkdir
logs (für die Logdateien) |
|
| Das Cacheverzeichnis kann auch auf einer
anderen Festplatte liegen, die Sie nur für die Speicherung der
Cachedateien eingeplant haben. In diesem Fall können Sie diese
Festplatte direkt auf das Verzeichnis mounten, zum Beispiel: |
|
| |
mount /dev/hdb1 /usr/local/
squid/cache |
|
Nachdem Sie die Verzeichnisstruktur für
das Programm angelegt haben, laden Sie den Quellcode aus dem Internet.
Dazu sollten Sie einen der Mirrorserver besuchen, der in Ihrer geographischen
Nähe liegt. Wir haben uns für diesen Workshop den Server
der Uni Wien ausgesucht und werden uns die neueste STABLE-Version
herunterladen. Die DEVEL-Versionen sind nur zum Testen empfohlen,
ein Live-Server sollte immer nur STABLE-Code installiert haben. Den
Quellcode von Squid laden Sie mit dem Befehl
|
|
| |
cd /usr/local/squid/src
wget ftp://gd.tuwien.ac.at/infosys/
servers/squid/squid2/STABLE/
squid-2.5.STABLE6.tar.gz |
|
| Installation |
|
| |
|
| Nun müssen Sie den Quellcode in zwei
Schritten auspacken: |
|
| |
gunzip squid-2.5.STABLE6.tar.gz
tar -xvf squid-2.5.STABLE6.tar |
|
Das letzte Kommando legt ein Unterverzeichnis
squid-2.5.STABLE6 an, in dem sich alle weiteren Dateien des Pakets
befinden. Wechseln Sie in diesen Ordner mit:
|
|
| |
cd squid-2.5.STABLE6 |
|
| Im nächsten Schritt bestimmen Sie,
mit welchen Optionen Sie das Programm kompilieren wollen. Sie können
dabei bestimmte Funktionen des Programms aktivieren oder deaktivieren.
Im Kasten 1 finden Sie eine Erklärung der gängigsten Optionen,
und mit |
|
| |
./configure --help |
|
sehen Sie eine komplette Liste. Viele
dieser Parameter sind nur für sehr erfahrene Benutzer vorgesehen
und werden in diesem Workshop nicht benötigt.
Die gewünschten Optionen aktivieren Sie mit dem “configure”-Programm,
wobei Sie diese einfach mit einem Leerzeichen (“Space”)
aneinanderreihen. Für unseren Squid rufen Sie also die folgende
Kommandozeile auf:
|
|
| |
./configure --prefix=/usr/local/squid
(wichtig: kein “/” am Ende hier!) |
|
Configure schreibt die so genannten Makefiles,
die Anweisungen für den Compiler enthalten. Die Quelldateien
kompilieren Sie nun mit
|
|
| |
make |
|
Nach ein paar Minuten und einer Tasse Kaffee
sind die Programmdateien fertig kompiliert, liegen aber immer noch
in den Verzeichnissen des Quellcodes. Der Befehl
|
|
| |
make install |
|
kopiert sie in die richtigen Verzeichnisse.
Falls Sie die Quelldateien erneut übersetzen, überschreibt
das “make install”-Kommando zum Glück keine Konfigurationsdateien,
sondern nur die Programmdateien. Es legt außerdem eine Kopie
der originalen Konfigurationsdatei an, um es Ihnen später leichter
zu machen, eventuelle Fehler in Ihrer eigenen Konfigurationsdatei
aufzuspüren. Ihr Squid ist nun fertig installiert, und Sie
können mit der Anpassung an Ihr System fortfahren.
|
|
| Konfiguration |
|
| |
|
Zunächst müssen Sie sich überlegen,
welche Mitarbeiter Zugriff auf die Squid-Konfiguration erhalten sollen.
Für alle diese Benutzer legen Sie am besten eine neue Benutzergruppe
an, wir nennen sie “squiadm”:
|
| |
groupadd squidadm |
Um einzelne Benutzer in diese Gruppe aufzunehmen,
benutzen Sie das Kommando:
|
| |
usermod -G squidadm
BENUTZERACCOUNT |
Mitglieder der Squidadm-Gruppe sollten
erfahrene Benutzer sein, die bereits Root-Zugriff auf Ihr System
haben. Die Mitgliedschaft in der Squidadm-Gruppe vereinfacht die
Administration, da Sie nicht in den Root-Kontext wechseln müssen,
um die Konfigurationsdateien zu verändern.
Der Squid-Prozess selbst erhält auch einen neuen Benutzeraccount
mit “/usr/local/squid” als Home-Verzeichnis und seine
eigene Benutzergruppe, beides mit dem Namen “squid”.
Außerdem wird er Mitglied der Gruppe squid:
|
| |
groupadd squid
useradd -d /usr/local/squid/ -s /bin/false -g squid -G squidadm squid |
Im Augenblick ist der Benutzer “root”
der Eigentümer aller Dateien und Verzeichnisse des Squid-Programms.
Um sicherzustellen, dass kein normaler Benutzer beispielsweise die
Squid-Binaries auswechselt, löscht oder die Konfigurationsdateien
verändert, passen Sie die Berechtigungen folgendermaßen
an:
|
| |
chown root:root /usr/local/squid/
chmod 755 /usr/local/squid/ |
Das Squid Hauptverzeichnis sollte nur vom
Benutzer root bearbeitet werden können, ebenso der Bin-Ordner:
|
| |
cd /usr/local/squid/bin
chown root:root .
chown root:root *
chmod 755 . * |
Im “etc”-Verzeichnis speichert
das Programm seine Konfigurationsdateien, auf die die Squidadm-Gruppe
Zugriff haben soll. Außerdem setzen Sie auf diesen Ordner das
Sticky-Bit um sicherzustellen, dass alle neu angelegten Dateien auch
der Squidadm-Gruppe gehören:
|
| |
cd /usr/local/squid/etc
chmod 2775 .
chown root:squidadm . * |
Die Logdateien des Caches sollten nur von
den Squid-Administratoren gelesen und vom Benutzer squid geschrieben
werden:
|
| |
chown squid:squidadm /usr/local/squid/var/logs
chmod 770 /usr/local/squid/var/logs |
Dasselbe trifft für die Cache-Dateien
zu:
|
| |
chown squid:squidadm /usr/local/squid/var/cache/
chmod 770 /usr/local/squid/
var/cache/ |
Nun fehlt uns nur noch ein letzter großer
Schritt, um den Squid starten zu können: das Anpassen der Konfigurationsdatei
/usr/local/etc/squid.conf. Wenn Sie das erste Mal diese Datei mit
einem Texteditor öffnen, werden Sie wahrscheinlich von den
vielen Optionen erschlagen sein. Zum Glück ist sie allerdings
sehr gut dokumentiert, und jede Option hat einen Kommentar über
ihre Funktionsweise. Zum anderen müssen Sie nur ein paar Optionen
anpassen, um den Cache in einer Grundkonfiguration zum Laufen zu
bringen.
Bitte beachten Sie, dass alle Standardwerte in dieser Datei mit
dem “#”-Zeichen auskommentiert sind. Wenn Sie also diese
Werte verändern, ist es notwendig, das Kommentarzeichen zu
entfernen.
Die erste Option “http_port” bestimmt den Port, auf
dem Squid auf eingehende Verbindungen wartet. Der Standardwert 3128
ist nicht so leicht zu merken wie 8080. Squid erlaubt es Ihnen jedoch,
mehrerer Ports zu definieren, deswegen ändern wir den Eintrag
auf:
|
| |
http_port 3128 8080 |
| Die “cache_dir”-Option legt
das oder die eigentlichen Cacheverzeichnisse fest. In unserem Fall
haben wir nur einen Cacheordner unter /usr/local/squid/var/cache.
Sie können jedoch beliebig viele Cacheordner definieren. Den
Standardwert müssen Sie nur dann anpassen, falls Ihre Konfiguration
etwas anders aussieht: |
| |
cache_dir /usr/local/squid/
var/cache/ 100 16 256 |
Der erste Wert ist der Cacheordner.
Der Wert 100 bestimmt, dass der Cache nicht mehr als 100 MByte Speicherplatz
belegt. Die letzten beiden Zahlen verwendet der Cache, um eine bestimmte
Anzahl von Unterverzeichnissen in dem jeweiligen Cacheordner anzulegen.
Squid hat seine eigenen Algorithmen, nach denen das Programm die
einzelnen Cachedateien speichert, um somit einen schnelleren Zugriff
auf den Cache zu ermöglichen.
Falls Ihr Squid einmal abstürzen sollte, sendet das Programm
eine E-Mail mit dem Grund des Absturzes an den Cacheadministrator,
dessen E-Mailadresse im Wert “cache_mgr” einzustellen
ist. Danach stellen Sie mit den Werten “cache_effective_user”
und “cache_effective_group” ein, unter welchem Benutzeraccount
der Squid-Prozess laufen soll. Sie werden Squid später so konfigurieren,
dass er normalerweise beim Booten des Betriebssystems automatisch
startet. Demnach wird der Squid-Prozess immer erst unter dem Root-Benutzerkontext
gestartet. Sobald Squid anfängt, Daten über das Netzwerk
zu schicken, ändert er seinen Kontext zu den hier eingetragenen
Werten.
Sie haben in einem der vorherigen Schritte den Benutzer Squid angelegt,
der hier nun effektiv eingesetzt wird: |
| |
cache_effective_user squid
cache_effective_group squid |
| Squid kann auch Dateien cachen, die per
FTP übertragen werden. Dazu muss sich das Programm allerdings
mit einem Benutzernamen und einem Passwort an den jeweiligen FTP-Servern
anmelden. Der Benutzer ist bei anonymen Verbindungen meistens “anonymous”,
und der FTP-Server verlangt eine gültige E-Mailadresse vom Benutzer.
Sie sollten also den Wert “ftp_user” anpassen: |
| |
ftp_user squid@computer.domain |
Zu guter Letzt beinhaltet die “squid.conf”-Datei
die komplette Zugriffskontrolle. Bei einer frischen Installation ist
jeglicher Zugriff auf den Cache verboten. Zum Einstieg gewähren
Sie allen Rechnern in Ihrem Netzwerk folgendermaßen Zugriff
(wir gehen davon aus, dass Ihr internes Netwerk ein 10.0.0.0/255.0.0.0-Netz
ist). Tragen Sie also diese Zeilen gleich unter der Zeile ein, wo
es heißt “# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS
FROM YOUR CLIENTS”:
|
| |
acl mynetwork src 10.0.0.0/255.0.0.0
http_access allow mynetwork
icp_access allow mynetwork |
| Die erste Zeile definiert eine so genannte
Access Control List (ACL), also eine Liste von bestimmten Rechnern.
Falls Sie einigen Rechnern in Ihrem Netzwerk (zum Beispiel 10.0.1.0/255.255.255.0)
den Zugriff auf den Cache verbieten wollen, so definieren Sie eine
weiter ACL mit diesen Rechnern und benutzen ein “deny”
anstatt “allow”: |
| |
acl mynetwork src 10.0.0.0/255.0.0.0
acl denynetwork src 10.0.1.0/255.255.255.0
http_access allow mynetwork
http_access deny mynetwork
icp_access allow denynetwork
icp_access deny denynetwork |
| Nun wollen Sie den Cache aber bestimmt
das erste Mal starten. Weiter oben haben Sie die Anzahl der internen
Unterverzeichnisse, die im Cache-Verzeichnis benutzt werden, angegeben.
Nun legen Sie mit dem Befehl |
| |
/usr/local/squid/sbin/squid -z
|
die Ordnerstruktur an. Sie erhalten folgende
Meldung:
|
| |
2004/08/22 13:07:22| Creating
Swap Directories |
| Im Anschluss daran können Sie Squid
starten. Squid läuft, wie jeder andere Netzwerkdienst, nach dem
Start sofort im Hintergrund, und normalerweise sehen Sie nach dem
Start den Prompt sofort wieder. Um zu prüfen, dass unser Cache
auch ohne Fehlermeldungen startet, benutzen wir die Option -N, um
den Cache im Vordergrund zu starten. Gleichzeitig setzen wir die Debug-Funktion
mit -d 1 ein. Das sieht dann so aus: |
| |
usr/local/squid/sbin/squid -N
-d 1 |
| Zunächst liest das Programm unsere
DNS-Serverkonfiguration ein. Danach definiert es seinen Speicherbedarf
und sucht nach dem Cacheordner. Die Meldung “Ready to serve
requests” zeigt uns einen erfolgreichen Start des Programms.
Im Anschluss daran durchsucht Squid den Cacheordner und legt, wie
schon in der Planungsphase erwähnt, eine Tabelle dessen Inhalts
in seinem Speicher an.
Da dies der erste Start des Programms ist, findet Squid natürlich
hier noch keine Daten. |
|
| Test |
|
| |
|
Die Entwickler von Squid haben dem Paket
unter /usr/local/squid/bin/ ein Programm “squidclient”
beigelegt, das sich sehr gut zum Test unseres Caches eignet. Squidclient
benutzt per Standard den Port 3128, den Sie auch in der Konfigurationsdatei
als gültig definiert haben. Sie können mit der Option -p
jedoch auch einen anderen Port, wie in unserem Fall 8080, angeben.
Zunächst testen Sie den Zugang zu einer Webseite, ohne den Cache
zu benutzen:
|
|
| |
/usr/local/squid/bin/squidclient
http://www.it-administrator.de |
|
| Sie sollten unsere Webseite im HTML-Format
sehen. Zum Testen des Caches benutzen Sie die -h-Option: |
|
| |
/usr/local/squid/bin/squidclient
-h ihr.squid.server -p 8080 http://www.it-administrator.de |
|
| Dieser Befehl beauftragt den Cache, via
Port 8080 unsere Webseite zu laden. Falls Sie den gleichen Text wie
beim vorherigen Kommando erhalten, ist Ihr Squid-Server voll funktionsfähig.
|
|
| Autostart |
|
| |
|
Um den Squid-Server beim nächsten
Booten Ihres Rechners automatisch zu starten, finden Sie unter /usr/local/squid/src/contrib/squid.rc
ein Skript, das diese Aufgabe erledigen soll. Leider ist dieses
Skript unter Suse 9.1 nicht funktionsfähig. Eine lauffähige
Datei finden sie unter www.it-administrator.de/download/redaktion/squid
script.txt.
Sie speichern diese Datei unter dem Namen “squid”.
Mit diesem Kommando kopiert sie das System an die richtige Stelle
und verändert die notwendigen Konfigurationsdateien:
|
|
| |
chkconfig squid 3
|
|
| Browserkonfiguration |
|
| |
|
Nachdem Sie Ihren Squid-Cache erfolgreich
installiert und getestet haben, können Sie damit beginnen,
Ihre Benutzer auf den Cacheserver umzuziehen. Hierbei bieten sich
zwei Möglichkeiten an: Sie können jeden Rechner einzeln
konfigurieren oder eine automatische Konfiguration aufsetzen. Da
Internet Explorer 6 der meistverbreitete Browser ist, zeigen wir
Ihnen die Konfiguration anhand dieses Browsers.
Wählen Sie im Internet Explorer im Menü “Extras”
den Punkt “Internetoptionen” und dort den Reiter “Verbindungen”.
Dort finden Sie den Knopf “Einstellungen” im Bereich
“LAN-Einstellungen” und gelangen zu der Seite, auf der
Sie den Proxyserver und dessen Port definieren: |
|
|
|
| Einige Ihrer Benutzer werden durch diese
manuelle Konfiguration überfordert sein, und falls Sie über
eine große Anzahl von Rechnern verfügen, kann sich dies
zu einem Großprojekt ausweiten. Zum Glück können Sie
alle diese Schritte auch automatisieren. Dazu erstellen Sie eine so
genannte Auto-config-Datei, die die Adresse und den Port Ihres Caches
beinhaltet. Eine sehr einfache Datei sieht folgendermaßen aus: |
|
| |
function FindProxyForURL(url,
host)
{
if (isInNet(myIpAddress(), "10.0.0.0", "255.255.255.0"))
return "PROXY 10.0.0.1:8080";
else
return "DIRECT";
} |
|
Falls der Proxy in diesem Beispiel nicht
antwortet, versucht der Browser im nächsten Schritt eine direkte
Verbindung zur gewünschten Seite aufzubauen. Speichern Sie diese
Datei nun unter dem Namen proxy.pac. Sie können diese Datei entweder
auf Ihrem Firmenwebserver zugänglich machen oder auf jedem Rechner
speichern. Unserem Beispiel folgend, haben wir die Datei unter c:\proxy.pac
gespeichert. In den Einstellungen des Internet Explorers wählen
Sie nun die Seite “LAN-Einstellungen” aus, und unter der
Option “Automatisches Konfigurationsskript verwenden”
tragen Sie Folgendes ein:
|
|
| |
file://c:/proxy.pac |
|
| Falls Sie die Datei auf Ihrem Webserver
veröffentlichen, ändern Sie den Wert einfach auf die korrekte
URL, also zum Beispiel auf |
|
| |
http://webserver.domain.com/proxy.pac |
|
Noch einfacher funktioniert die Autokonfiguration,
wenn Sie zusätzlich einen DNS-Server im lokalen Netzwerk laufen
lassen. Um die Option “Automatische Suche der Einstellungen”
im Internet Explorer benutzen zu können, führen Sie folgende
Schritte aus:
Konfigurieren Sie in Ihren DNS-Server einen “A”-Eintrag
zum Rechner mit dem Namen WPAD.ihredomain.com. Auf diesem Rechner
muss ein Webserver laufen und unter http://WPAD.ihredomain.com/WPAD.DAT
muss er den Inhalt Ihrer Proxy.pac-Datei ausgeben. Sie können
diese Konfiguration recht einfach testen, indem Sie folgende Zeilen
in Ihrer WPAD.DAT-Datei speichern, Ihren Squid-Cache nicht starten
und dann ein paar Seiten anfordern:
|
|
| |
function FindProxyForURL(url,
host)
{
return "PROXY 10.0.0.1:8080";
} |
|
| Falls Sie die Antwort “Seite
nicht gefunden” erhalten, ist alles korrekt konfiguriert.
|
|
| Logdateien |
|
| |
|
| Wie bereits erwähnt, schreibt
Squid alle Zugriffe in eine Logdatei. Diese ist bei unserer Installation
unter /usr/local/squid/var/logs/access.log gespeichert. Um zu überprüfen,
ob der Cache auch wirklich korrekt funktioniert, sollten Sie eine
Webseite von zwei verschiedenen Rechnern aufrufen, die beide den
Cache benutzen. Danach werfen Sie einen Blick in die Access.log-Datei.
Wie Sie sehen, erhalten wir bei allen Dateien vom Aufruf des ersten
Rechners (10.0.0.2) nur TCP_MISS-Meldungen. Beim zweiten Aufruf
sehen wir für die gleichen Dateien jedoch ein paar TCP_MEM_HIT-
und TCP_HIT-Meldungen. Ein Cache-HIT bedeutet, dass der Cache die
Datei nicht aus dem Internet laden musste, sondern direkt von seiner
Festplatte (TCP_HIT), oder aus seinem eigenen Speicher (TCP_MEM_HIT)
zum Clientrechner überträgt. |
|
| Ausblick |
|
| |
|
| Mit der Hilfe unseres Workshops sollte
es Ihnen gelungen sein, ein einfaches Cachesystem für Ihr Unternehmen
aufzubauen. Squid bietet jedoch noch viel mehr, wie zum Beispiel
SSL, transparentes Surfen (ohne einen Proxyserver im Browser definieren
zu müssen), eine extrem umfangreiche Zugriffskontrolle mit
ACLs und die Möglichkeit, Load-Balancing über mehrere
Squid-Proxies zu verteilen oder eine Hierarchie von Cacherechnern
aufzubauen. Ein weiteres Nachlesen im Internet ist deshalb in jedem
Falle empfehlenswert. Die Squid-Homepage
oder Google sind ein guter Ausgangspunkt.
|
|
| GULP
Membership Area |
|
Mehr professionelle Fachinformationen gefällig? GULP
Member erhalten das IT-Administrator-Probeabo mit 60% Rabatt
im Vergleich zum Preis der Einzelausgaben.
|
|
| Weitere
Informationen zur GULP Membership |
|
Kommentare zu diesem Artikel:
|