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

Nav*_*een 7 iptables transparent-proxy proxy squid

我安排了一个透明的 Squid 代理,它侦听 localhost 上的端口 3128,以阻止一些网站。

我已经使用 Firefox 测试了代理,并且可以正常工作。

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

sudo iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 3128
Run Code Online (Sandbox Code Playgroud)

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

sudo iptables -L 显示未分配规则。

我使用的是 Ubuntu 13.04,并使用 3G USB 调制解调器 ( ppp0) 连接到 Internet。任何建议表示赞赏!

Joh*_*Siu 13

我认为您缺少目标端口,请尝试以下操作

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128
Run Code Online (Sandbox Code Playgroud)

如果没有dport,您会将目标端口 3128 的流量转发到本地端口 3128。您想要的是目标端口 80 的流量转发到本地端口 3128。

此外,要显示nat规则,请使用

iptables -t nat -L
Run Code Online (Sandbox Code Playgroud)

但是,上述规则不适用于浏览器同一台机器上的透明代理设置,因为PREROUTING链在从远程客户端路由之前更改包,并且它不会对本地生成的包做任何事情。因此,我们应该将OUTPUT链用于本地生成的从系统出去的数据包。

尝试关注

iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner proxy --dport 80 -j REDIRECT --to-port 3128
Run Code Online (Sandbox Code Playgroud)

它只会重定向proxy用户拥有的进程以外的进程的流量。

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

  • 'iptables -t nat -L' 的输出是什么 (2认同)