强制LAN主机通过代理

我在Debian服务器上有一个IPTables防火墙,有一大堆主机在伪装。 在上游networking,我没有直接访问互联网,我需要通过代理服务器才能访问网站。

我希望防火墙后面的主机自动通过代理服务器,而不需要每个主机都需要自己设置代理(主要是因为我希望能够在一个点上更改代理地址,因为我有不同的代理networking场景)。

有没有办法让IPTables强制端口80和443上的所有传出stream量通过代理? 如果没有,我可以使用其他一些现成的软件来获得我需要的行为吗?

至less有两种方法可以做到这一点:

  1. 代理自动configurationURL通过DHCP
  2. 使用iptables透明代理redirect

第一个选项使用WPAD机制:

在你的DHCP服务器configuration中,你必须包含选项252(例如dhcpd):

option local-proxy-config code 252 = text; ... subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.20 192.168.0.30; ... option local-proxy-config "http://your_http_server/proxy.pac"; } 

你的proxy.pac只是一些JS,告诉浏览器代理(例如):

 function FindProxyForURL(url, host) { var proxy = "PROXY your_proxy_server:3128; DIRECT"; var direct = "DIRECT"; // no proxy for local hosts without domain: if(isPlainHostName(host)) return direct; // proxy everything else: return proxy; } 

第二个select是使用iptables透明地redirecthttpstream量(例如):

 iptables -t nat -A PREROUTING -i eth0 -s ! your_proxy_server -p tcp --dport 80 -j DNAT --to your_proxy_server:3128 iptables -t nat -A POSTROUTING -o eth0 -s local-network -d your_proxy_server -j SNAT --to iptables-box iptables -A FORWARD -s local-network -d your_proxy_server -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT 

是的,你可以,它被称为透明拦截代理。 只需将stream量redirect到鱿鱼,并将其configuration为透明代理。

顺便说一下,在客户端上手动部署代理configuration是有好处的。 如果有什么东西直接与你的代理人谈话,你知道有一些奇怪的东西。 你可以定义代理不是通过IP,而是通过一个主机名,因此你可以改变引用这个主机名的IP。