Рейтинг:0

Возможен ли HAProxy перед Stunnel с SNI?

флаг cn

У меня есть работающая терминация SSL с STunnel перед HAproxy.

Недавно передо мной встал вопрос о добавлении поддержки HTTP/2. Это легко с HAProxy, но в качестве ограничения STunnel должен остаться.

Причина, по которой STunnel необходимо оставить, — около 17 000 строк SNI и возможность управления ими через уже существующий API.

Я вполне мог бы добавить список сертификатов для HAProxy, содержащий SNI, пара greps и echo сделают галочку.

Однако во время моих поисков я еще не нашел никого, кто ставил HAProxy перед STunnel перед HAProxy. Это неправильный подход?

Вот над чем я уже начал работать (пока нет SNI — 17000 из них было бы слишком много для поста):

Интерфейс HAProxy (где мне нужно добавить поддержку HTTP/2) с шифрованием в сторону STunnel:

слушать интерфейс
привязать 192.168.1.100:443 прозрачный  
режим http  
сервер stunnel 127.0.0.100:443 ssl проверить нет

СТуннель

[STunnel]
    сертификат = /etc/ssl/certs/cert.pem
    шифры =
ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256
-SHA384:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA
256:AES256-GCM-SHA384:AES256-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-
RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-
RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:AES128-GCM-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA
    принять = 127.0.0.100:443
    подключить = 127.0.0.100:80
    задержка = да
    параметры = NO_SSLv3
    параметры = NO_TLSv1
    параметры = NO_TLSv1.1
    параметры = NO_TLSv1.3
    параметры = CIPHER_SERVER_PREFERENCE
    варианты = DONT_INSERT_EMPTY_FRAGMENTS
    пересмотр = нет
    протокол = прокси
    местный = 127.0.0.100
    ТАЙМ-АУТclose = 0

HAProxy "бэкэнд"

слушать Интернет
ââââbind 127.0.0.100:80 прозрачный accept-proxy
в режиме http
ââââбаланса
ââââacl SSL-443 src 127.0.0.100
ââââtcp-запрос соединения ожидаемый прокси-уровень4, если STunnel
опция http-keep-alive
ââââтаймаут http-запроса 5s
ââââтайм-аут туннеля 1h
✓ возможность повторной отправки
ââââвариант abortonclose
✅maxconn 40000
❗опция httplog
ââââсервер server1 192.168.1.98:80 проверить
сервер server2 192.168.1.99:80 проверить

Я предположил, что от HAProxy до STunnel требуется шифрование, и мне нужно будет учитывать любые несоответствия протоколов между ними.

Что такое STunnel версия HAProxy? соединение tcp-запроса ожидаемый прокси-уровень 4, если STunnel было бы?

Любая помощь в получении поддержки HTTP/2 с STunnel приветствуется, а также получение «Не делайте этого, это неправильно».

Спасибо,

Marco avatar
флаг in
Я предполагаю, что haproxy в любом случае нужны SNI (сертификаты), потому что он должен обрабатывать контакт с клиентом. Как это сделать без сертификатов?
Marco avatar
флаг in
Если haproxy не имеет сертификатов, он не может видеть содержимое запроса и не может общаться с клиентом по протоколу HTTP/2. Вы хотите поместить данные в stunnel без изменений, но это означает, что stunnel должен выполнять HTTP/2, и вы только начинаете. Резюме: будет работать только в том случае, если у hproxy есть сертификаты для расшифровки ssl и повторного шифрования для отправки в stunnel. Может работать, но может привести к проблемам с производительностью.
Ai N. avatar
флаг cn
@ Марко, это была и моя мысль. И я не могу использовать подстановочный знак или фиктивный сертификат из-за SNI, которые должны быть во внешнем интерфейсе. Надеялся, что смогу сделать гибридную конфигурацию сквозной разгрузки. В любом случае, теперь я перемещаю все в HAProxy, делаю список сертификатов и динамически обновляю его, используя эту [ссылку] (https://www.haproxy.com/blog/dynamic-ssl-certificate-storage-in-haproxy/ )
Marco avatar
флаг in
Я бы выбросил stunnel и использовал только haproxy. Обработка сертификатов в haproxy очень проста, просто поместите их все в один каталог. haproxy сам находит тот, который можно использовать. Но у меня нет 17000 в моей среде. Я думаю, что более новые версии haproxy обнаруживают изменения и перезагружаются. Лучше всего протестировать его на другом порту параллельно с вашей конфигурацией stunnel.
Ai N. avatar
флаг cn
@Marco Я решил перенести все это на HAProxy, это имеет смысл (плюс, я знаю несколько версий, в которых STunnel дал сбой). Не могли бы вы опубликовать свой комментарий в качестве ответа, чтобы я мог его принять? Большое тебе спасибо.
Рейтинг:0
флаг in

хапрокси может видеть данные (протокола HTTP/2) только в том случае, если у него есть сертификаты, которые расшифровывают ssl. Средства хапрокси нужны те же сертификаты, что и оглушать.

Если бы это сработало каким-то образом, это означало бы расшифровать его для хапрокси и зашифровать его снова для оглушать, чтобы снова расшифровать.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.