我有一个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上的接口。
我一直都在搜索,但我找不到一个有效的例子。有没有一种有效的方法呢?
答案 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
其中:
第一个将数据包从iptables-box发送到squid-box。第二个确保回复通过iptables-box发回,而不是直接发送回客户端(这非常重要!)。最后一个确保iptables-box将相应的数据包转发到squid-box。可能不需要它。因人而异。注意,我们指定了'-i eth0'然后'-o eth0',它代表输入接口eth0和输出接口eth0。如果您的数据包进入和离开不同的接口,则需要相应地调整命令。
将这些命令添加到/etc/rc.d /
下的相应启动脚本中