Squid im Intercept-Modus via TPROXY mit nftables: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 2: Zeile 2:
  
 
== Voraussetzungen ==
 
== Voraussetzungen ==
* Squid läuft nicht direkt auf der Firewall, sondern auf einer separaten Maschine im Netzwerk.
+
* 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.
 
* 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.
Zeile 12: Zeile 13:
 
*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 tcp dport 80 tproxy to :3029 mark set 1
+
*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 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
  
 
== Policy Routing auf der Firewall ==
 
== Policy Routing auf der Firewall ==
Zeile 22: Zeile 23:
 
== Notwendige Kernel-Module ==
 
== Notwendige Kernel-Module ==
 
Folgende Module müssen geladen sein:
 
Folgende Module müssen geladen sein:
mo*dprobe nf_conntrack
+
*modprobe nf_conntrack
mo*dprobe nf_tproxy_ipv4
+
*modprobe nf_tproxy_ipv4
 
*modprobe nf_tproxy_ipv6
 
*modprobe nf_tproxy_ipv6
 
*modprobe xt_TPROXY
 
*modprobe xt_TPROXY

Version vom 24. April 2025, 03:46 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 (`--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.