Squid im Intercept-Modus via TPROXY mit nftables
Squid im Intercept-Modus via TPROXY auf separatem Proxyserver
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 – kein DNAT, sondern reines Routing mit Policy-Markierung.
- TPROXY erfolgt ausschließlich auf dem Proxyserver.
nftables-Regeln auf der Firewall
- Tabelle und Set anlegen:
nft add table inet fwmark nft add set inet fwmark ports { type inet_service\; flags constant\; elements = { 80, 443 } }
- Kette für PREROUTING:
nft add chain inet fwmark prerouting '{ type filter hook prerouting priority mangle\; policy accept\; }'
- Markierung setzen:
nft add rule inet fwmark prerouting ip daddr != 10.88.113.51 tcp dport @ports meta mark set 0x1
Policy Routing auf der Firewall
- ip rule add fwmark 1 lookup 100
- ip route add 10.88.113.51 dev eth0 table 100
nftables-Regeln auf dem Proxyserver
- Tabelle und Kette erstellen:
nft add table inet myproxy nft add chain inet myproxy prerouting '{ type filter hook prerouting priority mangle\; policy accept\; }'
- TPROXY-Regeln:
nft add rule inet myproxy prerouting ip daddr 10.88.113.51 tcp dport 3129 tproxy ip to :3129 meta mark set 0x1 nft add rule inet myproxy prerouting ip daddr 10.88.113.51 tcp dport 3130 tproxy ip to :3130 meta mark set 0x1
Policy Routing auf dem Proxyserver
- ip rule add fwmark 1 lookup 100
- ip route add local 0.0.0.0/0 dev lo table 100
Kernel-Module auf dem Proxyserver laden
- modprobe nf_conntrack
- modprobe nf_tproxy_ipv4
- modprobe nf_tproxy_ipv6
- modprobe xt_TPROXY
Squid-Konfiguration auf dem Proxy
http_port 3129 tproxy https_port 3130 ssl-bump tproxy cert=/etc/squid/certs/squid_proxyCA.pem key=/etc/squid/certs/squid_proxyCA.key
- Optional SSL-Bump
ssl_bump peek all ssl_bump bump all sslproxy_cert_error allow all sslproxy_flags DONT_VERIFY_PEER
Squid-Rechte anpassen
- setcap cap_net_admin=eip /usr/sbin/squid
Logs & Diagnose
- nft list chain inet fwmark prerouting
- nft list chain inet myproxy prerouting
- ip rule show
- ip route show table 100
- tail -f /var/log/squid/access.log
- tail -f /var/log/squid/cache.log