Squid

Der Squid Outbound Proxy wird meist zur Weiterleitung von Client-Anfragen an andere Server über das Internet oder interne Netzwerke verwendet. Ein ausgehender Proxy agiert als Vermittler zwischen dem Benutzer (oder dem internen Netzwerk) und dem Internet, wobei der Proxy Anfragen an das Internet sendet, Antworten empfängt und diese dann an den anfragenden Benutzer oder das anfragende Gerät weiterleitet.

Squid bietet zahlreiche Funktionen, wie z. B. das Zwischenspeichern häufig angeforderter Ressourcen, um die Ladegeschwindigkeit zu erhöhen und die Bandbreitennutzung zu verringern, die Zugangskontrolle zur Verwaltung der Netzwerkzugangsrechte sowie die Möglichkeit, den Internetzugang und den Datenverkehr zu überwachen und zu protokollieren. Squid kann auch den Datenschutz und die Sicherheit verbessern, indem es die IP-Adresse des anfragenden Benutzers verbirgt.

Squid wird häufig in Unternehmen und Bildungseinrichtungen zur Verwaltung und Optimierung des Internetzugangs und zur Durchsetzung von Internetnutzungsrichtlinien eingesetzt.

Installation und Konfiguration

Squid installieren und als Outbound HTTP(S)-Proxy verwenden:

dnf -y install squid
systemctl enable --now squid
/etc/squid/squid.conf
http_port 3128

Damit kann Squid HTTP- und HTTPS-Verkehr weiterleiten, falls die Clients so konfiguriert sind, dass beide Protokolle per HTTP an Squid durchgereicht werden.

ACLs - Freigabe für alle:

/etc/squid/squid.conf
acl all src all
http_access allow all

Tipp

Eigene ACLs nach dem Kommentar INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS einfügen.

Konfiguration aktivieren:

systemctl reload squid

Authentication

dnf -y install httpd-tools
# first user
htpasswd -c /etc/squid/passwd user1

# all other users
htpasswd /etc/squid/passwd user2
/etc/squid/squid.conf
# uses an NCSA-style username and password file
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
# number of authenticator processes to spawn
auth_param basic children 5
# message to the users when they are prompted to authenticate
auth_param basic realm "Squid proxy-caching web server"
# time credentials are cached
auth_param basic credentialsttl 2 hours
# define an access control list named "authenticated" that mandates proxy authentication
acl authenticated proxy_auth REQUIRED
http_access allow authenticated

Konfiguration aktivieren:

systemctl reload squid

Wird ein Zugriff über den Proxy ohne Authentifizierung versucht, erhält man ein HTTP/1.1 407 Proxy Authentication Required.

HTTPS

Damit Squid auch per HTTPS lauscht, muss SSL-Bump aktiviert werden, was einige zusätzliche Konfigurationsschritte und die Erstellung von Zertifikaten erfordert. Ein einfaches Beispiel für die Aktivierung ohne spezifische SSL-Bump-Konfiguration:

/etc/squid/squid.conf
https_port 3129 intercept
ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
cert=/etc/pki/tls/certs/example.pem key=/etc/pki/tls/private/example.key

Clients

Damit Clients den Outbound Proxy verwenden, müssen auf diesen passende Umgebungsvariablen gesetzt werden - nur für den aktuellen Benutzer in ~/.bashrc, oder systemweit beispielsweise in /etc/profile.d/proxy.sh. Für System-Accounts ohne Login-Shell kann die /etc/environment (mit Angaben der Form key=value) genutzt werden.

Das Beispiel zeigt die Verwendung eines Outbound Proxy mit Authentifizierung:

export http_proxy="http://username:password@proxy.example.com:port"
export https_proxy="http://username:password@proxy.example.com:port"
source /etc/profile/proxy.sh

Test des Outbound-Proxy:

curl https://www.linuxfabrik.ch

Troubleshooting

tail -f /var/log/squid/*log

Built on 2024-04-18