# 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](https://www.ionos.de/digitalguide/online-marketing/suchmaschinenmarketing/google-pagespeed-insights/ "Google PageSpeed Insights") 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](https://www.ionos.de/digitalguide/websites/webdesign/bilder-komprimieren-mithilfe-kostenloser-tools/ "Bilder komprimieren mithilfe kostenloser Tools"), 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](https://mange.dynalias.org/linux/gadminsquid "Linux-GUI für Ihren Squid-Proxy: GAdmin-SQUID") oder [SquidMan](http://squidman.net/squidman/ "Download von 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](http://www.squidguard.org/ "Schnelle und flexible Internetfilter-Erweiterung für Squid-Proxys: 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:

<table>
  <tbody>
    <tr>
      <th>LM</th>
      <td>last modified; Header-Information, die das Datum der letzten Änderung verrät</td>
    </tr>
    <tr>
      <th>EX</th>
      <td>expire; Header-Information, die das Ablaufdatum eines Objekts verrät</td>
    </tr>
    <tr>
      <th>NOW</th>
      <td>das aktuelle Datum</td>
    </tr>
    <tr>
      <th>OBJ\_Date</th>
      <td>Speicherungsdatum im Squid-Cache bzw. Datum der letzten Änderung</td>
    </tr>
    <tr>
      <th>MIN</th>
      <td>Mindesthaltbarkeit im Zwischenspeicher</td>
    </tr>
    <tr>
      <th>MAX</th>
      <td>maximale Haltbarkeit im Zwischenspeicher</td>
    </tr>
    <tr>
      <th>PERCENT</th>
      <td>Haltbarkeitsfaktor</td>
    </tr>
    <tr>
      <th>Obj\_Age</th>
      <td>beschreibt die Zeit, seit der ein Objekt im Cache ist (NOW - OBJ\_Date)</td>
    </tr>
    <tr>
      <th>LM\_Age</th>
      <td>Alter eines Objekts zum Zeitpunkt des Zwischenspeicherns (OBJ\_Date - LM)</td>
    </tr>
    <tr>
      <th>LM\_FACTOR</th>
      <td>Altersfaktor (Obj\_Age / LM\_Age)</td>
    </tr>
  </tbody>
</table>

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

```none
X = OBJ_Date + (LM_Age * PERCENT)
```

Auf [www.squid-handbuch.de](http://www.squid-handbuch.de/hb/ "Ausführliches Handbuch zu Squid") (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](https://www.ionos.de/digitalguide/server/knowhow/server-mit-ssd-speicher-speicherloesung-der-zukunft/ "Server mit SSD-Speicher: Speicherlösung der Zukunft"), 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.:

```none
sudo apt-get update
sudo apt-get install squid
```

Der zweite Installationsweg führt über den Download der [Installationsdateien](http://wiki.squid-cache.org/SquidFaq/BinaryPackages "Download des Squid-Installationspakets für Ihr Betriebssystem"). Diese entpacken und kompilieren Sie ebenfalls auf dem gängigen Weg (im Beispiel Version 3.5.20):

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

Mit dem Befehl

```none
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](http://squid.diladele.com/ "Kompilierter MSI-Installer für die einfache Squid-Installation auf Ihrem Windows-System"), 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](https://www.openssl.org/docs/ "OpenSSL: Das Kryptographie- und SSL/TLS-Toolkit") 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](https://www.ionos.de/digitalguide/server/knowhow/tcp-vorgestellt/ "TCP vorgestellt")-Verbindungen zu erstellen. Für eine genaue Übersicht über Typen und Optionen empfiehlt sich ein Blick in das offizielle [Onlinehandbuch](http://www.squid-cache.org/Doc/config/acl/ "Squid-Online-Manuals: Alle Informationen zum Thema „Zugriffslisten“").

**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


This is a markdown version of: [https://www.ionos.de/digitalguide/server/konfiguration/squid-der-lizenzfreie-caching-server-fuer-ihr-webprojekt/](https://www.ionos.de/digitalguide/server/konfiguration/squid-der-lizenzfreie-caching-server-fuer-ihr-webprojekt/) for AI/LLM consumption.