Squid im Intercept-Modus via TPROXY mit nftables: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 2: | Zeile 2: | ||
== Voraussetzungen == | == Voraussetzungen == | ||
| − | * Die Firewall hat die interne IP | + | * Die Firewall hat die interne IP 172.17.113.1 |
| − | * Der Squid-Proxy läuft auf einer separaten Maschine mit der IP | + | * Der Squid-Proxy läuft auf einer separaten Maschine mit der IP 10.88.113.51 |
* Der Proxy soll HTTP (Port 80) und HTTPS (Port 443) Verkehr transparent abfangen. | * Der Proxy soll HTTP (Port 80) und HTTPS (Port 443) Verkehr transparent abfangen. | ||
* Die Original-Ziel-IP soll erhalten bleiben – daher TPROXY statt DNAT/REDIRECT. | * Die Original-Ziel-IP soll erhalten bleiben – daher TPROXY statt DNAT/REDIRECT. | ||
| − | * Die Firewall nutzt | + | * Die Firewall nutzt nftables und unterstützt Policy-Based Routing. |
== nftables-Regeln auf der Firewall == | == nftables-Regeln auf der Firewall == | ||
| Zeile 12: | Zeile 12: | ||
*nft add table inet tproxy | *nft add table inet tproxy | ||
*nft add chain inet tproxy prerouting '{ type filter hook prerouting priority mangle; policy accept; }' | *nft add chain inet tproxy prerouting '{ type filter hook prerouting priority mangle; policy accept; }' | ||
| + | |||
;TPROXY-Regeln für HTTP und HTTPS einfügen: | ;TPROXY-Regeln für HTTP und HTTPS einfügen: | ||
| − | *nft add rule inet tproxy prerouting ip daddr != 10.88.113.51 tcp dport 80 | + | *nft add rule inet tproxy prerouting ip daddr != 10.88.113.51 tcp dport 80 tproxy to :3029 mark set 1 |
*nft add rule inet tproxy prerouting ip daddr != 10.88.113.51 tcp dport 443 tproxy to :3030 mark set 1 | *nft add rule inet tproxy prerouting ip daddr != 10.88.113.51 tcp dport 443 tproxy to :3030 mark set 1 | ||
| Zeile 29: | Zeile 30: | ||
== Squid-Setup auf dem Proxyserver == | == Squid-Setup auf dem Proxyserver == | ||
| − | Squid muss mit TPROXY-Support kompiliert sein ( | + | Squid muss mit TPROXY-Support kompiliert sein (mit --enable-linux-netfilter) |
Squid-Konfiguration anpassen: | Squid-Konfiguration anpassen: | ||
Version vom 24. April 2025, 03:47 Uhr
Squid im Intercept-Modus via TPROXY mit nftables
Voraussetzungen
- Die Firewall hat die interne IP 172.17.113.1
- Der Squid-Proxy läuft auf einer separaten Maschine mit der IP 10.88.113.51
- Der Proxy soll HTTP (Port 80) und HTTPS (Port 443) Verkehr transparent abfangen.
- Die Original-Ziel-IP soll erhalten bleiben – daher TPROXY statt DNAT/REDIRECT.
- Die Firewall nutzt nftables und unterstützt Policy-Based Routing.
nftables-Regeln auf der Firewall
- Tabelle und Kette erstellen
- nft add table inet tproxy
- nft add chain inet tproxy prerouting '{ type filter hook prerouting priority mangle; policy accept; }'
- TPROXY-Regeln für HTTP und HTTPS einfügen
- nft add rule inet tproxy prerouting ip daddr != 10.88.113.51 tcp dport 80 tproxy to :3029 mark set 1
- nft add rule inet tproxy prerouting ip daddr != 10.88.113.51 tcp dport 443 tproxy to :3030 mark set 1
Policy Routing auf der Firewall
Weiterleitung der markierten Pakete zur lokalen Verarbeitung:
- ip rule add fwmark 1 lookup 100
- ip route add local 0.0.0.0/0 dev lo table 100
Notwendige Kernel-Module
Folgende Module müssen geladen sein:
- modprobe nf_conntrack
- modprobe nf_tproxy_ipv4
- modprobe nf_tproxy_ipv6
- modprobe xt_TPROXY
Squid-Setup auf dem Proxyserver
Squid muss mit TPROXY-Support kompiliert sein (mit --enable-linux-netfilter)
Squid-Konfiguration anpassen:
http_port 3029 tproxy https_port 3030 tproxy ssl-bump cert=/etc/squid/certs/proxy.pem key=/etc/squid/certs/proxy.key
- Optional
- SSL-Bump konfigurieren:
ssl_bump peek all ssl_bump bump all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER
Squid-Rechte anpassen
Squid benötigt zusätzliche CAPs zum Binden fremder IPs:
- setcap cap_net_bind_service,cap_net_admin=eip /usr/sbin/squid
Test & Diagnose
Überprüfen ob Pakete markiert werden:
- nft list chain inet tproxy prerouting
- Policy-Routing prüfen
- ip rule show
- ip route show table 100
- Squid-Logs im Auge behalten
- tail -f /var/log/squid/access.log
- tail -f /var/log/squid/cache.log
Hinweise
Clientzertifikate oder CA-Zertifikate müssen ggf. angepasst werden.
Browserwarnungen bei HTTPS sind zu erwarten, falls keine eigene Root-CA ausgerollt ist.
Diese Methode ist technisch aufwendig – in produktiven Umgebungen sollte, wenn möglich, ein expliziter Proxy via WPAD bevorzugt werden.