![如何使用 iptables 连接代理服务器](https://linux22.com/image/1349268/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20iptables%20%E8%BF%9E%E6%8E%A5%E4%BB%A3%E7%90%86%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
在我的公司,所有 http 和 https 都必须连接到代理服务器,这意味着我们必须在我们的网络浏览器中设置代理。
我们部门有内部网络(192.168.0.xxx
)。我使用Linux服务器作为路由器,使用iptables设置NAT。
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
现在Linux路由器已经运行正常了,我们可以设置代理来访问Internet了。
我的问题是:我想使用Linux路由器连接代理服务器,这样我们内网(192.168.0.xxx
)里的电脑就不用设置代理就可以访问互联网了。
这可能吗?
答案1
尝试这个规则:
iptables -t nat -A PREROUTING -i eth0 -s ! 192.168.0.2 -p tcp --dport 80 -j DNAT --to 192.168.0.2:3128
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -d 192.168.0.2 -j SNAT --to 192.168.0.1
iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.0.2 -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT
在哪里:
192.168.0.2 - proxy server IP (Squid, etc);
192.168.0.1 - router IP (where started iptables);
192.168.0.0/24 - your local network
我可能错了,请仔细检查。
答案2
在没有测试的情况下,我认为解决方案@ymn 对 HTTP 有效,但我认为您无法避免为 HTTPS 指定等效行 - 事实上,任何此类解决方案都应该抛出证书错误等,因为您实际上是在对自己的网络进行中间人攻击。
(您也许可以在一定程度上解决这个问题,但这不是一个好主意,因为您正在剥夺 SSL 提供的安全性。请查看 sslstrip -http://www.thoughtcrime.org/software/sslstrip/)
也许一个更好的折衷方案是尝试进行代理自动配置(使用 DHCP 的 WPAD)- http://wiki.squid-cache.org/SquidFaq/ConfiguringBrowsers#Fully_Automatically_Configuring_Browsers_for_WPAD