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,它将无法工作,因为规则还将捕获代理服务器的传出流量并最终陷入循环。