Пытается настроить прозрачность, балансировку нагрузки, 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 на балансировщике нагрузки, а затем обслуживаю незашифрованный трафик с сервера.