答案1
最好的办法是将 squid 设置为透明模式,但您的网络图会发生变化。由于代理服务器会进行 NAT,因此它也会取代您的 cisco 作为路由器。(同时,为什么不移除您的 ISP 路由器以避免双重 NAT 呢?就好像有一天您想创建一些 VPN,但您无法在双重 NAT 中使用)
查看那里的教程;http://xmodulo.com/squid-transparent-web-proxy-centos-rhel.html
教程中有一些细节展示了他是如何做到的;
Squid 安装
要使用 Squid 设置透明代理,我们首先要添加必要的 iptables 规则。这些规则应该可以帮助您入门,但请确保它们不与任何现有配置冲突。
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT--到端口 3128第一条规则将使来自 eth1(WAN 接口)的所有出站数据包都具有 eth1 的源 IP 地址(即启用 NAT)。第二条规则将把来自 eth0(LAN 接口)的所有传入 HTTP 数据包(目的地为 TCP 80)重定向到 Squid 监听端口(TCP 3128),而不是立即将其转发到 WAN 接口。
答案2
请注意,拦截 http 连接会产生副作用,事实上,在我们产品的技术支持中(温盖特)虽然我们支持拦截连接,但我们建议不要这样做。
如果您在代理上使用身份验证,客户端不知道它正在与代理对话。如果代理想要对被拦截的客户端进行身份验证,它只能发回 401 响应(而不是 407),并且客户端会认为终端服务器正在请求身份验证。对于包含来自多个服务器的资源的页面,您可能会弹出多个登录对话框。
缓存的行为有所不同。有些代理特定的缓存指令在拦截与代理的连接时不起作用。
一些漏洞。在您提出的场景中,您将连接从 ASA 转移到代理,目的地由 ASA 重写,连接终止于代理。然后,代理仅使用主机标头作为建立上游连接的基础。这需要代理进行额外的 DNS 查找,这可能会导致与客户端查找站点时得到的答案不同的答案。此外,在某些情况下,客户端会使用被禁止站点的主机标头连接到允许的 IP。允许的 IP 通过了防火墙,但代理会查找主机标头并连接到不同的(被禁止的)IP。
您可能还想考虑如何处理 https。
免责声明:我为 Qbik 工作,他们是 WinGate 的作者。