如何在 Linux 中使用 iptables 将 http 和 https 流量转发到透明代理



我有一个Ubuntu linux系统充当网关系统,上面有两个接口。一个接口用于本地网络,一个接口用于互联网。我能够毫无问题地通过它路由流量。我使用两个iptables规则从内部接口转发出站流量:

iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface eth1 -j ACCEPT

我现在需要创建一个iptables规则,过滤掉并重定向通过eth1接口离开我的网络的所有 tcp 端口 80 和 443 流量,并将其发送到驻留在 tcp 端口 9090 上的环路接口上的代理服务器。

我一直在SO上搜索,但我无法找到一个有效的例子。有没有有效的方法可以做到这一点?

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 9090

HTTPS 不能与透明代理一起使用。有一些黑客,但它没有任何意义,也没用。

iptables -t nat -A PREROUTING -i eth0 -s ! squid-box -p tcp --dport 80 -j DNAT --to squid-box:3128
iptables -t nat -A POSTROUTING -o eth0 -s local-network -d squid-box -j SNAT --to iptables-box
iptables -A FORWARD -s local-network -d squid-box -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT

哪里:

    鱿鱼
  • 盒:您的鱿鱼服务器
  • 本地网络:您的网络(在我的例子中是 192.168.0.0/24)
  • iptables-box:您的iptables软件所在的位置(通常是网关,在我的例子中为192.168.1.1)

第一个将数据包从iptables-box发送到squid-box。第二个确保回复通过iptables-box发送回去,而不是直接发送到客户端(这非常重要!最后一个确保iptables-box将适当的数据包转发到squid-box。可能不需要。扬子晚报.请注意,我们指定了"-i eth0",然后指定了"-o eth0",它代表输入接口eth0和输出接口eth0。如果您的数据包在不同的接口上进入和离开,则需要相应地调整命令。

将这些命令添加到/etc/rc.d/下的相应启动脚本中

寄件人: http://www.tldp.org/HOWTO/TransparentProxy-6.html

最新更新