Blog

So konfigurieren Sie Squid als Egress Gateway

Laurens Knoll

Aktualisiert Oktober 15, 2025
3 Minuten

In diesem Blog wird Squid Proxy als Egress-Gateway konfiguriert, um den Webverkehr zu filtern.

Stellen Sie immer sicher, dass Sie bei der Implementierung von Lösungen zur Verwaltung des Netzwerkverkehrs die geltenden Gesetze und Vorschriften einhalten.

Filtern des Internetverkehrs

Benutzer und Anwendungen besuchen viele verschiedene Websites, darunter möglicherweise auch bösartige Websites. Um das Benutzer- und Anwendungsnetzwerk zu schützen, wird der Webverkehr daher oft gefiltert.

Firewalls filtern den Datenverkehr anhand von Attributen wie IP-Adresse, Protokoll und Domänenname. Die verfügbaren Attribute hängen von der Betriebsebene der Firewall ab. Je höher die Ebene, desto fortschrittlicher (und teurer) ist die Firewall.

Als Web-Proxy filtert Squid den Datenverkehr auf der Grundlage von Informationen, die über das Proxy-Protokoll ausgetauscht werden. Squid kann jedoch auch so konfiguriert werden, dass er den Datenverkehr abfängt, um ihn auf der Grundlage von IP-Adresse, Protokoll und Domänenname transparent zu filtern:

Übersicht über die Konnektivität

Bildquelle: https://wiki.squid-cache.org/ConfigExamples/Intercept/LinuxRedirect

Einsetzen eines abfangenden Squid Proxy-Egress-Gateways

Die folgende Infrastruktur ist so konfiguriert, dass nur xebia.com Zugriff hat:

  1. Internet-Ausgang über die Squid-Proxy-Instanz(en)
  2. Verkehrsfilterung Squid Proxy-Instanz(en)

Finden Sie das vollständige Beispiel auf GitHub

Internet-Egress-Konfiguration

Zunächst wird der Internetverkehr der Clients an die Squid-Proxy-Instanz(en) weitergeleitet:

resource "google_compute_route" "example_gateway_internet" {
    project    = var.project_id
    name       = "${google_compute_network.example.name}-gateway-internet"
    dest_range = "0.0.0.0/0"

    network      = google_compute_network.example.id
    next_hop_ilb = google_compute_forwarding_rule.gateway.id
    priority     = 900
}

Zweitens ist es Squid Proxy erlaubt, Pakete mit nicht übereinstimmenden Ziel- oder Quell-IPs zu senden und zu empfangen:

resource "google_compute_instance_template" "gateway" {
    project     = var.project_id
    region      = "europe-west1"
    name_prefix = "gateway-${random_id.id.hex}-"

    # NOTE: IP Forwarding allows send/receive packets with non-matching destination or source IP
    can_ip_forward = true

    ...
}

Schließlich wird der Client-Internetverkehr, der bei der Squid Proxy-Instanz ankommt, an die Squid Proxy-Lauschports umgeleitet:

iptables -t nat -A PREROUTING -s ${load_balancer_ip} -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3129
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t mangle -A PREROUTING -p tcp --dport 3129 -j DROP

iptables -t nat -A PREROUTING -s ${load_balancer_ip} -p tcp --dport 443 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3130
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t mangle -A PREROUTING -p tcp --dport 3130 -j DROP

Konfiguration des Verkehrsfilters

Zunächst wird Squid so konfiguriert, dass er den Datenverkehr abfängt:

http_port 3129 intercept
https_port 3130 intercept ssl-bump tls-cert=/etc/squid/certs/ca-cert.pem tls-key=/etc/squid/certs/ca-key.pem tls-default-ca=on

Zweitens wird eine Zulassen-Liste angegeben:

xebia.com
.google.com

Schließlich wird die Whitelist auf den abgefangenen Datenverkehr angewendet:

acl http_proxy myportname 3129
acl http_allow dstdomain "/etc/squid/allowlist.txt"

acl https_proxy myportname 3129
acl step3 at_step SslBump3
acl ssl_allow ssl::server_name "/etc/squid/allowlist.txt"

# Try to pass-through requests, bump otherwise
ssl_bump splice ssl_allow
ssl_bump peek step1
ssl_bump stare step2
ssl_bump bump all

# Deny invalid HTTP requests
http_access deny http_proxy !http_allow

# Deny invalid (bumped) HTTP(S) requests
http_access deny step3 https_proxy !ssl_allow 

Diskussion

Unabhängig von der Tatsache, dass die transparente Inspektion des Datenverkehrs eine Grauzone ist (überwiegt der Schutz die Verletzung der Privatsphäre?), ist die Inspektion des Datenverkehrs eine Herausforderung. Die Inspektion kann fehlschlagen, weil die Serverantwort von Squid Proxy nicht verstanden wird oder weil Filterattribute wie die SNI aufgrund von Encrypted Client Hello (ECH) nicht mehr verfügbar sind.

Da die meisten Probleme beim verschlüsselten Datenverkehr auftreten, sollten Sie stattdessen einen expliziten Proxy verwenden. Wenn das keine Option ist, ist es wahrscheinlich besser, ein verwaltetes Angebot zu verwenden, das den Betriebsaufwand reduziert, aber einen (höheren) Preis hat.

Fazit

Mit Squid Proxy können Sie den Internetverkehr nach Domänennamen filtern, um Ihre Netzwerke zu schützen. Beachten Sie jedoch die Grenzen des Abfangens von verschlüsseltem Datenverkehr und wägen Sie bewusst die Auswirkungen auf die Privatsphäre ab.

Bild von Lars Nissen aus Pixabay

Verfasst von

Laurens Knoll

As a cloud consultant I enjoy improving what your company does best. I enable your business using cloud technology and enable your engineers by applying software engineering practices to your infrastructure domain.

Contact

Let’s discuss how we can support your journey.