用 iptables 做代理拦截:把 80 和 443 端口当作一个端口集
把 80 和 443 端口作为一个集合来匹配,同时让客户端地址的选择与代理改写后的目标保持分离。
要挑选目标端口为 80 或 443 的 TCP 流量,请使用一个端口集:
-p tcp -m multiport --dports 80,443相比之下,--dport 80:443 会选中 80 到 443 的整个闭区间,这样会多抓到许多端口。逗号和冒号表达的是两种不同的策略。
这些是匹配片段,而不是完整的防火墙命令。请把它们放进拦截方案所要求的链和动作里。
| 选择器 | 改写前它识别什么 |
|---|---|
-s 192.0.2.20 | 客户端的源地址 |
-d 198.51.100.30 | 目标服务器地址 |
--dports 80,443 | 目标服务端口 |
交给 DNAT 的 --to-destination 的地址是新的目标,例如代理监听地址。它并不取代前面源地址与目标地址匹配的含义。
选择器要足够窄,能描述预期的客户端和流量。尤其要考虑 代理自身产生的连接,避免它的后续请求再次进入同一条拦截路径。选 443 端口同样不会把该连接上的字节变成显式的 HTTP 代理请求;接收方应用仍然需要合适的拦截方式。对于透明的 TCP 到代理转发,转换环节必须恢复原始目标并协商代理协议。