21 Squid als Reverse Proxy

21.1 Einleitung

Obwohl Squid hauptsächlich als Forward-Proxy verwendet wird, kann es auch als Reverse-Proxy konfiguriert werden. Ein Reverse-Proxy fungiert als Vermittler für Anfragen aus dem Internet an interne Server. Er kann zur Lastverteilung, SSL/TLS-Termination und zum Schutz der internen Server eingesetzt werden. Hier sind die Schritte zur Einrichtung von Squid als Reverse Proxy auf einem Linux-Server.

21.2 Schritt 1: Installation von Squid

21.2.1 Auf Debian-basierten Systemen (z.B. Ubuntu)

sudo apt-get update
sudo apt-get install squid

21.2.2 Auf Red Hat-basierten Systemen (z.B. CentOS)

sudo yum update
sudo yum install squid

21.3 Schritt 2: Grundkonfiguration von Squid

Die Hauptkonfigurationsdatei von Squid befindet sich in der Regel unter /etc/squid/squid.conf. Sie müssen diese Datei bearbeiten, um Squid als Reverse Proxy einzurichten.

21.3.1 Öffnen Sie die Konfigurationsdatei

sudo nano /etc/squid/squid.conf

21.3.2 Konfigurieren der grundlegenden Einstellungen

21.3.2.1 Netzwerk-Schnittstellen und Ports

Stellen Sie sicher, dass Squid auf dem richtigen Port für eingehende HTTP/HTTPS-Anfragen lauscht. Dies kann beispielsweise Port 80 für HTTP und Port 443 für HTTPS sein.

http_port 80 accel vhost allow-direct
https_port 443 cert=/etc/squid/ssl_cert/mycert.pem key=/etc/squid/ssl_cert/mykey.pem accel vhost allow-direct

21.3.2.2 Definieren von Backend-Servern

Sie müssen die internen Server (Backend-Server) definieren, auf die die Anfragen weitergeleitet werden sollen.

cache_peer backend1.example.com parent 80 0 no-query originserver name=backend1
cache_peer backend2.example.com parent 80 0 no-query originserver name=backend2

21.3.2.3 Konfigurieren von ACLs und Zugriffskontrollregeln

Definieren Sie Zugriffskontrolllisten (ACLs) und Zugriffskontrollregeln, um den Zugriff zu steuern.

acl our_sites dstdomain .example.com
http_access allow our_sites
http_access deny all

21.3.2.4 Beispielkonfiguration

Eine einfache Beispielkonfiguration könnte wie folgt aussehen:

# Netzwerk-Schnittstellen und Ports
http_port 80 accel vhost allow-direct
https_port 443 cert=/etc/squid/ssl_cert/mycert.pem key=/etc/squid/ssl_cert/mykey.pem accel vhost allow-direct

# Definieren der Backend-Server
cache_peer backend1.example.com parent 80 0 no-query originserver name=backend1
cache_peer backend2.example.com parent 80 0 no-query originserver name=backend2

# Zugriffskontrolllisten und Zugriffskontrollregeln
acl our_sites dstdomain .example.com
http_access allow our_sites
http_access deny all

# Weiterleitungsregeln
cache_peer_access backend1 allow our_sites
cache_peer_access backend2 allow our_sites

21.3.3 SSL/TLS-Konfiguration

Wenn Sie HTTPS verwenden, müssen Sie die SSL/TLS-Zertifikate konfigurieren. Stellen Sie sicher, dass die Pfade zu Ihrem Zertifikat und Ihrem privaten Schlüssel korrekt sind.

https_port 443 cert=/etc/squid/ssl_cert/mycert.pem key=/etc/squid/ssl_cert/mykey.pem accel vhost allow-direct

21.3.4 Speichern und Schließen der Konfigurationsdatei

21.4 Schritt 3: Starten und Überprüfen des Squid-Dienstes

21.4.1 Starten des Squid-Dienstes

sudo systemctl start squid

21.4.2 Überprüfen, ob Squid beim Systemstart gestartet wird

sudo systemctl enable squid

21.4.3 Überprüfen des Status des Squid-Dienstes

sudo systemctl status squid

Der Status sollte anzeigen, dass der Dienst läuft und keine Fehler aufgetreten sind.

21.5 Schritt 4: Testen der Konfiguration

21.5.1 Testen mit einem Webbrowser

Öffnen Sie einen Webbrowser und geben Sie die URL Ihrer Squid-Proxy-Adresse ein. Die Anfragen sollten an die konfigurierten Backend-Server weitergeleitet werden.

21.5.2 Überprüfen der Log-Dateien

Sie können die Squid-Log-Dateien überprüfen, um sicherzustellen, dass die Anfragen korrekt weitergeleitet werden:

sudo tail -f /var/log/squid/access.log

21.6 Zusammenfassung

Mit diesen Schritten können Sie Squid als Reverse Proxy einrichten. Obwohl Nginx oder Traefik häufiger als Reverse Proxies verwendet werden, bietet Squid eine flexible und leistungsfähige Alternative für die Verwaltung eingehender Anfragen und die Weiterleitung an interne Server.