# Squid

Squid (engl. für „Kalmar“) ist ein freier Proxyserver und Web-Cache, der unter der GNU General Public License steht. Er zeichnet sich vor allem durch seine gute Skalierbarkeit aus. Squid unterstützt die Netzwerkprotokolle HTTP/HTTPS, FTP über HTTP und Gopher.

## Einsatzgebiete

Squid-Server können sowohl für sehr kleine Netze (5–10 Benutzer) als auch für sehr große Proxyverbunde in Weitverkehrsnetzen mit mehreren hunderttausend Benutzern eingesetzt werden.
Squid hat sich ebenfalls als transparenter Proxy bei ISPs (Internet Service Provider) bewährt. In dieser Funktion werden alle Anfragen von Kunden über den Proxy geleitet, was zur Beschleunigung der Datenübertragung sowie zur Reduktion der Datenrate des Providers führt. Häufig wird Squid auch als Reverse Proxy zum Schutz und zur Beschleunigung von Webservern eingesetzt. Ab Version 2.6 läuft Squid auch als HTTPS-Proxy. Damit wird die SSL-Verschlüsselung vom Webserver auf den Proxy verlagert.
Er kann auch mittels zusätzlicher Redirector-Software eine Filterfunktion wahrnehmen. Damit werden bestimmte Seiten oder Seiteninhalte nicht dargestellt, sondern stattdessen eine Ersatzseite oder Ersatzgrafik angezeigt. Dies wird oft zur Vermeidung von Werbeinhalten, aber auch zur Zensur von Webinhalten eingesetzt. Der SquidGuard, der mit Squid ausgeliefert wird, ist ein Programm, das diese Weiterleitungs-Funktionalität (in Squid mit ‚url_rewriter‘ bezeichnet) anwendet. Ein alternatives Produkt ist UfdbGuard, das zusätzlich zu den Filterfunktionen auch Erkennung und Blocken von Tunneln und nicht autorisierten Zertifikaten beherrscht.
In beschränktem, aber für praktische Zwecke oft ausreichendem Maß kann Squid über sogenannte „Delay-Pools“ auch zur Bandbreitenkontrolle eingesetzt werden. Dabei können Benutzerklassen (genauer gesagt Adressbereiche) definiert werden, die unterschiedliche Anteile bei der Leitungsnutzung haben. Einer Benutzerklasse kann ein Vorrat an Kapazität (Buckets) nach dem Token-Bucket-Algorithmus zugeordnet werden, der mit voller Datenrate aufgebraucht werden darf. Dadurch tritt die Beschränkung erst bei intensiver Nutzung auf, während bei „normaler“ Nutzung aus der Sicht des Anwenders die volle Datenrate zur Verfügung steht. Es ist konfigurierbar, wie viele nichtbenutzte Buckets eine Klasse ansparen kann, um bei Spitzen mit voller Datenrate bedient werden zu können. Was nicht möglich ist, ist die Zuordnung der vollen Kapazität, falls diese gerade verfügbar ist.
In gewissem Umfang kann Squid auch anonymisieren, indem bestimmte Header-Zeilen einer Web-Anfrage entfernt werden.
Da Squid sowohl das Internetprotokoll in der Version 4 als auch in der Version 6 gleichzeitig (Dual-Stack) beherrscht, kann er auch zwischen beiden Protokollen übersetzen.

### Einsatz bei der Wikimedia Foundation

Ein gutes Beispiel für das Einsatzgebiet von Squid-Caches ist Wikipedia. Derzeit (Stand Dezember 2010) hat das Wikimedia-Projekt zirka 115 Squids weltweit im Einsatz. Diese Reverse Proxys halten viele Seiten im Speicher, damit häufige oder wiederholte Anfragen nicht immer von den Web- und Datenbankservern bearbeitet werden müssen. Diese Systeme bedienen hauptsächlich Seitenaufrufe von unangemeldeten Benutzern und halten über 75 % der Datenanfragen von den Webservern fern; die Effizienz der Webserver wird durch die Squid-Caches also mehr als vervierfacht.

## Geschichte

Squid wurde ursprünglich von Duane Wessels im Rahmen des Harvest project der University of Colorado at Boulder als der „Harvest object cache“ entwickelt. Weitere Arbeit an der Software wurde an der University of California, San Diego vorgenommen und mit zwei Zuschüssen der National Science Foundation finanziert. Duane Wessels führte eine Projektabspaltung von der letzten nicht-kommerziellen Version von Harvest durch und gab diesem Zweig den heutigen Namen Squid, um Verwechslung mit der anderen, kommerziell weitergeführten Version zu vermeiden, die sich Cached 2.0 nannte, aus der wiederum NetCache entwickelt wurde. Version 1.0.0 von Squid wurde im Juli 1996 veröffentlicht.
Squid wird mittlerweile fast ausschließlich in freiwilliger Arbeit weiterentwickelt.

## Grafische Benutzeroberflächen

Es existieren grafische Benutzeroberflächen (GUI) zur Administration des Servers, zum Beispiel:
* GADMIN SQUID als Teil der Sammlung GAdmintools, geschrieben in C/GTK+ für Linux-Desktops wie zum Beispiel Gnome oder KDE
* SquidMan für macOS
* Webmin für die Online-Administration von Squid