我想设置一个透明的 HTTP/HTTPS 代理,以根据目标主机名(域)过滤出站请求。代理本身应该是非侵入式的,只转发流量,而不是解密/修改流量。如果是 HTTPS,它应该使用 TLS SNI 扩展来提取主机名而不解密。
多个客户端将使用代理访问多个主机,因此代理应该查找发出请求的客户端是否允许使用给定的目标主机名。
使用 squid(最好是 3.3.8 版)可以实现吗?如果可以,您能否提供一个简单的示例配置来说明如何实现它?如果不可以,您能否推荐可以实现此目的的替代方案?
附加信息:
- 运行代理的服务器是 Ubuntu 14.04
- 流量重定向由另一个路由器覆盖到该服务器的固定端口
- 代理在转发请求时应照常使用 DNS 来解析目标主机名
非常感谢!
答案1
从 3.5 版开始,squid 就可以实现您的需求,因为您需要该版本中引入的“peek-and-splice”功能。您的操作称为“peek”:http://wiki.squid-cache.org/Features/SslPeekAndSplice。
使用类似:
https_port 3130 intercept ssl-bump
ssl_bump peek all
ssl_bump splice all
intercept
使代理变得透明。
我不太确定第三个要求(使用 DNS 名称),Squid 似乎在这种模式下非常透明。但如果有 SNI 信息,它应该会提取这些信息。
您可以在 ACL 中使用该信息:
acl aclname ssl::server_name .foo.com ...