Русский
Русский
English
Статистика
Реклама

Укрощение строптивого HAPROXY. Работаем ssl lt--gt ssl с генерацией сертификатов отдельно на каждом сервере

В рамках данного туториала настроим реверс прокси для работы наших сайтов в прозрачном режиме за 10 минут. Поехали.


Мною была поставлена задача что бы на моем сервере под руководством Proxmox с пулом сайтов работала без проблем прозрачная маршрутизация между посетителем и конечным сайтом. Т.к. в инете полно мануалов по базовой настройке Haproxy я столкнулся с проблемой что 99% этих статей описывают работ прокси сервера в режиме терминации а дальше информация идет по не защищенному варианту (от прокси до конечной ВМ). Меня это не устроило и я начал искать по крупицам информацию в сети. К сожалению в нашем русскоязычном сегменте ее мало (читай нет) пришлось шерстить буржуйский сегмент. Конечный результат предлагаю вашему вниманию, думаю кому ни будь он точно сгодится.


globallog /dev/log    local0log /dev/log    local1 noticestats socket /haproxy-admin.sock mode 660 level adminstats timeout 30sdaemondefaultsmaxconn 2000mode http        log globaloption dontlognull # bind *:443 ssl crt .option http-server-closetimeout http-request 10stimeout connect         5000timeout client          50000timeout server         50000frontend statsbind *:5000stats enablestats uri /statsstats refresh 10sstats auth admin:mysupersecretpassword #поменяйте на свой пароль

Блок отвечающий за работу ssl на ssl

frontend env_ssl_frontendbind *:443mode tcpoption tcplogtcp-request inspect-delay 10stcp-request content accept if { req_ssl_hello_type 1 }use_backend bk_app1 if { req.ssl_sni -m end site1.ru }use_backend bk_app2 if { req.ssl_sni -m end counter.site1.ru }use_backend bk_app3 if { req.ssl_sni -m end site2.com }  use_backend bk_app4 if { req.ssl_sni -m end site3.msk.ru }use_backend bk_app5 if { req.ssl_sni -m end site4.ru }use_backend bk_app6 if { req.ssl_sni -m end site5.msk.ru }backend bk_app1mode tcpbalance leastconnoption tcp-check server main 192.168.1.26:443 send-proxy checkbackend bk_app2mode tcpbalance leastconnoption tcp-checkserver main 192.168.1.38:443 send-proxy checkbackend bk_app3mode tcpbalance leastconnoption tcp-checkserver main 192.168.1.37:443 send-proxy checkbackend bk_app4mode tcpbalance leastconnoption tcp-checkserver main 192.168.1.100:443 checkbackend bk_app5mode tcpbalance leastconnoption tcp-checkserver main 192.168.1.31:443 send-proxy checkbackend bk_app6balance leastconnmode tcpoption tcp-checkserver main 192.168.1.200:443 check

Блок отвечающий за работу сайтов на 80 порту

frontend public        bind *:80        # бок сайтов        acl host_subdomain1 hdr(host) -i site1.ru         acl host_subdomain2 hdr(host) -i counter.site1.ru        acl host_subdomain3 hdr(host) -i site2.com        acl host_subdomain4 hdr(host) -i site3.msk.ru        acl host_subdomain5 hdr(host) -i site4.ru        acl host_subdomain6 hdr(host) -i site5.msk.ru        ## блок acl         use_backend subdomain1 if host_subdomain1        use_backend subdomain2 if host_subdomain2        use_backend subdomain3 if host_subdomain3        use_backend subdomain4 if host_subdomain4        use_backend subdomain5 if host_subdomain5        use_backend subdomain6 if host_subdomain6backend subdomain1        option httpclose        option forwardfor        cookie JSESSIONID prefix        server subdomain-1 192.168.1.26:80 checkbackend subdomain2        option httpclose        option forwardfor        cookie JSESSIONID prefix        server subdomain-2 192.168.1.37:80 checkbackend subdomain3        option httpclose        option forwardfor        cookie JSESSIONID prefix        server subdomain-3 192.168.1.31:80 checkbackend subdomain4        option httpclose        option forwardfor        cookie JSESSIONID prefix        server subdomain-4 192.168.1.100:80 checkbackend subdomain5        option httpclose        option forwardfor        cookie JSESSIONID prefix        server subdomain-5 192.168.1.200:80 checkbackend subdomain6        option httpclose        option forwardfor        cookie JSESSIONID prefix        server subdomain-6 192.168.1.38:80 check    

Что мы получили в итоге:


  1. Генерация ssl сертификатов происходит на каждом сайте отдельно. Терминации на прокси сервере нет, идет прозрачное перенаправление на конечную машину которая и отдает посетителю свой ssl сертификат.
  2. Проблем с Яндексом и его роботом дятлом (который мониторит сайт на доступность) не имеем.
  3. Имеем быстрый и корректный отклик конечной машины для посетителей и поисковиков.
  4. В качестве небольшого бонуса, имеем страничку с статистикой работы прокси сервера и сайтов которые он обслуживает. Для этого перейдите на ip (например у меня 192.168.1.150:5000) на котором он работает с портом 5000 и наслаждайтесь. Логин admin а пароль который вы сами установили в верхней секции этого конфига.

Отдельно хочу сделать замечание касаемо этого файла конфигурации Haproxy.


Весьма вероятно, что когда вы добавите в свой пул сайтов на PROXMOKS-e еще N кол-во виртуальных машин и вам понадобится получить сертификат с Letsencrypt, у вас может не получится это, тк Haproxy не сможет корректно отработать запрос и от вашей машины и к вашей машине.
В таком случае (под диванного сервера) сделайте выход c роутера (или что там у вас) проброс портов на новую ВМ, хотя бы 80 порт и после получения сертификата верните обратно. По крайней мере я так вышел из этой ситуации. Подробнее о проблеме описано по ссылке


Как всегда, приветствуются конструктивные предложения и замечания.


Всем успехов!


PS Сам реверс прокси у меня поднят и прекрасно себя чувствует на Ubuntu 18.04 которая идет в шаблонах Proxmox-a. По началу я его запускал в режиме полноценной виртуалки но это решение себя не оправдало тк потребляло изрядную процессорную и прочие ресурсы хост машины. С переводом прокси сервера на LXC контейнер потребление по ресурсам упало почти до пары единиц процентов ресурсов хост машины и можно сказать что ничего не потребляет.

Источник: habr.com
К списку статей
Опубликовано: 01.02.2021 02:11:10
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Настройка linux

Системное администрирование

*nix

Сетевые технологии

Haproxy

Proxy-server

Ubuntu server

System administration

Linux

Ssl/tls

Домашний сервер

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru