Пытается настроить прозрачность, балансировку нагрузки, SSL обратный прокси. Является ли это возможным?

Я провел несколько недель исследований по этой теме для проекта, и, к сожалению, я простая обезьяна кода, мои знания в области сетей и SSL ограничены. Практически каждый поиск, который я до сих пор проводил, приводил меня к ошибке сервера, где, как мне кажется, я пришел к выводу, что это может оказаться невозможным.

Мне в основном нужно разработать решение, которое будет принимать входящие https и беспрепятственно передавать их на кластер клонированных веб-серверов. Они все подают одинаковое точное содержание. Клиентский SSL не должен заканчиваться на балансировщике нагрузки. (https -> баланс нагрузки -> кластер)

Технически мой вопрос вводит в заблуждение, обратный прокси-сервер на самом деле не нужен, но все мои решения до сих пор были в некотором роде прокси-сервером. Мне просто нужно прозрачное решение для балансировки нагрузки SSL.

Вот что я пробовал до сих пор.

  • Apache 2.4.x mod_proxy: работал для кластера https -> proxy -> http ->. Полное решение ssl не удалось.

  • Фунт: Сработал https -> proxy -> https очень хорошо, однако сервер конечной точки получает сертификат / информацию сервера pound. Мне нужен сертификат клиента, потому что серверы конечных точек должны иметь возможность отзыва. (Отзыв не может быть обработан прокси /MITM из-за проблем безопасности).

Другие варианты, которые я изучаю: Squid, Charles, HAproxy, nginx, Charles, Pen и, возможно, некоторые другие, которые я не могу вспомнить, мой мозг в основном месиво на данный момент.

Перо может быть лучшим решением, так как это TCP-трафик и не должно требовать декодирования заголовков ssl для обработки трафика, но у меня возникли трудности с поиском информации о его настройке.

Аппаратное решение не за столом. Итак, я думаю, что вопросы 1. Это возможно? 2. Как бы это было лучше всего сделать (предпочтительнее дешевый / открытый исходный код)? Спасибо!

1 ответ

Решение

Просто подтверждаю, что вы не хотите, чтобы SSL заканчивался на балансировщике нагрузки? Таким образом, ваш сервер будет обслуживать https.

Это то, что я бы сделал. Под Ubuntu или Debian.

Настройте пару серверов в качестве ваших loadbalancer/proxy-серверов (для 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 - ваш виртуальный IP-адрес vrrp. xxxa, xxxb, xxxc, xxxd - это IP-адреса серверов с балансировкой нагрузки. Они могут безопасно находиться за брандмауэром, если вы предпочитаете.

Если вы выбрали опцию HA, убедитесь, что вы установили эту опцию в /etc/sysctl.conf:

net.ipv4.ip_nonlocal_bind = 1

Если один из серверов haproxy выходит из строя или служба haproxy останавливается, другой сервер подключается. Некоторые пользователи могут получить разорванные соединения, когда это произойдет, но обновление должно исправить это.

Это работает для меня, хотя моя установка немного отличается. Я прекращаю SSL на балансировщике нагрузки, а затем обслуживаю незашифрованный трафик с сервера.

Другие вопросы по тегам