Proxyserver Squid optimieren
Virtueller Makler

Netzwerke

Ein Proxy-Server bescheunigt nicht nur den Zugriff auf Daten im Internet, er verringert auch den Datentransfer erheblich. Internet Professionell zeigt, wie Sie mehr aus Squid herausholen.

Einleitung

Proxyserver Squid optimieren

Auch in Zeiten von DSL & Co. lässt sich ein lokaler Proxy-Server nach wie vor sinnvoll einsetzen. Zum einen beschleunigt dieser den Zugriff auf Daten im Internet, zum anderen spart der Proxy-Server den Abruf eines erheblichen Datenvolumens ein. Letzteres ist vor allem dann interessant, wenn anstatt einer Flatrate ein nach Download-Volumen angerechneter Tarif für den Internet-Zugang Verwendung findet.

Bei Squid handelt es sich um den am weitesten verbreiteten Proxy-Server für Unix- beziehungsweise Linux-Plattformen. Im folgenden Beitrag zeigt Internet Professionell, wie Sie mehr aus Squid herausholen. Grundsätzlich hat Squid eine Menge Schrauben, an denen man drehen kann. Jedoch arbeitet der Proxy-Server von sich aus bereits recht flott und stabil, so dass es nicht viel zu optimieren gibt. Internet Pro stellt Ihnen daher die Tipps vor, die Ihnen als Administrator den meisten Nutzen bringen.


Tipps&Tricks

Proxyserver Squid optimieren

So erläutert der Workshop unter anderem, wie Sie eigene Fehlermeldungen erzeugen oder die Bandbreite Ihres Internet-Zugangs steuern. Freilich decken die Tipps und Tricks nur einen Bruchteil der Möglichkeiten von Squid ab. Eine Erläuterung aller möglichen Features des Proxyservers würde jedoch den Rahmen dieses Beitrags sprengen.

Als Testobjekt dient ein aktuelles Suse Linux 9.0 Professional mit Squid in der Version 2.5. Da im Handbuch der Distribution die Installation und grundlegende Einrichtung des Proxy-Servers bereits sehr ausführlich beschrieben wird, gehen wir an dieser Stelle nicht näher darauf ein. Dieser Beitrag baut darauf auf, dass Sie bereits einen lauffähigen Squid auf Ihrem System eingerichtet haben. Ebenso wird vorausgesetzt, dass Sie mit der Einrichtung der Access-Control-Listen, kurz ACLs, vertraut sind.


Steuerung der Bandbreite

Proxyserver Squid optimieren

Auch die mittlerweile weithin verfügbaren flotten Internet-Verbindungen über DSL haben ihre Grenzen. Wenn zwei Mitarbeiter größere Datenmengen aus dem Internet laden, kann es schon mal passieren, dass die Bandbreite in die Knie geht und alle Mitarbeiter etwas länger auf ihre angeforderten Seiten warten müssen. Um die heutzutage stets knappe Bandbreite gleichmäßig und kontrolliert zu verteilen, bietet Squid anhand der so genannten Delay-Pools
die Möglichkeit einer begrenzten Bandbreitensteuerung.

Die Delay-Pools werden über zwei Werte definiert: restore und maximum. Mit restore bestimmen Sie dabei die Bandbreite in Byte pro Sekunde, mit maximum die maximale Datenmenge in Byte, die in einem Rutsch vom Proxy-Server übertragen wird. Dies bedeutet, dass die mit maximum festgelegte Datenmenge normal über das Netz übertragen wird, ohne weitere Begrenzung und mit voller Bandbreite. Erst alle Daten, welche über maximum liegen, werden von Squid so lange verzögert, bis die mit restore festgelegte durchschnittliche Bandbreite erreicht beziehungsweise nicht überschritten wird.

So steht einem Client die jeweils unter restore festgelegte Bandbreite im Durchschnitt zur Verfügung, ein Datenpaket in der unter maximum festgelegten Größe kann jedoch mit der vollen verfügbaren Bandbreite transportiert werden. Um die Delay-Pools unter Squid zu nutzen, muss der Proxyserver mit der configure-Option –enable-delay-pools installiert werden.


Bandbreitensteuerung einrichten

Proxyserver Squid optimieren

Wie alle anderen Optionen von Squid legen Sie auch die Delay-Pools in der zentralen Konfigurationsdatei squid.conf fest. Die entsprechenden Einstellungen hierfür finden Sie im Abschnitt DELAY POOL PARAMETERS.

Im ersten Schritt legen Sie fest, wie viele Delay-Pools Sie nutzen möchten. Dabei können Sie unterschiedlichen Benutzern oder Benutzergruppen jeweils eine eigene Bandbreite mit einem eigenen Delay-Pool zuweisen. Als Beispiel legen Sie zwei Delay-Pools an:

delay-pools 2

Die Option delay-class definiert für jeden Delay-Pool die zugehörige Klasse. Der Proxy-Server Squid kennt drei verschiedene Arten von Delay-Pools – Delay-Class 1 bis Delay-Class 3. Jede dieser Klassen besitzt unterschiedliche Parameter zur Festlegung der entsprechenden Bandbreite. Dabei ist die Klasse 1 die einfachste Form eines Delay-Pools. Hier wird die Bandbreite aller Verbindungen zusammengefasst und darf die festgelegte Bandbreite nicht übersteigen. Es werden alle Benutzer dieses Delay-Pools zusammen auf ein Maximum gesetzt.


Verschiedene Klassen

Proxyserver Squid optimieren

In der Klasse 2 kann zudem neben der Gesamtbandbreite aller Nutzer für jeden Client eine individuelle Bandbreitenbegrenzung festgelegt werden. Dies geschieht anhand des letzten Byte der IP-Adresse. In der Klasse 3 steht Ihnen zusätzlich noch eine Begrenzung für jedes Subnetz zur Verfügung.

In diesem Beispiel weisen Sie dem Delay-Pool 1 die Klasse 2 und dem Delay-Pool 2 die Klasse 3 zu:

delay-class 1 2
delay-class 2 3

Nun ist der an der Zeit, die Parameter
der Delay-Pools festzulegen – restore und maximum. Dies geschieht mit Hilfe der Option delay_parameters. Die Syntax ist dabei recht einfach: Sie geben den Delay-Pool an, gefolgt von den beiden Werten, welche wiederum durch einen Schrägstich getrennt werden:

delay_parameters 1 8192/16384 3600/3600

Beachten Sie dabei, dass der Wert für restore den für maximum natürlich nicht überschreiten darf, jedoch dürfen beide Werte gleich groß sein. Im obigen Beispiel betragen für den Delay-Pool 1 der Klasse 2 für alle Benutzer der restore-Wert 8192 Bytes pro Sekunde und der maximum-Wert 16384 Bytes pro Sekunde, für die einzelnen Nutzer sind beide Werte 3600 Bytes pro Sekunde. Die Angaben -1 für restore- oder maximum-Wert würde keine Begrenzung bedeuten. Bei einem Delay-Pool der Klasse 3 geben Sie zuerst die Werte für alle Nutzer, gefolgt von denen für das Subnetz und für die einzelnen Benutzer an.

Mit delay_access legen Sie fest, welche Anfrage in welchen Delay-Pool fällt. Dabei ist die Syntax die gleiche wie bei den Access-Regeln. Sie können über ACLs bestimmen, für welche Anfrage welcher Delay-Pool Anwendung findet:

delay_access pool allow|deny acl

In folgendem Beispiel definieren Sie den Zugriff auf den Delay-Pool 1 der Klas-
se 2 für das Klasse-C-Netz 192.168.1.0/
255.255.255.0:

acl vertrieb src 192.168.0.1/255.255.255.0
delay_pools 1
delay_class 1 2
delay_parameters 8192/16384 3600/3600
delay_access 1 allow vertrieb
delay_access 1 deny all

Als letzte Einstellung für die Delay-Pools steht delay_initial_bucket_level zur Verfügung. Damit bestimmen Sie die anfängliche Füllung eine Poll-Limits in Prozent beim Neustart von Squid. Dies dient dazu, Spitzenlast-Effekte zu vermeiden. Den Standardwert von 50 Prozent können Sie in der Regel ohne weitere Änderungen übernehmen.


Sprache für Fehlermeldungen

Proxyserver Squid optimieren

Der normale Nutzer im Netzwerk bekommt in der Regel vom Einsatz des Proxy-Servers nichts mit. Er gibt regulär im Adressfeld des Browsers die gewünschte Internet-Adresse ein, welche dann wie üblich im Browserfenster erscheint. Erst wenn etwas nicht funktioniert, tritt der Proxy-Server anhand von Fehlermeldungen in Erscheinung.

Dies ist beispielsweise der Fall, wenn der Anwender eine falsche Internet-Adresse eingibt, welche nicht existiert. Um zum einen dem User eine leicht
verständliche Meldung anzuzeigen und den Systemadministrator vor unnötigen Rückfragen zu verschonen, bietet Squid die Möglichkeit, die Sprache der Fehlermeldungen festzulegen und sogar eigene Meldungen für den Proxyserver zu generieren.

Zwar sind die meisten Fehlermeldungen für den Kenner sofort erkennbar, für den Anwender ohne Profi-Kenntnisse in diesem Bereich aber oft etwas verwirrend und wenig aussagekräftig.

Standardmäßig bringt Squid Fehlermeldungen in knapp 30 verschiedenen Sprachen mit. Die gewünschte Sprache legen Sie beim Übersetzen der Quellen mit der configure-Option –enable-err-language=lang fest. Dabei muss die Angabe der Sprache dem Namen des Verzeichnisses unter errors/ relativ zum Quellpfad entsprechen. In diesem Verzeichnis befindet sich also für jede unterstützte Sprache ein Unterverzeichnis. Dieses Unterverzeichnis enthält die jeweiligen Fehlermeldungen als HTML-Datei. Die Dateinamen beginnen alle mit ERR_, gefolgt von einer kurzen Beschreibung der Meldung, wie zum Beispiel ERR_INVALID_URL.

Wenn Sie Squid bereits installiert haben, können Sie die Sprache für die Fehlermeldungen auch nachträglich ändern. Hierzu legen Sie in der Datei squid.conf unter error_directory das entsprechende Verzeichnis fest. Für deutschsprachige Fehlermeldungen geben Sie Folgendes an:

error_directory /usr/share/squid/errors/German

Nach dem erneuten Einlesen der Datei squid.conf mit rcsquid reload erscheinen alle Fehlermeldungen nun auf Deutsch.


Eigene Fehlermeldungen

Proxyserver Squid optimieren

Neben den vorhandenen Fehlermeldungen können Sie auch eigene Meldungen erzeugen. Hierzu legen Sie je nach Sprache im entsprechenden Verzeichnis eine neue Datei an, deren Name mit ERR_ beginnt. Am einfachsten ist es, wenn Sie eine vorhandene Datei kopieren und nach Ihren Vorstellungen bearbeiten. In der Datei squid.conf können Sie dann Ihre neuen Fehlermeldungen über die Option deny_info einbinden. Damit wird die Fehlermeldung an eine Access-Control-Liste gebunden. Wird der Zugriff auf eine Ressource anhand dieser ACL verhindert, erscheint Ihre eigene Fehlermeldung.

Wenn Sie für Ihre neue Fehlermeldung eine der vorhandenen Dateien als Basis nehmen, fällt Ihnen sicher gleich auf, dass die HTML-Dateien nicht ordnungsgemäß abgeschlossen sind, also die beiden Tags und fehlen. Das Ende der HTML-Datei fügt Squid beim Aufruf der Fehlermeldung automatisch hinzu.

Haben Sie die Fehlermeldung ERR_FALSCHE_ABTEILUNG erstellt und jeder Benutzer soll die Meldung erhalten, der nicht über die Access-Control-Liste der Abteilung Vertrieb Zugriff hat, binden Sie die Meldung wie folgt ein:

acl vertrieb dst 192.168.80.0/255.255.255.0
deny_info ERR_FALSCHE_ABTEILUNG vertrieb
http_access deny vertrieb
...

Der Proxy-Server Squid bringt eine Menge Variablen mit, welche sich bequem in die Fehlermeldungen einbauen lassen und beim Aufruf durch die entsprechenden Werte ersetzt werden. Die Variablen beginnen alle mit einem Prozentzeichen, gefolgt einem Buchstaben, wobei zwischen Groß- und Kleinschreibung unterschieden wird. Im nebenstehenden Kasten finden Sie einen Überblick über die wichtigsten Variablen und die dazugehörigen Werte.


Cache-Manager

Proxyserver Squid optimieren

Wer einen Proxy-Server in Betrieb hat, möchte auch gerne wissen, was auf dem Server so alles passiert. Vor allem die Auslastung spielt eine gewichtige Rolle, besonders wenn es zum Beispiel darum geht, ob die Hardware-Ressourcen ausreichend dimensioniert sind.

Eines der Merkmale von Squid sind die ausführlichen Protokolldateien. Neben einer Menge externer Tools zum Auswerten enthält der Proxy-Server bereits ein entsprechendes eigenes Tool – den Cache-Manager, auch Cache-Manager-Interface (CMI) genannt. Dabei handelt es sich um ein kleines CGI-Programm, welches lediglich auf einen Webserver mit entsprechender CGI-Unterstützung und Verbindung zum Proxy-Server kopiert werden muss. Das Aufzählen und Erläutern aller Funktionen des Cache-Managers würde an dieser Stelle zu weit führen. Jedoch sind die meisten Funktionen selbsterklärend, so dass man sich recht schnell zurechtfindet.

Um den Cache-Manager direkt auf dem Proxy-Server laufen zu lassen, installieren Sie einen Webserver wie Apache und die Unterstützung für CGIs unter Perl. Dann kopieren Sie die Datei des Cache-Managers in das CGI-Verzeichnis des Webservers. Auf dem Testsystem befindet sich die Datei cachemgr.cgi des Cache-Managers im Verzeichnis /usr/
share/doc/packages/squid/ scripts. Auf dem Beispielserver läuft ein Apache-1.3.x-Webserver, das CGI-Verzeichnis befindet sich unter /srv/www/cgi-bin. Kopieren Sie nun die Datei:

cp /usr/share/doc/packages/squid/scripts/cachemgr.cgi
/srv/www/cgi-bin

Wenn Sie nun auf dem Proxy-Server einen beliebigen Webbrowser öffnen und in die Adresszeile http://localhost/
cgi-bin/cachemgr.cgi eingeben, erscheint die Login-Maske des Cache-Managers. Geben Sie als Host localhost und als Port den entsprechenden Port an, auf dem Ihr Squid läuft, in der Regel 3128. Ein Login-Name und Passwort sind noch nicht vergeben und werden vorerst freigelassen.


Zugriff schützen

Proxyserver Squid optimieren

Wenn Sie den Cache-Manager direkt am Proxy-Server aufrufen, ist es noch nicht weiter tragisch, wenn kein Passwort abgefragt wird. Ist Ihr Cache-Manager allerdings so konfiguriert, dass jeder Client darauf zugreifen kann, stellt dies eine Sicherheitslücke dar. Das können Sie ganz einfach testen, indem Sie auf einem der Clients in den Webbrowser die gleiche Adresse wie oben eingeben, localhost jedoch durch die IP-Adresse des Squid-Proxys ersetzen.

Auch die Einstellungen für den Cache-Manager werden wieder in der zentralen Konfigurationsdatei squid.conf vorgenommen. In der Standardeinstellung von Squid finden Sie in der Konfigurationsdatei eine Access-Control-Liste mit dem Namen manager vom Typ proto mit dem Protokoll cache_object. Über dieses Squid-spezifische Protokoll werden die Zugriffe auf den Cache-Manager geregelt.

Um ein Passwort für den Cache-Manager zu vergeben, suchen Sie in der Datei nach der Zeichenkette cachemgr_passwd. Sie finden daraufhin in den Kommentaren der Datei squid.conf eine kurze Anleitung, wie ein entsprechendes Passwort festgelegt wird. Nach diesem Schema legen Sie nun Ihr eigenes Kennwort an. Beachten Sie, dass das Passwort in der Konfigurationsdatei im Klartext gespeichert wird. Daher sollten Sie für den Cache-Manager keinesfalls dieselben Passwörter vergeben wie beispielsweise für den User root.

Um nun ein Passwort festzulegen, ergänzen Sie die Datei squid.conf um folgende Zeile:

cachemgr_passwd abc123 shutdown

Damit haben Sie für die Funktion shutdown das Passwort abc123 vergeben. Die Syntax ist also recht einfach: Nach dem Stichwort cachemgr_passwd folgt das Pass-wort und die entsprechende Funktion, die mit diesem geschützt werden soll. Sie können durch ein Leerzeichen getrennt auch mehrere Funktionen festlegen. Soll für bestimmte Funktionen kein Passwort vergeben werden, geben Sie none an, mit all setzen Sie das Passwort für alle Funktionen des Cache-Managers.

Wenn Sie nun erneut über einen Webbrowser auf den Cache-Manager zugreifen, funktioniert die Funktion shutdown nur noch mit dem entsprechenden Pass-wort, welches Sie soeben festgelegt haben. Als Login-Namen verwenden Sie
cachemgr@localhost. Zur Sicherheit sollten Sie jedoch alle grundsätzlich alle Funktionen des Cache-Managers mit einem Passwort schützen. Außer Ihnen benötigt normalerweise keiner Zugriff.


Weitere Optimierungen

Proxyserver Squid optimieren

Wie bereits erwähnt, gibt es bei Squid viele Ecken und Enden, an denen man herumspielen kann. Da dies jedoch in den meisten Fällen keine gravierenden Vorteile bringt und sogar den gegenteiligen Effekt zur Folge haben kann, sollte man von größeren Optimierungsaktionen Abstand nehmen.

Etwas Performance können Sie durch die Wahl Ihrer Access-Control-Listen gewinnen. Je weniger ACLs Squid durchlaufen muss, desto schneller kann eine Anfrage bearbeitet werden. Daher sollten Sie einfachen ACLs wie src oder dst den Vorrang geben, komplexe ACLs mit externen Anfragen kostet mehr Zeit. Auch die Reihenfolge spielt eine Rolle. Die ACLs werden wie bei einer Paketfilter-Firewall von oben nach unten durchlaufen. In diesem Zusammenhang gilt auch die Regel »Weniger ist oft mehr« – je weniger ACLs, desto besser.