Haproxy 背后的 Squid 代理

Haproxy 背后的 Squid 代理

在我的配置中,我主要使用 Haproxy 进行反向代理。

我在我的私有局域网中安装了 Squid Proxy,我可以通过端口 3128 从外部访问它。但我使用基本身份验证 ncsa,并且标头未加密,所以我的登录很容易受到攻击。我想通过 haproxy 转发我的代理。

[客户端]->proxy.example.net->[haproxy:443 ssl]->[squid:3128]

我在我的 haproxy 配置中添加了一个新的后端:

frontend www-https
    bind *:443 ssl crt /etc/haproxy/ssl/fullchain.pem no-sslv3
    log global
    mode http
    use_backend proxy-squid if { ssl_fc_sni proxy.example.com }
    use_backend default if { ssl_fc_sni example.com }
    default_backend default

backend default
    option forwardfor
    server d8-apps 127.0.0.1:8000 #nginx

backend proxy-squid
    mode http
    option forwardfor
    option http-server-close
    server d8-apps 127.0.0.1:3128

我的默认后端和其他后端都运行正常,但 proxy-squid 不行。我在请求期间发现“tcpdump -nX -vv -i lo port 3128”,但什么也没发生……而且在端口 443 上,我看到许多数据包的校验和不正确。

在 Wireshark 中,我没有看到像访问 example.com(默认后端)时那样的 SSL 握手。我只看到 3 次握手 tcp,然后是 FIN、ACK。

当我在浏览器配置中设置代理时,我认为 Haproxy 无法理解我的真实请求。那么,是否可以通过特定配置来实现这一点?

谢谢!

答案1

HTTP 包含多种不同的消息语法,可用于不同情况。发送到服务器(或反向代理)的消息与发送到代理的消息截然不同。

由于您已将 haproxy 设置为反向代理,因此它不允许浏览器设置 HTTPS 隧道所需的消息。

由于您真正想做的只是保护与 Squid 的连接,我建议您让它在 https_port 上监听来自浏览器的连接。当然,这需要使用代理公共主机名设置 TLS 证书。请注意,这是不是与反向代理(使用原始服务器域名)使用的证书详细信息相同。

Firefox 和 Chrome 在配置为通过 PAC 文件或 https_proxy= 环境变量使用显式代理时显然支持 TLS。在这两种情况下,代理 URI 都应使用 https:// 方案,而传统上人们会使用 http:// 方案。

(我说显然是因为我自己还没有尝试过。其他人的结果不一,但浏览器人员一直说这是可能的)。

相关内容