如何在linux中使用iptables将http和httpsstream量转发到透明代理

我有一个Ubuntu的Linux系统作为一个网关系统上有两个接口。 一个接口用于本地networking,一个接口用于互联网。 我能够通过它路由stream量,没有任何问题。 我使用两个iptables规则来转发来自内部接口的出站stream量:

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

我现在需要创build一个iptables规则,过滤掉并redirect所有通过eth1接口离开我的networking的tcp端口80和443stream量,并将其发送到位于tcp端口9090上的回送接口上的代理服务器。

我一直在search,但我一直没能find一个有效的例子。 有没有一个有效的方法来做到这一点?

 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