Squid im Intercept-Modus via TPROXY mit nftables: Unterschied zwischen den Versionen
| Zeile 5: | Zeile 5: | ||
* Der Squid-Proxy läuft auf einer separaten Maschine mit der IP 10.88.113.51 | * 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 – | + | * 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 == | == nftables-Regeln auf der Firewall == | ||
| − | + | *Tabelle und Set anlegen: | |
| − | + | nft add table inet fwmark | |
| − | *nft add chain | + | nft add set inet fwmark ports { type inet_service\; flags constant\; elements = { 80, 443 } } |
| − | *nft add rule ip | + | |
| − | * | + | *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 == | == 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 == | == Policy Routing auf dem Proxyserver == | ||
| Zeile 29: | Zeile 36: | ||
*ip route add local 0.0.0.0/0 dev lo table 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_conntrack | ||
*modprobe nf_tproxy_ipv4 | *modprobe nf_tproxy_ipv4 | ||
| Zeile 35: | Zeile 42: | ||
*modprobe xt_TPROXY | *modprobe xt_TPROXY | ||
| − | == Squid- | + | == 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 | + | ;Optional SSL-Bump: |
| − | + | ssl_bump peek all | |
| − | + | ssl_bump bump all | |
| − | + | sslproxy_cert_error allow all | |
| − | + | sslproxy_flags DONT_VERIFY_PEER | |
== Squid-Rechte anpassen == | == Squid-Rechte anpassen == | ||
*setcap cap_net_admin=eip /usr/sbin/squid | *setcap cap_net_admin=eip /usr/sbin/squid | ||
| − | == | + | == Logs & Diagnose == |
| − | + | *nft list chain inet fwmark prerouting | |
| − | *nft list chain | ||
| − | |||
| − | |||
*nft list chain inet myproxy prerouting | *nft list chain inet myproxy prerouting | ||
*ip rule show | *ip rule show | ||
| Zeile 62: | Zeile 62: | ||
*tail -f /var/log/squid/access.log | *tail -f /var/log/squid/access.log | ||
*tail -f /var/log/squid/cache.log | *tail -f /var/log/squid/cache.log | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
Version vom 24. April 2025, 04:55 Uhr
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