我有一个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
哪里:
第一个将数据包从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