我正在处理的配置是一个透明的 HTTP 代理:在防火墙上,所有 HTTP 流量(端口 80)都通过 iptables 重定向到代理;Dansguardian 安装在代理上,并过滤 URL。在网上阅读后,我意识到,如果我将 HTTPS 流量(端口 443)也重定向到代理,用户在指向 HTTPS 网站时会收到错误,这是正确的吗?
我发现解决这个问题的方法是:
- 我删除了防火墙上的重定向规则,用户在浏览器的连接选项中指定代理地址。他们是否必须为 HTTPS 流量指定不同的端口,或者可以为每个协议指定默认端口 (3128)?或者我必须在 squid.conf 上指定“https_port”指令?
- 我删除防火墙上的重定向规则并创建一个配置文件(proxy.pac / wpad.dat);用户在浏览器上指定此文件的URL,因此它会自动加载代理配置。
此时我的问题是:为什么这些解决方案适用于 HTTPS 流量而透明代理却不适用?
先感谢您。
答案1
当 https 流量到达透明代理时,只有 IP“可见”:没有足够的信息来重新创建连接请求并代理它。
当您在浏览器中设置代理(手动或通过 proxy.pac)时,浏览器知道向代理发送更多有关其所需内容的信息。
一些代理可以使用 SNI 信息透明地代理大多数 SSL 流量 - 然后对其进行域过滤(来自 sni 信息)或 MITM 并执行完整过滤工作。我为一家这样的过滤器供应商工作 -光滑墙(他们也雇佣了丹守护者丹)。
答案2
HTTPS 协议实现了 SSL,通常可确保完整性、不可否认性和机密性。尝试透明代理 HTTPS 流量是一种中间人行为,因此会破坏 SSL 通道。
如果您想在不破坏 SSL 通道的情况下代理 HTTPS 协议,您需要使用所谓的 CONNECT 隧道,客户端必须知道这一点(它将 SSL 包装在 HTTP CONNECT 中)。
他们是否必须为 HTTPS 流量指定不同的端口,或者可以为每个协议指定默认端口 (3128)?或者我必须在 squid.conf 上指定“https_port”指令?
CONNECT 隧道在 http_port 上工作
我删除防火墙上的重定向规则并创建一个配置文件(proxy.pac/wpad.dat);用户在浏览器上指定此文件的URL,因此它会自动加载代理配置。
您可以通过 DHCP 为用户提供 proxy.pac 的位置。