12

我有一个 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 上的环回接口上的代理服务器。

我一直在搜索,但我找不到一个有效的例子。有没有一种有效的方法来做到这一点?

4

2 回答 2

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

HTTPS 不能与透明代理一起使用。有一些技巧,但它没有任何意义并且没用。

于 2012-05-23T21:09:57.187 回答
2
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 : 你的 squid 服务器
  • local-network:您的网络(在我的情况下是 192.168.0.0/24)
  • iptables-box:您的 iptables 软件所在的位置(通常是网关,在我的情况下为 192.168.1.1)

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

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

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

于 2014-04-07T16:45:08.863 回答