如何使用 iptables 通过代理启用透明 HTTP/S 重定向?

如何使用 iptables 通过代理启用透明 HTTP/S 重定向?

我当前的设置包括以下元素:

  • 带有 OpenWRT 的路由器,具有两个接口:eth0用于访问网关并eth1管理本地网络(192.128.2.0/24)
  • 一个盒子(不能在桥接模式下使用),设置为允许路由器进入其 DMZ(192.168.1.0/24)
  • 路由器上启动并运行一个 privoxy 服务器,监听端口 4000(接口eth1

当我设置客户端eth1使用 192.168.2.1:4000 作为 HTTP 和 HTTPS 代理时,一切顺利。但是,我使用 iptables 自动执行此重定向过程的尝试到目前为止都失败了。这是我最后一次尝试:

iptables -t mangle -A PREROUTING -i eth1 -p tcp -m multiport --dport 80,443 -j TPROXY --on-ip 0.0.0.0 --on-port 4000 --tproxy-mark 1/1
iptables -t mangle -A PREROUTING -i eth0 -s 192.168.1.0/24 -j ACCEPT
iptables -t mangle -A PREROUTING -i eth0 -d 192.168.1.0/24 -j ACCEPT
iptables -t mangle -A PREROUTING -i eth0 -m multiport --sport 80,443 -j MARK --set-mark 1/1

我的理解如下:

  1. 第一条规则标记来自本地客户端的 HTTP/S(dport=80 或 443)数据包并将其重定向到代理服务器
  2. 第二和第三条规则允许两个本地网络之间的本地流量
  3. 最后一条规则将剩余的传入流量标记为 1/1

然后,我ip根据我设置的标记来定义一条用于策略路由的路线iptables

ip rule add fwmark 1/1 table 1
ip route add local 0.0.0.0/0 dev lo table 1

当然,它不起作用,我甚至不知道为什么...也许我的代理服务器不支持该TPROXY功能,我应该只使用MARK规则......但即便如此,我还是有点迷茫。

答案1

首先,请看这里:拦截缓存的概念了解使用透明代理的优点、缺点或可能出现的问题。

其次,HTTPS 或 SSL 流量无法与普通透明代理配合使用。您需要进行一项名为SSL 碰撞,其在隐私方面也有自己的问题需要考虑。

第三,

  • 如果你已经正确设置了 Squid 的透明/拦截模式(运行在 3128 端口),并且
  • 假设 eth0 为外部接口,eth1 为内部(lan,192.168.1.0/24)接口,以下是两个用于重定向 http 流量的示例 iptables 规则:

    iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.1:3128

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

这是不使用 Tproxy 的情况。

相关内容