Squid Proxy unter Ubuntu 24.04 installieren und konfigurieren
Proxy-Server sind Serveranwendungen, die als Vermittler zwischen einem Endnutzer und Ressourcen im Internet arbeiten. Werden Anfragen über einen Proxy-Server geleitet, lässt sich der Webverkehr für verschiedene Zwecke wie Datenschutz, Sicherheit und Caching steuern und überwachen. Beispielsweise können Webanfragen über eine andere IP-Adresse als die eigene gesendet werden. Ein Proxy kann außerdem dabei helfen zu untersuchen, wie Webseiten an unterschiedlichen Standorten ausgeliefert werden, oder die Auswirkungen bestimmter Formen der Überwachung und Drosselung des Webverkehrs zu reduzieren.
Squid ist ein etablierter, weitverbreiteter und quelloffener HTTP-Proxy. In dieser Anleitung installierst und konfigurierst du Squid als HTTP-Proxy auf einem Ubuntu-24.04-LTS-Server. Die beschriebenen Schritte orientieren sich an aktuellen Paketversionen, Konfigurationspfaden und bewährten Vorgehensweisen für moderne Ubuntu-Systeme.
Zusätzlich sicherst du den Zugriff auf den Proxy mit Squid-Zugriffsregeln und einer Basic-Authentifizierung ab, beschränkst den Netzwerkzugriff mithilfe einer Firewall und überprüfst die Proxy-Verbindung von einem Client aus. Anschließend erfährst du, wann ein SOCKS5-Proxy wie Dante möglicherweise besser geeignet ist, wie sich Squid von anderen gängigen Proxy-Lösungen unterscheidet und welche häufigen Fragen beim Betrieb und bei der Fehlerbehebung von Squid auftreten.
Frontend-Anwendungen, die auf GitHub gespeichert sind, können außerdem über eine verwaltete Anwendungsplattform bereitgestellt werden, sodass die Plattform die Skalierung der Anwendung übernehmen kann.
Wichtige Erkenntnisse
- Squid ist ein Forward Proxy für HTTP- und HTTPS-Verkehr und eignet sich dadurch für die Steuerung und Überwachung von Webzugriffen sowie optional für Caching in Teams oder Netzwerken.
- Eine sichere Squid-Installation benötigt mehrere Schutzebenen. Nutze ACLs und Authentifizierung in der Squid-Konfiguration und beschränke gleichzeitig eingehende Verbindungen über eine Firewall, damit kein offen zugänglicher Proxy entsteht.
- Squid verarbeitet Zugriffsregeln nacheinander. Deshalb ist die Reihenfolge der
http_access-Direktiven entscheidend. Spezifische Allow- und Deny-Regeln sollten zuerst stehen, während eine abschließende Deny-All-Regel am Ende verbleibt, damit nicht unbeabsichtigt Zugriff gewährt wird. - Vor einem Neustart von Squid solltest du die Syntax der Konfiguration überprüfen. Dadurch lassen sich Fehler erkennen, bevor sie einen fehlgeschlagenen Neustart oder eine Unterbrechung des Dienstes verursachen.
- Mit einem Client-Werkzeug wie
curllässt sich schnell prüfen, ob der Proxy einschließlich Authentifizierung und HTTPS-CONNECT-Verbindungen korrekt funktioniert, bevor Browser oder andere Anwendungen konfiguriert werden. - Squid ist kein SOCKS-Proxy. Wenn Anwendungen SOCKS benötigen oder Protokolle außerhalb von HTTP über einen Proxy geleitet werden sollen, kann ein SOCKS5-Server wie Dante ergänzend oder alternativ eingesetzt werden.
- Unterschiedliche Proxy-Technologien erfüllen unterschiedliche Aufgaben. Reverse Proxies wie Nginx und HAProxy steuern eingehenden Datenverkehr zu Backend-Diensten, während Squid für die Verwaltung des ausgehenden Client-Verkehrs ausgelegt ist.
- Protokolldateien und grundlegende Dienstprüfungen liefern wichtige Informationen zum laufenden Betrieb. Daher ist es hilfreich zu wissen, wo Squid seine Logs speichert und wie sich Dienststatus und verwendeter Port kontrollieren lassen.
Voraussetzungen
Für diese Anleitung benötigst du:
- Einen Ubuntu-24.04-LTS-Server und einen Benutzer ohne Root-Rechte, der über
sudo-Berechtigungen verfügt. Ein standardmäßiges initiales Ubuntu-Server-Setup kann verwendet werden, um einen Benutzer mit diesen Berechtigungen einzurichten.
In dieser Anleitung wird der Domainname your_domain verwendet. Ersetze ihn durch deinen eigenen Domainnamen oder die IP-Adresse deines Servers.
Schritt 1 – Squid Proxy installieren
Squid kann für deutlich mehr Aufgaben eingesetzt werden als lediglich für das Weiterleiten des ausgehenden Datenverkehrs eines einzelnen Benutzers. In größeren Serverumgebungen kann Squid Bestandteil eines verteilten Caching-Systems, einer Load-Balancing-Struktur oder einer anderen Routing-Architektur sein. Einige Ansätze, bei denen Proxy-Server früher intensiv für die horizontale Skalierung eingesetzt wurden, sind heute weniger verbreitet, da Container-Orchestrierungsplattformen wie Kubernetes eine unabhängige Verteilung verschiedener Anwendungskomponenten ermöglichen. Gleichzeitig werden Proxy-Server zunehmend von einzelnen Nutzern verwendet, um Webanfragen aus Datenschutzgründen umzuleiten. Dieser Hintergrund ist beim Einsatz etablierter Open-Source-Proxy-Software hilfreich, da solche Programme häufig eine große Zahl von Funktionen bereitstellen, von denen einige weniger intensiv weiterentwickelt werden. Die Einsatzgebiete von Proxy-Servern haben sich im Laufe der Zeit verändert, die grundlegende Technologie ist jedoch weitgehend gleich geblieben.
Aktualisiere zunächst als Benutzer ohne Root-Rechte den Paketindex und installiere Squid:
sudo apt update
sudo apt install squid
Nach der Installation richtet Squid automatisch einen Hintergrunddienst ein und startet diesen. Überprüfe mit folgendem Befehl, ob der Dienst ordnungsgemäß ausgeführt wird:
systemctl status squid
Output
● squid.service - Squid Web Proxy Server
Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-04-24 02:07:21 EDT; 19s ago
Docs: man:squid(8)
Process: 3133998 ExecStartPre=/usr/sbin/squid --foreground -z (code=exited, status=0/SUCCESS)
Main PID: 3134009 (squid)
Tasks: 4 (limit: 4653)
Memory: 17.7M (peak: 18.5M)
CPU: 244ms
CGroup: /system.slice/squid.service
├─3134009 /usr/sbin/squid --foreground -sYC
├─3134016 "(squid-1)" --kid squid-1 --foreground -sYC
├─3134017 "(logfile-daemon)" /var/log/squid/access.log
└─3134019 "(pinger)"
Standardmäßig verhindert Squid, dass externe Clients eine Verbindung zum Proxy herstellen. Damit ausgewählte entfernte Clients zugreifen können, musst du die zentrale Konfigurationsdatei unter /etc/squid/squid.conf bearbeiten. Öffne sie mit nano oder einem anderen Texteditor:
sudo nano /etc/squid/squid.conf
Die standardmäßige Squid-Konfigurationsdatei ist sehr umfangreich und enthält zahlreiche verfügbare Einstellungen. Viele davon sind deaktiviert, indem am Anfang der jeweiligen Zeile ein #-Zeichen steht. Die betreffende Zeile ist damit auskommentiert. In der Regel ist es am einfachsten, die Datei nach den Einstellungen zu durchsuchen, die geändert werden sollen. Drücke in nano Ctrl+W, gib den gewünschten Suchbegriff ein und bestätige mit Enter. Falls der Begriff mehrfach vorkommt, kannst du mit Alt+W durch die weiteren Treffer wechseln.
Suche zunächst nach der Zeile mit http_access deny all. In diesem Bereich befindet sich ein Abschnitt, der die standardmäßigen Squid-Zugriffsregeln beschreibt:
/etc/squid/squid.conf
. . .
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost
# And finally deny all other access to this proxy
http_access deny all
. . .
Diese Konfiguration zeigt das standardmäßige Verhalten: Verbindungen über localhost sind erlaubt, alle anderen Clients werden abgewiesen. Squid verarbeitet diese Direktiven der Reihe nach. Deshalb sollte die Regel deny all am Ende des Abschnitts für die Zugriffskontrolle stehen. Würdest du diese Regel in allow all ändern, könnte grundsätzlich jeder den Proxy verwenden, was in der Regel nicht gewünscht ist. Stattdessen definierst du eine ACL mit der IP-Adresse, die Zugriff erhalten soll, und platzierst diese oberhalb der localhost-Regel:
/etc/squid/squid.conf
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
# Example rule allowing access from your local networks.
acl localnet src your_ip_address
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost
- acl steht für Access Control List und bezeichnet eine verbreitete Methode zum Definieren von Zugriffs- und Berechtigungsregeln.
- localnet ist in diesem Beispiel der Name der definierten ACL.
- src bezeichnet die Quelle, von der eine Anfrage innerhalb dieser ACL stammt, in diesem Fall also deine IP-Adresse.
Zusätzlich musst du http_access allow localnet hinzufügen oder die entsprechende Zeile auskommentieren, damit die zuvor definierte ACL tatsächlich Zugriff auf den Proxy erhält.
Falls du deine öffentliche IP-Adresse nicht kennst, kann ein Dienst wie What’s my IP anzeigen, von welcher Adresse deine Verbindung nach außen erscheint. Nachdem du die Änderungen vorgenommen hast, speichere und schließe die Datei. In nano drückst du dazu Ctrl+X, bestätigst anschließend mit Y und drückst danach Enter.
Squid könnte an dieser Stelle bereits neu gestartet und verwendet werden. Vorher sollten jedoch weitere Sicherheitsmaßnahmen eingerichtet werden.
Schritt 2 – Squid absichern
Die meisten Proxy-Server und Client-Anwendungen mit Proxy-Unterstützung, darunter auch Webbrowser, unterstützen unterschiedliche Authentifizierungsmethoden. Dazu können gemeinsam verwendete Schlüssel oder externe Authentifizierungsserver gehören. Besonders verbreitet ist jedoch die Anmeldung mit Benutzername und Passwort. Squid kann Benutzername-Passwort-Kombinationen verwenden, die mit Standardwerkzeugen unter Linux erstellt werden. Diese Authentifizierung kann zusätzlich zu einer Einschränkung über IP-Adressen oder als alternative Schutzmaßnahme eingesetzt werden. Dafür erstellst du die Datei /etc/squid/passwords und konfigurierst Squid so, dass diese Datei verwendet wird.
Installiere zunächst die benötigten Dienstprogramme aus dem Apache-Projekt, damit ein von Squid unterstütztes Werkzeug zur Passworterstellung verfügbar ist:
sudo apt install apache2-utils
Dieses Paket enthält das Programm htpasswd, mit dem sich Zugangsdaten für einen Squid-Benutzer erzeugen lassen. Die Benutzernamen von Squid sind unabhängig von den Benutzerkonten des Betriebssystems. Du kannst daher bei Bedarf denselben Namen verwenden wie für dein Systemkonto. Während der Ausführung wirst du außerdem zur Eingabe eines Passworts aufgefordert:
sudo htpasswd -c /etc/squid/passwords your_squid_username
Der Befehl speichert den Benutzernamen zusammen mit einem Hash des Passworts in /etc/squid/passwords. Squid verwendet diese Datei anschließend als Authentifizierungsquelle. Mit cat kannst du den Inhalt danach kontrollieren:
sudo cat /etc/squid/passwords
Output
sammy:$apr1$Dgl.Mtnd$vdqLYjBGdtoWA47w4q1Td.
Nachdem die Zugangsdaten erfolgreich gespeichert wurden, muss Squid so eingerichtet werden, dass die neue Datei /etc/squid/passwords verwendet wird. Öffne dafür die Squid-Konfiguration erneut mit nano oder einem anderen Editor und ergänze die folgenden Direktiven:
sudo nano /etc/squid/squid.conf
/etc/squid/squid.conf
…
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
include /etc/squid/conf.d/*
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
# Example rule allowing access from your local networks.
acl localnet src your_ip_address
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localhost
http_access allow authenticated localnet
# And finally deny all other access to this proxy
http_access deny all
…
Hinweis: Unter Ubuntu 24.04 befinden sich die Authentifizierungs-Hilfsprogramme von Squid unter /usr/lib/squid/. Ältere Anleitungen verwenden möglicherweise noch /usr/lib/squid3/, was auf neueren Systemen nicht mehr funktioniert.
Diese Direktiven weisen Squid an, Passwort-Hashes aus der neuen Datei passwords zu lesen und dafür den Authentifizierungsmechanismus basic_ncsa_auth zu verwenden. Gleichzeitig wird festgelegt, dass für den Proxy-Zugriff eine erfolgreiche Authentifizierung erforderlich ist. Die Squid-Dokumentation enthält weitere Informationen zu diesem und zu anderen verfügbaren Authentifizierungsverfahren. Nachdem die Direktiven ergänzt wurden, kann der Dienst mit der aktualisierten Konfiguration neu gestartet werden.
Da die Regel http_access allow authenticated localnet beide ACLs enthält, muss ein Client sowohl aus dem unter localnet definierten IP-Bereich stammen als auch gültige Zugangsdaten bereitstellen.
Falls du im vorherigen Schritt http_access allow localnet aktiviert hast, entferne diese Regel oder kommentiere sie vor dem Neustart von Squid aus. Andernfalls könnten alle Clients innerhalb der localnet-ACL auch ohne Authentifizierung auf den Proxy zugreifen.
Bevor der Squid-Dienst neu gestartet wird, solltest du die Konfiguration auf Syntaxfehler prüfen. Dadurch lässt sich vermeiden, dass der Dienst wegen einer ungültigen Direktive nicht mehr startet.
Führe dazu folgenden Befehl aus:
sudo squid -k parse
Enthält die Konfigurationsdatei Fehler, zeigt Squid diese in der Ausgabe an. Werden keine Fehler gemeldet, kannst du den Dienst neu starten:
sudo systemctl restart squid
Der Neustart kann einen kurzen Moment benötigen.
Neben der Zugriffskontrolle innerhalb von Squid sollte auch der Netzwerkzugriff auf den Proxy durch eine Firewall begrenzt werden. Unter Ubuntu wird dafür häufig UFW, die Uncomplicated Firewall, eingesetzt.
Wenn Datenverkehr auf Port 3128 ohne Einschränkungen erlaubt wird, kann der Server zu einem Open Proxy werden. Unbefugte Nutzer könnten den Dienst missbrauchen, wodurch die IP-Adresse des Servers möglicherweise auf Sperrlisten landet.
Eine Regel für uneingeschränkten Zugriff würde beispielsweise so aussehen:
sudo ufw allow 3128
Stattdessen sollte der Zugriff auf vertrauenswürdige Client-IP-Adressen begrenzt werden:
sudo ufw allow from your_client_ip to any port 3128
Zum Beispiel:
sudo ufw allow from 203.0.113.10 to any port 3128
Lade UFW anschließend neu, damit die Regel angewendet wird:
sudo ufw reload
Die aktuell aktiven Firewall-Regeln kannst du folgendermaßen überprüfen:
sudo ufw status
Die Kombination aus UFW-Regeln und Squid-ACLs bietet eine zusätzliche Sicherheitsebene, da der Zugriff sowohl auf Netzwerkebene als auch innerhalb der Proxy-Anwendung eingeschränkt wird.
Der Proxy kann nun von einem Client aus getestet werden.
Schritt 3 – Eine Verbindung über Squid herstellen
Zum Testen des Squid-Proxys verwendest du das Kommandozeilenprogramm curl, das häufig zum Senden unterschiedlicher Webanfragen eingesetzt wird. Wenn überprüft werden soll, ob eine Proxy-Verbindung grundsätzlich auch in einem Browser funktionieren müsste, ist ein vorheriger Test mit curl eine effektive Methode zur Fehleranalyse. Führe den folgenden Befehl auf deinem lokalen Computer aus. Moderne Windows-, macOS- und Linux-Systeme enthalten curl in der Regel bereits, sodass du den Befehl in einem lokalen Terminal oder einer Shell verwenden kannst:
curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 http://www.google.com/
Die Option -x teilt curl mit, welcher Proxy verwendet werden soll. In diesem Beispiel kommt das Schema http:// zum Einsatz, außerdem werden Benutzername und Passwort für den Proxy angegeben. Anschließend wird eine Anfrage an eine bekannte funktionierende Webseite wie google.com weitergeleitet. Bei erfolgreicher Verbindung sollte die Ausgabe ungefähr folgendermaßen aussehen:
Output
* Trying 138.197.103.77...
* TCP_NODELAY set
* Connected to 138.197.103.77 (138.197.103.77) port 3128 (#0)
* Proxy auth using Basic with user 'sammy'
> GET http://www.google.com/ HTTP/1.1
Auch HTTPS-Webseiten können ohne zusätzliche Änderungen an der Squid-Konfiguration über den Proxy aufgerufen werden. HTTPS-Verbindungen über einen Proxy verwenden dafür die Methode CONNECT, wodurch die SSL-Kommunikation zwischen Client und Zielserver bestehen bleibt:
curl -v -x http://your_squid_username:your_squid_password@your_server_ip:3128 https://www.google.com/
Output
* Trying 138.197.103.77...
* TCP_NODELAY set
* Connected to 138.197.103.77 (138.197.103.77) port 3128 (#0)
* allocate connect buffer!
* Establish HTTP proxy tunnel to www.google.com:443
* Proxy auth using Basic with user 'sammy'
> CONNECT www.google.com:443 HTTP/1.1
> Host: www.google.com:443
> Proxy-Authorization: Basic c2FtbXk6c2FtbXk=
> User-Agent: curl/7.55.1
> Proxy-Connection: Keep-Alive
>
< HTTP/1.1 200 Connection established
<
* Proxy replied OK to CONNECT request
* CONNECT phase completed!
Die Zugangsdaten, die mit curl erfolgreich getestet wurden, können anschließend auch in anderen Anwendungen verwendet werden, die HTTP-Proxys unterstützen.
SOCKS5 Proxy unter Ubuntu als Alternative zu Squid einrichten
Squid wurde speziell für die Weiterleitung von HTTP- und HTTPS-Verkehr entwickelt. Einige Anwendungen benötigen jedoch ein flexibleres Proxy-Protokoll wie SOCKS5. Anders als ein HTTP-Proxy arbeitet SOCKS5 auf einer tieferen Ebene des Netzwerkstacks und kann dadurch eine größere Bandbreite an Datenverkehr verarbeiten, darunter TCP- und UDP-Verbindungen. SOCKS5 eignet sich deshalb unter anderem für SSH-Tunneling, Torrent-Anwendungen und Programme, die HTTP-Proxys nicht direkt unterstützen.
Squid besitzt keine native SOCKS5-Unterstützung. Stattdessen kann unter Ubuntu ein eigenständiger SOCKS-Proxy-Server wie Dante eingesetzt werden. Dante ist leichtgewichtig, wird aktiv gepflegt und häufig für SOCKS-Proxy-Verbindungen verwendet.
Dante SOCKS Proxy installieren
Aktualisiere den Paketindex und installiere anschließend das Dante-Server-Paket:
sudo apt update
sudo apt install dante-server
Dadurch wird der Dante-Daemon danted installiert, der den eigentlichen SOCKS5-Proxy-Dienst bereitstellt. Zusätzlich wird eine standardmäßige Konfigurationsdatei unter /etc/danted.conf eingerichtet. Wie Squid lässt sich auch Dante mit den üblichen systemd-Befehlen verwalten.
Grundlegende Dante-Konfiguration
Das Verhalten von Dante wird über die Datei /etc/danted.conf gesteuert, ähnlich wie Squid die Datei /etc/squid/squid.conf verwendet. Öffne die Dante-Konfiguration mit einem Texteditor deiner Wahl:
sudo nano /etc/danted.conf
Ersetze den vorhandenen Inhalt durch die folgende minimale Konfiguration:
logoutput: syslog
internal: 0.0.0.0 port = 1080
external: eth0
method: username none
user.notprivileged: nobody
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
}
pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
protocol: tcp udp
}
Diese Konfiguration enthält folgende Einstellungen:
internal: Diese Einstellung bestimmt die IP-Adresse und den Port, auf denen Dante eingehende Verbindungen annimmt. Mit0.0.0.0lauscht Dante auf allen Netzwerkschnittstellen. Der Port1080ist der üblicherweise verwendete SOCKS5-Port.external: Hier wird die Netzwerkschnittstelle festgelegt, die Dante für ausgehenden Datenverkehr verwendet. Ersetzeeth0durch die tatsächlich verwendete Schnittstelle deines Servers, beispielsweiseens3oderenp0s3. Mitip akannst du nach einer Schnittstelle mit einer aktiven IP-Adresse suchen und dadurch den passenden Namen ermitteln.method: Diese Einstellung definiert die von Dante akzeptierten Authentifizierungsmethoden. Mitusername nonesind sowohl Verbindungen mit Benutzername und Passwort als auch nicht authentifizierte Verbindungen möglich. In einer Produktionsumgebung solltenoneentfernt werden, wenn eine Authentifizierung verpflichtend sein soll.client passundpass: Diese Blöcke legen fest, welche Clients eine Verbindung herstellen dürfen und an welche Ziele beziehungsweise über welche Protokolle Datenverkehr weitergeleitet werden darf. In diesem Beispiel erlaubt0.0.0.0/0allen Clients den Zugriff und ermöglicht Proxy-Verbindungen zu beliebigen Zielen. Für Tests kann das sinnvoll sein, in einer Produktionsumgebung sollte der Zugriff jedoch auf vertrauenswürdige IP-Bereiche begrenzt werden.
Hinweis: Für eine höhere Sicherheit solltest du im Feld from anstelle von 0.0.0.0/0 nur die IP-Bereiche eintragen, denen tatsächlich Zugriff erlaubt werden soll.
Dante-Dienst starten und aktivieren
Nachdem du die Dante-Konfiguration gespeichert hast, starte den Dienst neu:
sudo systemctl restart danted
Aktiviere anschließend den automatischen Start beim Hochfahren des Servers:
sudo systemctl enable danted
Überprüfe danach den Status des Dienstes:
systemctl status danted
Wenn Dante ordnungsgemäß funktioniert, sollte der Dienststatus active (running) anzeigen und keine Fehlermeldungen enthalten.
SOCKS5-Verkehr in der Firewall erlauben
Wenn UFW aktiviert ist, muss der Zugriff auf den SOCKS5-Port in der Firewall freigegeben werden, bevor entfernte Clients den Proxy erreichen können.
Eine uneingeschränkte Regel, die Verbindungen von jeder IP-Adresse zulässt, würde so aussehen:
sudo ufw allow 1080
Sicherer ist es, ausschließlich vertrauenswürdige Clients zuzulassen:
sudo ufw allow from your_client_ip to any port 1080
Zum Beispiel:
sudo ufw allow from 203.0.113.10 to any port 1080
Lade die Firewall anschließend neu, damit die Änderungen übernommen werden:
sudo ufw reload
Diese Einschränkung ist wichtig, weil ein nicht geschützter SOCKS5-Server zu einem Open Proxy werden kann. Unbefugte Nutzer könnten einen solchen Proxy missbrauchen und dadurch möglicherweise verursachen, dass die IP-Adresse des Servers auf Sperrlisten gesetzt wird.
SOCKS5 Proxy testen
Mit curl kannst du von deinem lokalen Computer aus prüfen, ob der SOCKS5-Proxy ordnungsgemäß funktioniert:
curl -x socks5h://your_server_ip:1080 http://example.com
Das Schema socks5h weist curl an, die DNS-Auflösung über den Proxy-Server statt über den lokalen Computer durchzuführen. Dadurch kann die Privatsphäre verbessert werden, da lokale DNS-Anfragen nicht erkennen lassen, welche Domainnamen aufgerufen werden. Wenn die Anfrage erfolgreich ausgeführt wird und HTML-Inhalte zurückgegeben werden, funktioniert der SOCKS5-Proxy korrekt.
Wann SOCKS5 statt Squid verwendet werden sollte
SOCKS5 ist meist die geeignetere Wahl, wenn ein ausschließlich auf HTTP ausgelegter Proxy nicht genügend Flexibilität bietet. SOCKS5 eignet sich insbesondere dann, wenn Nicht-HTTP-Protokolle wie SSH, FTP oder benutzerdefinierter Anwendungsverkehr weitergeleitet werden müssen, die nicht über einen HTTP-Proxy funktionieren. Auch wenn eine Anwendung ausdrücklich SOCKS-Unterstützung benötigt oder ein protokollunabhängiger Proxy auf Transportebene erforderlich ist, der den durchgeleiteten Datenverkehr weder analysiert noch verändert, ist SOCKS5 eine passende Lösung.
Squid eignet sich dagegen besser für Datenverkehr, der hauptsächlich aus HTTP- und HTTPS-Anfragen besteht. Squid unterstützt Content-Caching und Bandbreitenoptimierung, wodurch wiederholt angeforderte Webressourcen effizienter bereitgestellt werden können. Das ACL-System ermöglicht darüber hinaus eine detaillierte Zugriffskontrolle und kann festlegen, welche Benutzer bestimmte Webseiten aufrufen dürfen und welche Zugriffsrichtlinien gelten.
In vielen produktiven Netzwerken können Squid und ein SOCKS5-Proxy parallel auf demselben Server oder innerhalb desselben Netzwerks betrieben werden. HTTP- und HTTPS-Anfragen lassen sich über Squid leiten, um von Caching und Richtlinienkontrolle zu profitieren, während andere Protokolle über SOCKS5 verarbeitet werden können, um eine breitere Protokollunterstützung zu erhalten.
Den richtigen Proxy auswählen
Squid ist weiterhin eine verbreitete Forward-Proxy-Lösung, insbesondere in Unternehmens- und Netzwerkumgebungen, in denen Kontrolle, Caching und Filterung des Datenverkehrs benötigt werden. Es stehen jedoch verschiedene weitere Proxy-Werkzeuge zur Verfügung, und die passende Lösung hängt vom jeweiligen Einsatzzweck ab.
Ein Vergleich von Squid mit anderen Proxy-Lösungen hilft dabei festzustellen, welche Technologie die Anforderungen der eigenen Umgebung am besten erfüllt.
Squid im Vergleich zu anderen Proxy-Lösungen
| Werkzeug | Proxy-Typ | Unterstützter Datenverkehr | Wichtige Funktionen | Geeigneter Einsatzzweck |
|---|---|---|---|---|
| Squid | Forward Proxy | HTTP, HTTPS | Caching, ACLs, Zugriffskontrolle, Logging | Unternehmens-Proxys, Bandbreitenoptimierung |
| Dante | SOCKS5 Proxy | TCP, UDP (protokollunabhängig) | Flexible Verarbeitung des Datenverkehrs, Proxying auf niedriger Netzwerkebene | Nicht-HTTP-Verkehr, Proxying für Anwendungen |
| Nginx | Reverse Proxy | HTTP, HTTPS | Load Balancing, SSL-Terminierung, Routing | Bereitstellung von Backend-Anwendungen |
| HAProxy | Reverse Proxy | TCP, HTTP | Leistungsfähiges Load Balancing, Failover | Verteilung großer Datenverkehrsmengen |
| Tinyproxy | Leichtgewichtiger Proxy | HTTP, HTTPS | Minimale Konfiguration, geringer Ressourcenverbrauch | Einfache oder ressourcenbeschränkte Umgebungen |
Beim Vergleich dieser Proxy-Lösungen sind insbesondere folgende Unterschiede relevant:
- Squid ist für Webverkehr optimiert: Squid eignet sich besonders gut für HTTP- und HTTPS-Proxying und bietet integriertes Content-Caching, wodurch sich die benötigte Bandbreite deutlich reduzieren kann. Das Access-Control-List-System ermöglicht detaillierte Regeln darüber, wer auf bestimmte Ressourcen zugreifen darf. Dadurch ist Squid besonders für Unternehmensumgebungen interessant, in denen Webzugriffsrichtlinien durchgesetzt und Bandbreitennutzung überwacht werden sollen.
- SOCKS5-Proxys wie Dante unterstützen mehr Protokolle: SOCKS5 ist nicht auf HTTP-bezogenen Datenverkehr beschränkt, sondern arbeitet auf Transportebene und kann zahlreiche TCP- und UDP-Verbindungen weiterleiten, ohne das zugrunde liegende Anwendungsprotokoll verstehen zu müssen. Dadurch eignet sich SOCKS5 für SSH-Verbindungen, Datenbankverkehr und benutzerdefinierte Protokolle, die nicht über einen HTTP-Proxy funktionieren. Im Gegensatz zu Squid bietet SOCKS5 allerdings kein HTTP-Content-Caching und keine vergleichbare Inhaltsfilterung.
- Reverse Proxies wie Nginx und HAProxy erfüllen eine andere Aufgabe: Ein Forward Proxy wie Squid unterstützt Clients beim Zugriff auf externe Ressourcen. Ein Reverse Proxy befindet sich dagegen vor Backend-Servern und verarbeitet eingehende Anfragen. Reverse Proxies werden normalerweise für Load Balancing, SSL-Terminierung und das Routing von Anfragen anhand von URL-Mustern eingesetzt. Für Webanwendungen und APIs, bei denen eingehender Datenverkehr gesteuert werden soll, wird deshalb üblicherweise ein Reverse Proxy statt eines Forward Proxys benötigt.
- Leichtgewichtige Proxys stellen Einfachheit über umfangreiche Funktionen: Werkzeuge wie Tinyproxy eignen sich für Situationen, in denen lediglich grundlegendes HTTP- oder HTTPS-Proxying erforderlich ist. Ihre Konfiguration ist meist einfacher und sie benötigen weniger Systemressourcen, bieten dafür jedoch in der Regel weniger Möglichkeiten für Caching, detailliertes Logging und komplexe ACL-Regeln als Squid.
Wann sollte Squid verwendet werden?
Squid ist eine geeignete Lösung, wenn du Folgendes benötigst:
- Zentrale Kontrolle über ausgehenden Webverkehr: Einheitliche Regeln für den Webzugriff mehrerer Nutzer anwenden und gleichzeitig ausgehende Webanfragen protokollieren und überwachen.
- Content-Caching zur Reduzierung des Bandbreitenverbrauchs: Häufig abgerufene Inhalte wie Softwarepakete, Systemupdates oder populäre Webseiten aus dem Cache bereitstellen, anstatt sie bei jeder Anfrage erneut herunterzuladen.
- Detaillierte Zugriffsregeln mithilfe von ACLs: Präzise bestimmen, welche Benutzer bestimmte Domains oder URL-Muster erreichen dürfen, einschließlich Authentifizierungsanforderungen und zeitabhängiger Regeln.
- Eine Proxy-Lösung für größere Umgebungen: Hunderte oder Tausende Verbindungen effizient verarbeiten und gleichzeitig umfassende Protokollierungs- und Überwachungsmöglichkeiten für größere Teams oder Netzwerke bereitstellen.
Wann sollten Alternativen in Betracht gezogen werden?
Eine andere Proxy-Lösung kann sinnvoller sein, wenn:
- Nicht-HTTP-Datenverkehr über einen Proxy geleitet werden soll: Squid konzentriert sich auf HTTP und HTTPS. Für Protokolle wie SSH, FTP, SMTP oder Datenbankverbindungen wird normalerweise eine Lösung auf Transportebene benötigt, beispielsweise ein SOCKS5-Proxy wie Dante.
- Eingehender Datenverkehr an Backend-Dienste verteilt werden soll: Forward Proxies unterstützen Clients beim Zugriff auf externe Ressourcen. Soll eingehender Webverkehr auf mehrere Backend-Server verteilt oder SSL terminiert werden, eignet sich stattdessen ein Reverse Proxy wie Nginx oder HAProxy.
- Eine kleinere und einfachere Konfiguration bevorzugt wird: Wenn nur grundlegendes HTTP- oder HTTPS-Proxying für eine einzelne Person oder wenige Benutzer erforderlich ist und weder Caching noch detaillierte ACLs benötigt werden, kann ein schlanker Proxy wie Tinyproxy einfacher einzurichten und zu verwalten sein.
Squid bleibt eine leistungsfähige und relevante Lösung zur Steuerung von Webverkehr in modernen Umgebungen. Andere Proxy-Technologien lösen in vielen Fällen andere Aufgaben, anstatt Squid vollständig zu ersetzen. Welche Lösung am besten geeignet ist, hängt von den zu verarbeitenden Protokollen und dem benötigten Maß an Kontrolle ab.
Häufig gestellte Fragen zum Squid Proxy
1. Wie konfiguriere ich einen Squid Proxy unter Ubuntu?
Nachdem du Squid beispielsweise mit sudo apt install squid installiert hast, bearbeitest du /etc/squid/squid.conf, um ACLs anzulegen, den gewünschten Listen-Port mit http_port festzulegen und den Zugriff über http_access-Regeln zu steuern. Prüfe anschließend die Konfiguration mit sudo squid -k parse und übernimm die Änderungen mit sudo systemctl restart squid.
2. Wie richte ich einen SOCKS5 Proxy unter Ubuntu ein?
Squid unterstützt SOCKS5 nicht direkt. Für SOCKS5-Verbindungen kannst du einen dedizierten SOCKS-Server wie Dante verwenden, dessen Dienst normalerweise danted heißt, oder dynamisches SSH-Port-Forwarding mit einem Befehl wie ssh -D 1080 user@your_server_ip einsetzen. Squid arbeitet als HTTP- und HTTPS-Forward-Proxy, während SOCKS5 unabhängig vom jeweiligen Anwendungsprotokoll funktioniert.
3. Wie konfiguriere ich einen Proxy systemweit unter Ubuntu Linux?
Definiere http_proxy und https_proxy sowie optional no_proxy in /etc/environment. Auf GNOME-Desktops können Proxy-Einstellungen außerdem unter Settings -> Network -> Network Proxy festgelegt werden. Für APT lassen sich Proxy-Einstellungen unter /etc/apt/apt.conf.d/ hinterlegen, beispielsweise in /etc/apt/apt.conf.d/proxy.conf.
4. Wird Squid Proxy weiterhin verwendet?
Ja. Squid wird weiterhin aktiv gepflegt und für Caching, Zugriffskontrolle und Auditing in Unternehmensnetzwerken sowie automatisierten Umgebungen eingesetzt. Optional unterstützt Squid außerdem HTTPS-Inspektion über SSL Bump. Dafür sind jedoch eine sorgfältige Zertifikatsverwaltung und klar definierte Sicherheitsrichtlinien erforderlich.
5. Welchen Port verwendet Squid Proxy standardmäßig?
Squid verwendet standardmäßig Port 3128. Dieser wird normalerweise über http_port 3128 in der Datei squid.conf festgelegt. Wird der Port geändert, müssen auch die entsprechenden UFW-, iptables- oder anderen Firewall-Regeln so angepasst werden, dass der neue Port zugelassen ist.
6. Wie überprüfe ich, ob Squid Proxy unter Ubuntu läuft?
Mit sudo systemctl status squid kannst du den Status des Dienstes prüfen. Zusätzlich lässt sich mit sudo ss -tlnp | grep squid kontrollieren, ob Squid auf Verbindungen wartet. Alternativ kannst du überprüfen, ob Port 3128 geöffnet ist und auf eingehende Verbindungen lauscht.
7. Wie beschränke ich mit Squid den Zugriff auf bestimmte Webseiten?
Definiere in squid.conf eine dstdomain-ACL, beispielsweise acl blocked_sites dstdomain .example.com, und blockiere sie anschließend mit http_access deny blocked_sites. Die Deny-Regel sollte oberhalb der dazugehörigen Allow-Regeln stehen. Starte Squid nach dem Speichern der Konfiguration neu.
8. Wie aktiviere ich Squid-Logging und wo befinden sich die Logdateien?
Squid speichert Anfragen standardmäßig in /var/log/squid/access.log. Cache- und dienstbezogene Informationen befinden sich in /var/log/squid/cache.log. Den laufenden Datenverkehr kannst du mit sudo tail -f /var/log/squid/access.log verfolgen. Dienstmeldungen lassen sich mit journalctl -u squid anzeigen.
Fazit
In dieser Anleitung hast du Squid als quelloffenen Proxy-Server für HTTP- und HTTPS-Verkehr installiert und konfiguriert. Zusätzlich wurden Zugriffsbeschränkungen eingerichtet, die Konfiguration auf Fehler geprüft und die Verbindung von einem Client-System aus getestet. Proxy-Unterstützung ist bereits seit vielen Jahren in zahlreichen Anwendungen und Betriebssystemen integriert, wodurch sich eine solche Konfiguration in unterschiedlichsten Umgebungen einsetzen lässt.
Wenn Nicht-HTTP-Verkehr über einen Proxy geleitet werden muss oder eine Anwendung ausdrücklich SOCKS-Unterstützung benötigt, kann Squid mit einem SOCKS5-Proxy kombiniert werden. Dante kann parallel zu Squid betrieben werden, sodass unterschiedliche Arten von Netzwerkverkehr jeweils über die für das betreffende Protokoll geeignete Proxy-Technologie verarbeitet werden.


