Squid – der plattformübergreifende Open-Source-Proxy

Die Performance zählt längst zu den wichtigsten Eigenschaften einer guten Website. Lange Ladezeiten führen nachweislich dazu, dass Besucher Ihrer Seite den Rücken zukehren, ohne sich zuvor von der Qualität der Inhalte überzeugt zu haben. Als Komponente moderner User-Experience zählt der Pagespeed außerdem bereits seit 2010 auch zu den Rankingfaktoren von Google. Website-Betreiber sollten sich folglich unbedingt mit diesem Thema auseinandersetzen und die Geschwindigkeit ihres Projekts optimieren. Sie haben u. a. die Möglichkeit, Bilder zu komprimieren, Code-Dateien zusammenzufassen und zu optimieren oder die Anzahl der Anfragen zu minimieren.

Ein weiterer Ansatz, mit dem Sie Ihren Webserver ganz gezielt entlasten, ist die Nutzung eines Reverse-Proxy-Servers. Diese Software-Komponente dient als Schnittstelle zwischen Browser und Webserver, indem sie stellvertretend die Browseranfragen bearbeitet und zwischengespeicherte statische Inhalte eigenständig ausliefert, ohne den Webserver zu kontaktieren. Das ist besonders effektiv, wenn der Server die Seite im CMS zwar jedes Mal dynamisch erstellt, sie sich aber nicht ständig ändert. Zu den beliebtesten Lösungen, um einen solchen Cache-Proxy zu realisieren, zählt das freie Programm Squid.

Was ist Squid?

Squid ist eine Proxy-Server-Software, die Duane Wessels 1998 als freie Abspaltung des „Harvest object cache“ veröffentlichte. Parallel dazu erschien auch eine kommerzielle Version unter dem Namen NetCache, deren Weiterentwicklung allerdings mittlerweile eingestellt ist. Squid ist unter der GNU General Public License freigegeben und unterstützt u. a. die Protokolle HTTP, HTTP/2, HTTPS und FTP. Squid-Proxy-Server laufen auf den meisten gängigen Betriebssystemen wie diversen Linux-Distributionen, Mac OS X oder Windows. Die Bedienung funktioniert entweder klassisch über das entsprechende Kommandozeilen-Tool oder über eine grafische Oberfläche wie GAdmin-SQUID oder SquidMan.

Tausende Website-Betreiber machen von den Caching-Möglichkeiten des Open-Source-Proxys Gebrauch. Wikipedia z. B. nutzte jahrelang mehrere Squid-Proxys zur Auslieferung der Inhalte, um Datenbank- und Webserver zu entlasten. Darüber hinaus kann Squid dank der Unterstützung von HTTPS auch den Aufbau gesicherter SSL-Verbindungen übernehmen. Außerdem setzen diverse Internet-Provider weltweit Squid als transparenten Proxy ein, um für eine Optimierung des Internetzugangs zu sorgen. Natürlich können Sie die Open-Source-Software auch dazu verwenden, einen gewöhnlichen Forward-Proxy für einen einzelnen Client zu betreiben und damit die eigene IP-Adresse zu verbergen und einen zusätzlichen Schutz zur Paketfilterung der Firewall zu erhalten. Alternativ kann Squid mit der Erweiterung SquidGuard auch eigenständig Pakete filtern.

Warum Sie einen Squid-Proxy-Server einsetzen sollten

Squid ist seit der ersten Version ein Open-Source-Produkt, weshalb keinerlei Lizenzkosten anfallen und der Quelltext frei verfügbar ist. Sie können die Software also nicht nur kostenfrei herunterladen, sondern auch an Ihre Bedürfnisse anpassen. Notwendig wird das allerdings nur in den seltensten Fällen sein: Die jahrzehntelange Erfahrung der Mitarbeiter des Squid-Projekts, die das Proxy-Programm auf freiwilliger Basis betreuen und weiterentwickeln, zeigt sich deutlich in der Vielseitigkeit und der Geschwindigkeitsoptimierung, die Squid bietet. Auch im privaten Einsatz macht die Software dank definierbarer Zugriffs-Kontroll-Listen (Access Control Lists) eine gute Figur. Einerseits kann der Zugriff auf bestimmte Inhalte gesperrt oder die nutzbare Bandbreite eingeschränkt werden, andererseits können Sie die Log-Files des eingesetzten Proxys problemlos analysieren, um den Datenverkehr zu kontrollieren.

Ein wichtiges Merkmal von Squid ist außerdem die hohe Flexibilität, die sich vor allem in größeren, komplexen Netzwerken bezahlt macht. So ist es z. B. möglich, einen Cache-Proxy-Verbund aufzubauen, indem Sie auf mehrere Squid-Proxys zurückgreifen und die Anfragen auf selbige verteilen. Dieser Verbund entlastet die einzelnen Komponenten und erhöht die Ausfallsicherheit enorm. Wie in einem Content Delivery Network können sich dabei die einzelnen Reverse-Proxy-Server an mehreren Standorten befinden.

So funktioniert das Caching-Verhalten der Proxy-Software

Die aufgezählten Sicherheits- und Kontrollfunktionen, die Sie realisieren können, verdeutlichen die Vielseitigkeit der Open-Source-Software. In erster Linie überzeugt Squid allerdings in seiner Kernfunktion als Proxy-Server zum Zwischenspeichern von Daten. Um deren Aktualität und Verfügbarkeit zu gewährleisten, berechnet Squid ihren Status regelmäßig, wobei zwei Ergebnisse möglich sind: Das überprüfte Objekt kann entweder immer noch aktuell (fresh) oder abgelaufen (stale) sein. Damit nicht immer der komplette Datensatz kontrolliert werden muss, errechnet ein Algorithmus für jedes einzelne Objekt, wie oft eine Verifizierung notwendig ist. Dabei fließen folgende Informationen in die Bewertung ein:

LM last modified; Header-Information, die das Datum der letzten Änderung verrät
EX expire; Header-Information, die das Ablaufdatum eines Objekts verrät
NOW das aktuelle Datum
OBJ_Date Speicherungsdatum im Squid-Cache bzw. Datum der letzten Änderung
MIN Mindesthaltbarkeit im Zwischenspeicher
MAX maximale Haltbarkeit im Zwischenspeicher
PERCENT Haltbarkeitsfaktor
Obj_Age beschreibt die Zeit, seit der ein Objekt im Cache ist (NOW - OBJ_Date)
LM_Age Alter eines Objekts zum Zeitpunkt des Zwischenspeicherns (OBJ_Date - LM)
LM_FACTOR Altersfaktor (Obj_Age / LM_Age)

Bis zum Zeitpunkt X gilt ein Objekt im Cache. Die entsprechende Formel zur Berechnung lautet:

X = OBJ_Date + (LM_Age * PERCENT)

Auf www.squid-handbuch.de (Punkt 4.3 Cache-Verhalten von Squid) findet man eine Abbildung, die den Caching-Algorithmus veranschaulicht. Vereinfacht ausgedrückt bewirkt der Algorithmus Folgendes: Der Squid-Proxy-Server kontrolliert den Status eines Objekts häufiger, wenn das Objekt selbst häufiger Veränderungen erfährt. Der früheste Überprüfungszeitpunkt ist dabei MIN, also die zugeordnete Mindesthaltbarkeit im Cache. Spätestens, wenn das maximale Haltbarkeitsdatum MAX erreicht ist, muss Squid den Webserver in jedem Fall kontaktieren. Dazu sendet die Proxy-Software eine GET-Anfrage mit If-Modified-Since-Angabe inklusive der OBJ_DATE-Auskunft. Der Webserver verifiziert den Status des Objekts und schickt entweder

  • den Statuscode 304 (not modified), wenn das Objekt unverändert ist,
  • oder den Statuscode 200 (OK) sowie das neue, veränderte Objekt zurück.

So werden Daten nur dann neu übertragen, wenn sich tatsächlich etwas verändert hat.

Welche Hardware-Anforderungen stellt Squid?

Wenn Sie einen Squid-Reverse-Proxy für Ihren Webserver nutzen wollen, sollten Sie zunächst sichergehen, dass Sie die notwendigen Hardware-Strukturen verfügbar haben. Ein Caching-Proxy stellt keine besonderen Anforderungen an die Prozessorleistung, sondern setzt prinzipiell nur die passende Größe von Arbeits- und Festplattenspeicher voraus. Beide Komponenten sind heutzutage sehr erschwinglich, weshalb die Beschaffung weniger eine Frage des Preises als vielmehr eine Frage der richtigen Kalkulation ist. Berechnen Sie Ihren Bedarf in Relation zu Ihrem Webprojekt und lassen Sie dabei auch das potenzielle Wachstum einfließen. Setzen Sie beim Kauf der Hardware auf moderne Komponenten wie SSD-Speicher, die sich durch eine schnelle Zugriffszeit auszeichnen und damit auch die bestmögliche Geschwindigkeitsoptimierung Ihrer Website ermöglichen.

Squid installieren – so funktioniert’s

Sie haben in der Regel zwei Möglichkeiten, die Squid-Software auf Ihrem System zu installieren. Die erste Variante setzt voraus, dass sich Squid in der Paketverwaltung Ihrer verwendeten Distribution befindet. Ist dies der Fall, gelingt die Installation des Proxy-Programms nach dem bekannten Muster über die Kommandozeile. Unter Ubuntu lautet der entsprechende Befehl z. B.:

sudo apt-get update
sudo apt-get install squid

Der zweite Installationsweg führt über den Download der Installationsdateien. Diese entpacken und kompilieren Sie ebenfalls auf dem gängigen Weg (im Beispiel Version 3.5.20):

tar xzf squid-3.5.20.tar.gz
cd squid-3.5.20
./configure
make

Mit dem Befehl

make install

starten Sie anschließend die Installation.

Seit Version 3.5 gibt es für Windows-Systeme (64-Bit) ein inoffizielles vorgefertigtes MSI-Installationspaket, das Sie nach dem Download einfach per Doppelklick ausführen können.

Zu jeder veröffentlichten Stable-Version existieren außerdem auch eine Beta- sowie eine Development-Version, die neue Features enthalten. Beide Versionen dienen aber in erster Linie dem Test dieser Funktionen, weshalb Sie nur darauf zurückgreifen sollten, wenn Sie sich gut mit der Squid-Software auskennen.

So konfigurieren Sie Ihren Squid-Proxy-Server zur Website-Beschleunigung

Als welche Art von Proxy Squid fungieren soll, definieren Sie in der Konfigurationsdatei squid.conf. Sie finden diese standardmäßig unter /etc oder /usr/local/squid/etc/ bzw. in dem Verzeichnis, das Sie bei der Installation bestimmt haben. Es existieren bereits diverse vordefinierte Einstellungen, die per Kommentarzeilen, die jeweils mit dem Rautezeichen (#) beginnen, gekennzeichnet sind. In den folgenden Abschnitten haben wir die entscheidenden Optionen, die Sie benötigen, um Squid einzurichten, zusammengefasst.

Netzwerkoptionen: # NETWORK OPTIONS

In diesem Bereich konfigurieren Sie IP-Adressen und Ports, die für den Betrieb des Squid-Servers relevant sind. Folgende Einträge sind für den Cache-Proxy relevant:

http_port

Syntax: http_port [Hostname oder IP-Adresse:]Portnummer

Beschreibung: Definiert den Port, auf dem Squid auf die HTTP-Anfragen der Clients lauscht. Standardmäßig ist Port 3128 angegeben. Werden weder Hostname, noch IP-Adresse angegeben, gelten die Einstellungen für alle eingebundenen IP-Adressen. Auch die Angabe mehrerer Ports ist möglich.

Beispiel: http_port 192.168.0.1:3128

https_port

Syntax: https_port [IP-Adresse:]Portnummer cert=Pfad zum SSL-Zertifikat [key=Pfad zum privaten SSL-Schlüssel] [options]

Beschreibung: Die Angabe des HTTPS-Ports ist erforderlich, wenn der Squid-Proxy selbst SSL- bzw. TLS-Verbindungen entgegennehmen muss. Die Angabe des Pfades zum verwendeten Zertifikat (im PEM-Format) ist zwingend erforderlich. Geben Sie keinen privaten SSL-Key an, geht Squid automatisch davon aus, dass die PEM-Datei den privaten Schlüssel bereits enthält. Mit dem Parameter options können Sie zusätzliche Optionen entsprechend der OpenSSL-Dokumentation angeben.

icp_port

Syntax: icp_port Portnummer

Beschreibung: Hier geben Sie den Port an, über den Squid ICP-Anfragen (Internet Cache Protocol) entgegennimmt bzw. UDP-Pakete empfängt. Eine Angabe ist nur notwendig, wenn Sie mehrere Proxys nutzen, die miteinander kommunizieren sollen. Der Standard-Port ist 3130; zum Abschalten der Funktion können Sie den Parameter 0 angegeben.

Beispiel: icp_port 3130

Caching-Optionen: # OPTIONS WHICH AFFECT THE CACHE SIZE

In den Caching-Optionen legen Sie u. a. fest, ob bzw. wie viel Arbeitsspeicher Ihr Squid-Proxy zu Caching-Zwecken in Anspruch nimmt, oder definieren die minimale und maximale Objektgröße und das allgemeine Caching-Verhalten.

cache_mem

Syntax: cache_mem Arbeitsspeicher in MB

Beschreibung: Mit cache_mem bestimmen Sie die Größe des reservierten Hauptspeichers für Durchgangsobjekte (In-Transit Objects), ständig angefragte Objekte (Hot Objects) und nicht cachebare Objekte (Negative-Cached Objects). Da diese Daten in Blöcken zu je 4 KB vorliegen, muss auch der hier angegebene Wert ein Vielfaches von 4 KB betragen. Verwechseln Sie diese Option nicht mit dem absoluten Speicherbedarf von Squid, der nicht auf diese Weise reguliert wird.

Beispiel: cache_mem 256 MB

maximum_object_size

Syntax: maximum_object_size Objektgröße in KB/MB

Beschreibung: Dieser Eintrag informiert Squid darüber, bis zu welcher Größe Objekte zwischengespeichert werden sollen. Die minimale Größenbegrenzung halten Sie mit minimum_object_size fest.

Beispiel: maximum_object_size 4 MB

Angabe von Caching- und Logfile-Verzeichnis: # LOGFILE PATHNAMES AND CACHE DIRECTORIES

Zusätzlich zu Angaben über Ports und Caching-Verhalten benötigt der Squid-Server Informationen darüber, in welches Verzeichnis er die Inhalte und anfallende Log-Daten zwischenspeichern soll.

cache_dir

Syntax: cache_dir Verzeichnistyp Verzeichnispfad Speicherplatz Verzeichnisanzahl

Beschreibung: Mit cache_dir definieren Sie das Caching-Verzeichnis sowie dessen maximale Speicherkapazität in Megabyte und die Anzahl an Verzeichnissen und Unterverzeichnissen. Der standardmäßig installierte Verzeichnistyp ist ufs. Generell ist diese Option ausgeschaltet und muss zunächst aktiviert werden.

Beispiel: cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256

cache_log

Syntax: cache_log Dateipfad

Beschreibung: Bestimmt den Speicherort der Log-Datei Ihres Squid-Proxy-Servers, die allgemeine Informationen über das Verhalten der Software aufzeichnet.

Beispiel: cache_log /usr/local/squid/var/logs/cache.log

Zugriffsoptionen: # ACCESS CONTROLS

Abschließend benötigen Sie für die von Squid genutzten Ports klar definierte Zugriffslisten. Dabei sind insbesondere folgende zwei Parameter entscheidend:

acl

Syntax: acl Listenname Listentyp Argument

Beschreibung: Hier haben Sie die Möglichkeit, eine detaillierte Zugriffsliste für alle HTTP-, ICP- und TCP-Verbindungen zu erstellen. Für eine genaue Übersicht über Typen und Optionen empfiehlt sich ein Blick in das offizielle Onlinehandbuch.

Beispiel: acl all src 0.0.0.0

http_access

Syntax: http_acess allow|deny [!]Listenname

Beschreibung: Erlaubt (allow) oder verbietet (deny) den Zugriff auf den HTTP-Port anhand der zuvor definierten Zugriffsliste. Mit vorangestelltem Ausrufezeichen gilt die Zuweisung für alle Verbindungen, die nicht zur genannten Liste gehören.

Beispiel: htttp_access deny !SSL_ports