配置 Squid 让特定主机的 SSL 流量通过而不是拦截它

配置 Squid 让特定主机的 SSL 流量通过而不是拦截它

我目前正在 pfSense 盒子上使用 squid 来拦截 SSL,效果很好。现在的问题是 WhatsApp Web 无法通过此代理工作,因为它无法按预期进行握手过程,这导致 squid 终止此连接。

是否可以将特定目标从 squid 中的 SSL 拦截中排除以防止出现此问题?

答案1

您所要求的是不可能的。您显然想要实现的目标需要做其他事情。

因为拦截实际上是由 pfSense NAT 系统完成的。Squid 只是接收拦截的 TCP 连接并执行 TLS 解密部分的进程。

旁路拦截需要更改 pfSense NAT 配置。一旦数据包到达 Squid 就太晚了 - 唯一的选择是代理或终止。但是,提前检测任何特定的 TCP SYN 数据包是否会变成 HTTPS 或 WhatsApp 连接是一个问题。因此绕过拦截通常是不值得的。

所以你实际上要做的是在 SSL-Bump 处理期间在 Squid 中检测这些,然后隧道(不绕过)通过代理的相关流量。

如果流量实际上是 TLS 但不可解密(使用 TLS SNI 和/或服务器证书详细信息来决定是否拼接),Squid-3.5 可以使用“ssl_bump 拼接”操作来实现这一点。如果这还不够,Squid-4 提供了一个http://www.squid-cache.org/Doc/config/on_unsupported_protocol/用于在端口 443 上传输非 TLS 隧道流量的功能。

答案2

是的,完全可行,尽管 7 年前可能还没有,但现在有一个例子可以做到这一点:

    # Example: Bump all TLS connections except those originating from
    # localhost or those going to example.com.

    acl broken_sites ssl::server_name .example.com
    ssl_bump splice localhost
    ssl_bump splice broken_sites
    ssl_bump bump all

http://squid-cache.org/Doc/config/ssl_bump/

相关内容