Squid-Proxy unter Ubuntu 24.04: Setup, Auth und squid.conf

Veröffentlicht:

14 Min. Lesezeit

Acar Diveroli
Autor: Acar Diveroli
Isometrischer Turm aus Cache-Würfeln, mittig ein blauer HIT-Würfel; auf den Bahnen ACL, AUTH, PARENT PEER und Port 3128

Ein Datenteam aus fünf Personen möchte, dass seine Testserver Pakete von einer Stelle herunterladen und die API eines Lieferanten jedes Mal von derselben IP-Adresse aus erreichen. Jemand installiert Squid in zehn Minuten auf einem kleinen VPS. Eine Woche später ist access.log voller Adressen, die niemand kennt: Die Konfiguration stammte aus einem Forenbeitrag, der mit http_access allow all endete, und jetzt schicken Fremde ihren Verkehr über die IP des Teams ins Netz.

Diese Anleitung installiert Squid unter Ubuntu 24.04 ohne diesen Fehler. Sie erklärt, was Squid ist, in welcher Reihenfolge es eine Anfrage prüft und was ein einzelner Server leisten kann und was nicht. Danach folgen eine vollständige Konfigurationsdatei mit IP-Allowlist, Anmeldung, Festplatten-Cache und Header-Einstellungen, ein übergeordneter Proxy mit cache_peer und die Befehle, mit denen Sie das Ganze testen.

Was ist ein Squid-Proxy?

Squid ist ein Open-Source-Proxy-Server mit Cache. Ein Proxy-Server sendet Anfragen in Ihrem Auftrag und reicht die Antworten zurück (Was ist ein Proxy-Server?). Squid läuft meist als Forward-Proxy, der für die Clients hinter ihm arbeitet, nicht als Reverse-Proxy vor einer Website (Forward-Proxy und Reverse-Proxy). Er überträgt HTTP, HTTPS über CONNECT-Tunnel und FTP und bringt Zugriffsregeln, Helper-Programme für die Anmeldung, einen Cache und ein Anfrageprotokoll mit.

Die aktuelle stabile Version des Squid-Projekts ist 7.7, veröffentlicht am 24. August 2026, und die Entwickler unterstützen nur die jeweils neueste stabile Version. Ubuntu 24.04 liefert Squid 6.14 aus, als Paket 6.14-0ubuntu0.24.04.4 in noble-updates, und die Sicherheitskorrekturen kommen über die normalen Ubuntu-Updates. Diese Anleitung arbeitet mit diesem Paket.

Wie verarbeitet Squid eine Anfrage?

Die Reihenfolge dieser Schritte erklärt die meisten Konfigurationsfehler.

  1. Der Client verbindet sich mit dem Port aus http_port, in der Konfiguration von Ubuntu 3128.
  2. Squid liest die http_access-Zeilen von oben nach unten. Die erste Zeile, deren Bedingungen alle zutreffen, entscheidet. Die Dokumentation zu http_access ergänzt: Passt keine Zeile, tut Squid das Gegenteil der letzten Zeile. Deshalb sollte jede Liste mit http_access deny all enden.
  3. Eine Regel, die eine Anmeldung verlangt, fragt danach. Erreicht Squid eine proxy_auth-Bedingung ohne gültige Zugangsdaten, antwortet er mit 407 Proxy Authentication Required (Proxy-Authentifizierung).
  4. Unverschlüsseltes HTTP wird im Cache gesucht. Eine frische gespeicherte Kopie ist ein Hit, und die Anfrage verlässt den Server nicht; alles andere ist ein Miss und wird von der Website geholt.
  5. HTTPS wird zum Tunnel. Nach einem erfolgreichen CONNECT example.com:443 leitet Squid nur noch verschlüsselte Bytes weiter. RFC 9110 nennt das „blind forwarding of data“, also blindes Weiterleiten von Daten. Squid kann die Seite deshalb weder zwischenspeichern noch innerhalb des Tunnels Header hinzufügen.
  6. Ein übergeordneter Proxy übernimmt, wenn Sie einen festlegen, mit cache_peer und never_direct.
  7. Squid schreibt eine Zeile in access.log mit Client, Ergebniscode, Größe, URL und Benutzername.

Was bietet Ihnen ein eigener Squid-Server und was nicht?

FrageEigener Squid (ein VPS)Kommerzieller Datacenter-ProxyResidential- oder rotierender Pool
Ausgangs-IPDie einzige Datacenter-IP des VPSDie Datacenter-IPs des Anbieters, bei Bedarf mehrereIPs von Heimanschlüssen, pro Anfrage oder Sitzung
StandortDie Stadt, in der der Server läuftEine Auswahl an Ländern des AnbietersEin Land, manchmal eine Stadt
WartungSie: Updates, Regeln, Passwörter, LogsDer Anbieter; Sie verwalten die ZugangsdatenDer Anbieter; Sie verwalten die Zugangsdaten
Cache und ZugriffskontrolleHTTP-Cache, Regeln, ein zentrales LogKein Cache; Benutzer im DashboardKein Cache; Benutzer im Dashboard

Squid gibt Ihnen die Kontrolle darüber, wer sich verbindet, was zwischengespeichert und was protokolliert wird. Eine zweite Adresse kann er Ihnen nicht geben: Eine Website, die Hunderte Anfragen pro Minute von dieser einen Datacenter-IP sieht, bremst sie aus oder sperrt sie (Residential- und Datacenter-Proxy im Vergleich).

Wie installieren Sie Squid unter Ubuntu 24.04?

apache2-utils bringt htpasswd für die Passwortdatei mit. Die schreibgeschützte Kopie der Originalkonfiguration empfiehlt auch der offizielle Leitfaden für Ubuntu Server.

bash
sudo apt update
sudo apt install squid apache2-utils
squid -v | head -n 1                       # die installierte Version
systemctl status squid --no-pager          # sollte "active (running)" melden

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original
sudo chmod a-w /etc/squid/squid.conf.original

# an welcher Stelle werden Ihre eigenen Regeln gelesen?
grep -n "include /etc/squid/conf.d" /etc/squid/squid.conf
grep -n "^http_access deny all" /etc/squid/squid.conf

Legen Sie Ihre Einstellungen in einer Datei unter /etc/squid/conf.d/ ab, damit Paket-Upgrades sie nicht anfassen. Die Debian-Paketierung, auf der Ubuntu aufbaut, setzt include /etc/squid/conf.d/*.conf unter den Kommentar INSERT YOUR OWN RULE(S) HERE: nach den Regeln, die unsichere Ports sperren, und vor der abschließenden Zeile http_access deny all. Die Zeilennummer der include-Zeile aus grep muss kleiner sein als die von deny all; ist sie es nicht, schreiben Sie Ihre Zeilen an diesem Kommentar direkt in squid.conf. Die Datei debian.conf im selben Ordner setzt logfile_rotate 0, weil logrotate die Logs übernimmt.

Eine vollständige team.conf für einen abgesicherten Proxy

Speichern Sie Folgendes als /etc/squid/conf.d/team.conf. Ersetzen Sie das Dokumentationsnetz 203.0.113.0/24 durch Ihr Büronetz oder die festen IPs Ihres Teams.

text
# /etc/squid/conf.d/team.conf
# Wird innerhalb der http_access-Liste von squid.conf gelesen, oberhalb von "http_access deny all".
# Niemals "http_access allow all" ergaenzen: Das macht diesen Server zum offenen Proxy.

# 1. Welche Netze sich verbinden duerfen
acl team_net src 203.0.113.0/24

# 2. Benutzername und Passwort aus /etc/squid/passwords.
#    Die auth_param-Zeilen oberhalb der proxy_auth-ACL lassen.
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic children 5 startup=5 idle=1
auth_param basic realm Team proxy
auth_param basic credentialsttl 2 hours
acl team_users proxy_auth REQUIRED

# 3. Nur erlauben, wenn BEIDES passt: das richtige Netz UND eine gueltige Anmeldung.
#    Alles andere faellt durch bis zu "http_access deny all".
http_access allow team_net team_users

# 4. Client-Adressen in unverschluesselten HTTP-Anfragen nicht weitergeben
forwarded_for delete
via off

# 5. Cache: Arbeitsspeicher, groesstes zu speicherndes Objekt, dann der Festplatten-Cache
cache_mem 512 MB
maximum_object_size 512 MB
cache_dir ufs /var/spool/squid 10000 16 256

Danach legen Sie Benutzer an, prüfen die Syntax, starten einmal neu und öffnen den Port nur für bekannte Adressen:

bash
sudo htpasswd -c /etc/squid/passwords team1   # -c legt die Datei an: nur beim ersten Benutzer
sudo htpasswd /etc/squid/passwords team2      # weitere Benutzer: ohne -c
sudo chown root:proxy /etc/squid/passwords
sudo chmod 640 /etc/squid/passwords

sudo squid -k parse                           # zeigt Fehler und Warnungen, falls vorhanden
sudo systemctl restart squid                  # einmal, wegen des neuen cache_dir
sudo tail -n 20 /var/log/squid/cache.log      # Startmeldungen

sudo ufw allow OpenSSH                        # damit Ihre SSH-Sitzung erreichbar bleibt
sudo ufw allow from 203.0.113.0/24 to any port 3128 proto tcp
sudo ufw enable

Wie schreiben Sie die Regeln für acl und http_access?

Eine acl-Zeile gibt einer Bedingung einen Namen; eine http_access-Zeile verbindet Namen zu einer Entscheidung. Die Bedingungen in einer Zeile müssen alle zutreffen, allow team_net team_users bedeutet also „aus unserem Netz und angemeldet“. Getrennte Zeilen sind Alternativen: Für ein zweites Büro ergänzen Sie acl office2 src 198.51.100.0/24 und http_access allow office2 team_users.

Die Position zählt so viel wie der Inhalt. Ein allow unterhalb von http_access deny all wird nie erreicht, und jeder Client bekommt 403. Lassen Sie die Regeln oberhalb des include unverändert: deny CONNECT !SSL_ports lässt Tunnel nur zu Port 443 zu. RFC 9110 rät, CONNECT auf bekannte Ports zu beschränken, weil ein Proxy, der zu jedem beliebigen Port tunnelt, zum Weiterleiten von Spam an Port 25 missbraucht werden kann.

Um den Port zu ändern, bearbeiten Sie die vorhandene Zeile http_port 3128 in squid.conf, statt eine zweite hinzuzufügen, und passen die Firewall an. Ein neuer Port schützt nichts; das tun die ACL und die Firewall. Was 3128 und 8080 bedeuten, steht in Port 8080 und andere Proxy-Ports.

Wie richten Sie Benutzername und Passwort ein?

htpasswd speichert pro Benutzer eine Zeile mit gehashtem Passwort. Sein Standard-Hash ist MD5, den der Squid-Helper basic_ncsa_auth lesen kann; unter Ubuntu liegt der Helper unter /usr/lib/squid/basic_ncsa_auth. Er läuft als Benutzer proxy, daher die Gruppe proxy der Datei. Die auth_param-Zeilen starten bis zu fünf Helper, legen den Text der Anmeldeaufforderung fest und lassen Squid einer korrekten Anmeldung zwei Stunden lang vertrauen, bevor er die Datei erneut prüft.

Laut der auth_param-Dokumentation von Squid wird ein Client nur dann nach Zugangsdaten gefragt, wenn eine http_access-Regel eine proxy_auth-ACL auswertet. Konfigurieren Sie auth_param, ohne team_users in http_access zu verwenden, fragt Squid nie nach einem Passwort.

Basic-Authentifizierung sendet das Passwort Base64-kodiert, nicht verschlüsselt, in jedem Proxy-Authorization-Header zwischen Client und Squid. Wer diese Strecke mitliest, kann es lesen; deshalb bleibt die Allowlist neben dem Passwort bestehen. Wie Sie eine 407 lesen, erklärt Proxy-Authentifizierung: User:Pass oder IP-Whitelist.

Wie richten Sie den Cache ein und lesen die Logs?

cache_mem legt den Arbeitsspeicher für häufig abgerufene Objekte fest (Standard 256 MB). cache_dir ufs /var/spool/squid 10000 16 256 fügt bis zu 10.000 MB Festplatten-Cache in 16 Ordnern der ersten und 256 Ordnern der zweiten Ebene hinzu; die Squid-Dokumentation warnt davor, die gesamte Festplattengröße einzutragen. maximum_object_size steht standardmäßig auf 4 MB, womit größere Paketdateien nicht gespeichert werden, also erhöhen Sie den Wert. Er legt die Standard-Größengrenze für jedes cache_dir fest; deshalb steht er in der Datei oben vor cache_dir.

squid -z legt die Cache-Ordner an, und die Service-Datei von Ubuntu führt vor jedem Start squid --foreground -z aus, sodass der Neustart sie erzeugt. Für spätere Änderungen an Regeln oder Benutzern sendet sudo systemctl reload squid dasselbe Signal wie squid -k reconfigure.

Der Cache hilft nur bei unverschlüsseltem HTTP. Die Spiegelserver von Ubuntu nutzen meist http://-Adressen, und apt prüft die Paketsignaturen; CI-Rechner, deren apt auf Squid zeigt, laden deshalb jedes Paket nur einmal aus dem Internet (Linux-Proxy-Einstellungen). HTTPS erzeugt nie einen Hit. Den Verkehr für den Cache aufzubrechen (SSL Bump) erfordert das Squid-Zertifikat auf jedem Client und das separate Paket squid-openssl und liegt außerhalb dieser Anleitung.

/var/log/squid/access.log enthält eine Zeile pro Anfrage, cache.log Startmeldungen und Fehler; logrotate rotiert beide täglich und behält zwei alte Kopien. Der Ergebniscode zeigt, was passiert ist:

ErgebniscodeBedeutung
TCP_MISS/200Von der Website geholt
TCP_HIT/200, TCP_MEM_HIT/200Aus dem Festplatten- oder Arbeitsspeicher-Cache geliefert
TCP_TUNNEL/200HTTPS-Tunnel; Squid sah nur Host und Port
TCP_DENIED/407Keine oder falsche Anmeldung
TCP_DENIED/403Von http_access abgelehnt: falsches Netz oder falsche Regelreihenfolge

Wie entfernen Sie die Header Via und X-Forwarded-For?

Standardmäßig hängt Squid die IP des Clients an X-Forwarded-For an (forwarded_for on) und fügt einen Via-Header hinzu (via on). forwarded_for delete entfernt den Header, off schreibt unknown statt der Adresse, und via off lässt Via weg. Beides wirkt nur bei unverschlüsseltem HTTP; in einem Tunnel fügt Squid ohnehin nichts hinzu. Wie Sie das Ergebnis mit einer Echo-Anfrage prüfen, zeigt Transparenter, anonymer und Elite-Proxy.

Ein Ausgang für das Team: cache_peer mit einem übergeordneten Proxy

Ein Team, das einen kommerziellen Proxy nutzt, möchte dessen Passwort vielleicht nicht auf jedem Laptop und in jedem CI-Job hinterlegen. Squid kann dazwischengeschaltet werden: Die Mitglieder melden sich mit eigenen Konten bei Squid an, und nur der Server kennt die kommerziellen Zugangsdaten. Ergänzen Sie in team.conf:

text
# Jede Anfrage ueber den uebergeordneten Proxy senden. Clients sehen dessen Passwort nie.
cache_peer pr.proxynet.io parent 8000 0 no-query default login=user:pass
never_direct allow all

Nach der Dokumentation zu cache_peer: Host, Typ parent, Proxy-Port 8000 und ICP-Port 0, weil der Peer keine ICP-Abfragen beantwortet. no-query schaltet diese Abfragen ab, default macht ihn zum übergeordneten Proxy der letzten Wahl, und login= sendet die Zugangsdaten für den übergeordneten Proxy; ein % im Passwort schreiben Sie als %%.

Ohne never_direct allow all holt Squid manche Anfragen womöglich direkt über die eigene IP des VPS. Bei HTTPS reicht Squid das CONNECT an den übergeordneten Proxy weiter. In access.log nennt das Hierarchiefeld dann den übergeordneten Proxy mit einem Code wie DEFAULT_PARENT statt HIER_DIRECT.

Eine Passwortänderung ist jetzt eine Zeile und ein Reload, jede Anfrage wird mit dem Benutzernamen des Mitglieds protokolliert, und unverschlüsseltes HTTP wird weiterhin zwischengespeichert. Ist der übergeordnete Proxy ein Rotierender Proxy, wechselt der Anbieter die Ausgangs-IP, während Squid für die Clients eine feste Adresse bleibt (Was ist IP-Rotation?). Die Kette verwaltet Zugangsdaten; sie verbirgt nicht, wer Sie sind, und die Bedingungen des Anbieters sowie die Regeln jeder Website gelten weiterhin.

Wie verbinden Sie einen Client und testen ihn?

Führen Sie Folgendes auf einem Rechner im erlaubten Netz aus; 198.51.100.20 steht für Ihren Server.

bash
# 1. Ohne Anmeldung: Squid verlangt eine
curl -x http://198.51.100.20:3128 https://httpbin.org/ip
# curl: (7) CONNECT tunnel failed, response 407

# 2. Mit Anmeldung: Die Antwort zeigt die IP des Servers, nicht Ihre
curl -x http://team1:pass@198.51.100.20:3128 --retry 3 https://httpbin.org/ip

# 3. Auf dem Server: die letzten drei Anfragen
sudo tail -n 3 /var/log/squid/access.log

Die curl-Seite haben wir mit curl 8.21 gegen einen lokalen Test-Proxy mit Anmeldepflicht ausgeführt: Der erste Befehl gab die obige Zeile aus, der zweite lieferte die Ausgangsadresse des Proxys. --retry 3 wiederholt nach einem Timeout oder einem vorübergehenden HTTP-Code wie 429 oder 503, nie nach einer 407. Mehr dazu in cURL mit Proxy verwenden und So testen Sie einen Proxy.

Wofür nutzen Sie einen eigenen Proxy-Server?

  • Eine feste Ausgangs-IP für eine API: Nur der API-Verkehr läuft über Squid (Statische IP für APIs).
  • Kontrolle des Webzugriffs im Büro: dstdomain-ACLs und access.log, wobei die Mitarbeitenden vorher informiert werden (Proxy und Firewall).
  • Browsereinstellungen im Büro: Eine PAC-Datei sagt jedem Browser, wann er Squid nutzen soll (Was ist eine PAC-Datei?).
  • Ein Paket-Cache für CI-Rechner: apt holt jedes unverschlüsselte HTTP-Paket nur einmal (Linux-Proxy-Einstellungen).
  • Nicht für Datenarbeit über Ländergrenzen hinweg: Preisvergleiche und Scraping nach Standort brauchen viele Adressen (Data Scraping).

Häufige Fehler

  • http_access allow all. Ein offener Proxy, dessen IP bald auf Sperrlisten landet (IP-Blacklist).
  • auth_param ohne proxy_auth in http_access. Es wird nie ein Passwort abgefragt.
  • Ein allow unterhalb von deny all. Wird nie erreicht; alle bekommen 403.
  • 3128 zum Internet hin offen. Ein Passwort allein lädt zum Raten ein, und Basic Auth sendet es unverschlüsselt.
  • HTTPS-Cache-Hits erwarten. Tunnel werden nie zwischengespeichert.
  • squid -k parse auslassen. Ein Tippfehler stoppt den Dienst; journalctl -u squid zeigt, warum.
  • maximum_object_size bei 4 MB belassen für einen Paket-Cache, oder ein cache_dir, das größer ist als der freie Speicherplatz.
  • Intensives Scraping von der VPS-IP. Websites antworten mit 429 und sperren danach (HTTP-Statuscodes beim Web Scraping).

Entscheidungshilfe

BedarfEmpfehlung
Das Team muss eine API von einer IP aus erreichenSquid auf einem VPS mit fester IP, mit Allowlist und Anmeldung, oder ein Statischer Proxy
CI-Rechner laden immer wieder dieselben Pakete herunterSquid mit cache_dir und größerem maximum_object_size; der Gewinn kommt von HTTP-Spiegelservern
Das Büro will besuchte Websites sehen und begrenzendstdomain-ACLs und access.log; die Mitarbeitenden vorher informieren
Das Passwort des kommerziellen Proxys soll auf einem Server bleibenSquid für die Clients, cache_peer zum Anbieter, never_direct allow all
Sie brauchen IPs in anderen Ländern oder viele IPsNicht der eigene Squid: ein Datacenter-Proxy oder ein Residential- und rotierender Pool
Sie möchten HTTPS-Seiten zwischenspeichernNicht mit dem Standardpaket; speichern Sie nur unverschlüsselte HTTP-Quellen zwischen

Häufige Fragen

Welchen Port nutzt Squid?

Die Konfiguration von Ubuntu setzt http_port 3128, also lauscht Squid nach der Installation auf 3128. Sie können diese Zeile zusammen mit der Firewall-Regel ändern, aber ein anderer Port bringt keinen Schutz; den bringen die Netzwerk-ACL, die Anmeldung und die Firewall. Was die gängigen Proxy-Portnummern bedeuten, erklärt unser Beitrag zu Port 8080.

Kann Squid HTTPS-Websites zwischenspeichern?

In der Standardeinrichtung nicht. Eine HTTPS-Anfrage kommt als CONNECT-Tunnel an, und Squid leitet verschlüsselte Bytes weiter, ohne die Seite zu sehen; es gibt also nichts zu speichern. SSL Bump, das den Verkehr öffnet, erfordert ein Squid-Zertifikat auf jedem Client-Gerät und das Paket squid-openssl und liegt außerhalb dieser Anleitung.

Wie übernehme ich Änderungen an squid.conf, ohne den Dienst zu stoppen?

Führen Sie zuerst sudo squid -k parse aus, damit ein Tippfehler den Proxy nicht lahmlegt. Danach folgt sudo systemctl reload squid: Das sendet dasselbe Signal wie squid -k reconfigure, und der Dienst läuft weiter. Nach dem Hinzufügen oder Verschieben eines cache_dir starten Sie stattdessen einmal neu, damit der Dienst die Cache-Ordner anlegt.

Wo liegen die Squid-Logs und wie lese ich sie?

Unter Ubuntu liegen sie in /var/log/squid/: access.log enthält eine Zeile pro Anfrage, cache.log Startmeldungen und Fehler. Achten Sie in access.log auf den Ergebniscode: TCP_HIT kam aus dem Cache, TCP_MISS von der Website, TCP_TUNNEL ist HTTPS, und TCP_DENIED mit 407 oder 403 bedeutet abgelehnt.

Was ist der Unterschied zwischen Squid und Tinyproxy?

Tinyproxy beschreibt sich selbst als schlanken HTTP- und HTTPS-Proxy-Daemon für Systeme, die für einen vollwertigen Proxy zu klein sind, und sein Konfigurationshandbuch nennt keine Cache-Einstellungen. Squid bietet zusätzlich einen Arbeitsspeicher- und Festplatten-Cache, detaillierte ACLs, mehrere Anmelde-Helper und Ketten mit übergeordneten Proxys. Für reines Weiterleiten auf einem kleinen Gerät kann Tinyproxy genügen.

Verbirgt ein eigener Squid-Server meine Identität?

Nur teilweise. Websites sehen die IP des VPS statt Ihrer Heimadresse, und forwarded_for delete mit via off entfernt die Proxy-Header aus unverschlüsseltem HTTP. Diese IP gehört aber zu einem Rechenzentrum, ist auf Ihren Namen gemietet und kommt immer vom selben Ort. Squid ist ein Werkzeug für Zugriffskontrolle und einen gemeinsamen Ausgang, nicht für Anonymität.

Fazit

Squid gibt Ihnen einen eigenen Forward-Proxy mit Zugriffskontrolle, einem Cache für unverschlüsseltes HTTP und einem Log für jede Anfrage. Eine sichere Einrichtung hält drei Dinge in der richtigen Reihenfolge: eine Netzwerk-ACL, eine proxy_auth-Anmeldung, die in http_access verwendet wird, und http_access deny all am Ende, dazu eine Firewall, die nur für bekannte Adressen offen ist. Die Grenze ist die Adresse: Ein Server ist eine Datacenter-IP an einem Ort. Braucht eine Aufgabe mehr Adressen oder andere Länder, schließt ein Datacenter-Proxy oder ein Residential-Proxy die Lücke, und unsere Seite Proxy-Dienste vergleicht die Optionen.

ChatGPT fragenClaude fragen