尝试设置透明、负载平衡、SSL 反向代理。可以吗?

尝试设置透明、负载平衡、SSL 反向代理。可以吗?

我已经为一个项目对这个主题进行了几周的研究,不幸的是,我只是个简单的代码猿,我对网络和 SSL 的了解有限。到目前为止,我所做的几乎每一次搜索都让我找到了 serverfault,我相信我得出的结论是这可能是不可能的。

我基本上需要开发一种解决方案,该解决方案将接收传入的 https 并将其无缝传递到克隆的 Web 服务器集群。它们都提供完全相同的内容。客户端 SSL 不应在负载均衡器处终止。(https -> 负载均衡 -> 集群)

所以从技术上讲,我的问题具有误导性,反向代理并不是真正必要的,但到目前为止,我的所有解决方案都倾向于某种代理。我只是需要一个透明的 SSL 负载平衡解决方案。

这是迄今为止我尝试过的。

  • Apache 2.4.x mod_proxy:适用于 https -> 代理 -> http -> 集群。完整 ssl 解决方案失败。

  • Pound:https -> 代理 -> https 运行良好,但是端点服务器接收 Pound 服务器的证书/信息。我需要客户端证书,因为端点服务器需要能够执行撤销。(出于安全考虑,代理/MITM 无法处理撤销)。

我研究过的其他选项有:Squid、Charles、HAproxy、nginx、Charles、Pen,也许还有一些我不记得了,我的大脑现在基本上一片混乱。

Pen 可能是最好的解决方案,因为它是 TCP 流量,不需要解码 ssl 标头来处理流量,但我很难找到有关配置它的信息。

硬件解决方案并非不可能。所以我想问题是 1. 这可能吗?2. 最好的解决方案是什么(最好是便宜的/开源的)?谢谢!

答案1

确认一下,您不希望 SSL 在负载均衡器处终止?因此您的后端服务器将提供 https。

这就是我要做的。在 Ubuntu 或 Debian 下。

设置几台服务器作为负载均衡器/代理服务器(如果需要,可以实现 HA)。它们不需要非常高端,但要合理。

1)安装keepalived

sudo apt-get 安装 keepalived

2)像这样设置/etc/keepalived/keepalived.conf:

vrrp_script chk_haproxy {
   script "killall -0 haproxy"   # verify the pid existance
   interval 2                    # check every 2 seconds
   weight 2                      # add 2 points of prio if OK
}

vrrp_instance VI_1 {
   interface eth0                # interface to monitor
   virtual_router_id 51          # Assign one ID for this route
   priority 100                  # 101 on master, 100 on backup
   nopreempt
   virtual_ipaddress {
       a.b.c.d             # the virtual IP
   }
   track_script {
     chk_haproxy
   }
}

2)安装haproxy

sudo apt-get 安装 haproxy

3)使用如下配置设置 /etc/haproxy/haproxy.cfg:

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        chroot /var/lib/haproxy
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    tcp
        option  dontlognull
        option  redispatch
        retries 3
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000


listen myproxy a.b.c.d:443
        mode tcp
        option tcplog
        balance leastconn

        server http1 x.x.x.a:443
        server http2 x.x.x.b:443
        server http3 x.x.x.c:443
        server http4 x.x.x.d:443

它的作用是使用 TCP 模式(无 https)。如果您想要 https,您可以在它前面安装 stud 或类似程序(在同一台服务器上)。

abcd 是您的 vrrp 虚拟 IP 地址。xxxa、xxxb、xxxc、xxxd 是负载平衡服务器的 IP。如果您愿意,这些可以安全地位于防火墙后面。

如果您选择了 HA 选项,请确保在 /etc/sysctl.conf 中设置此选项:

net.ipv4.ip_nonlocal_bind = 1

如果其中一个 haproxy 服务器出现故障或 haproxy 服务停止,则另一个服务器将介入。发生这种情况时,某些用户的连接可能会断开,但刷新应该可以解决这个问题。

这对我来说是可行的,尽管我的设置略有不同。我在负载均衡器上终止 SSL,然后从后端提供未加密的流量。

相关内容