iptables 不会将 http 流量重定向到我的 Squid 代理!

iptables 不会将 http 流量重定向到我的 Squid 代理!

我安排了一个透明的 Squid 代理,它监听本地主机的 3128 端口,以阻止一些网站。

我已经使用 Firefox 测试了该代理,并且它可以运行。

然后我运行了这个,希望将所有的 http 请求重定向到代理:

sudo iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 3128

遗憾的是,什么都没发生。我的系统中的其他浏览器似乎没有使用代理。我也不想配置每个浏览器来使用代理。

sudo iptables -L显示没有指定规则。

我使用的是 Ubuntu 13.04,并使用 3G USB 调制解调器 ( ppp0) 连接到互联网。任何建议都非常感谢!

答案1

我认为您错过了目的港,请尝试以下操作

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

没有端口,您正在将目标端口为 3128 的流量转发到本地端口 3128。您想要的是将目标端口为 80 的流量转发到本地端口 3128。

此外,为了展示纳特规则,使用

iptables -t nat -L

但是,上述规则不适用于在浏览器的同一台机器上设置的透明代理,因为预路由chain 在从远程客户端路由之前会修改数据包,并且不会对本地生成的数据包执行任何操作。因此我们应该使用输出从系统发出的本地生成的数据包的链。

尝试关注

iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner proxy --dport 80 -j REDIRECT --to-port 3128

它将仅重定向用户拥有的进程以外的进程的流量proxy

如果没有-m owner ! --uid-owner proxy,它将无法工作,因为规则也会捕获代理服务器的传出流量并最终陷入循环。

相关内容