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

时间:2012-05-23 20:36:31

标签: linux firewall iptables gateway transparentproxy

我有一个Ubuntu linux系统充当网关系统,上面有两个接口。一个接口用于本地网络,一个接口用于Internet。我可以毫无问题地通过它来路由流量。我使用两个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上的接口。

我一直都在搜索,但我找不到一个有效的例子。有没有一种有效的方法呢?

2 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:1)

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

其中:

  • squid-box :你的鱿鱼服务器
  • local-network :您的网络(我的情况是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 /

下的相应启动脚本中

FROM:http://www.tldp.org/HOWTO/TransparentProxy-6.html