⏳ Настройка балансировщика нагрузки HAProxy с SSL в Ubuntu 18.04 / Debian 10/9 — Information Security Squad

⏳ Настройка балансировщика нагрузки HAProxy с SSL в Ubuntu 18.04 / Debian 10/9

В этом руководстве мы узнаем, как настроить балансировщик нагрузки HAProxy с SSL в Ubuntu 18.04 / Debian 10/9.

HAProxy — это де-факторное решение с открытым исходным кодом, обеспечивающее очень быструю и надежную высокую доступность, балансировку нагрузки и прокси для приложений на базе TCP и HTTP.

Таким образом, HAProxy подходит для веб-сайтов с очень высоким показателем трафика.

Настройте балансировщик нагрузки HAProxy с помощью SSL в Ubuntu 18.04 / Debian 10/9

В этом руководстве мы продемонстрируем, как HAProxy выполняет балансировку нагрузки с использованием трех веб-серверов, обслуживающих простые HTML-страницы.

Наша архитектура выглядит как показано на схеме ниже;

Установите HAProxy в Ubuntu 18.04 / Debian 10 / Debian 9

Запустите обновление системы.

apt update
apt upgrade

После завершения обновления перейдите к установке HAProxy в ваших системах Ubuntu / Debian.

Создайте HAProxy репозиторий

Для каждой системы существуют разные пакеты HAProxy.

Следовательно, вам нужно создать отдельный репозиторий для каждой системы.

Прежде чем вы сможете создать репозитории, установите ключ подписи APT.

apt install curl -y
curl https://haproxy.debian.net/bernat.debian.org.gpg | apt-key add -

Затем создайте репозитории HAProxy.

На Debian 10 Buster / Debian 9 Stretch выполните команду, показанную ниже, чтобы создать репо.

echo "deb http://haproxy.debian.net $(lsb_release -cs)-backports-2.0 main" | tee /etc/apt/sources.list.d/haproxy.list

В Ubuntu 18.04 вам нужно добавить репозитории vbernat haproxy PPA, как показано ниже;

apt install software-properties-common
add-apt-repository ppa:vbernat/haproxy-2.0

Как только репозитории созданы в каждой системе, выполните обновление системы и установите HAProxy.

apt update
apt install haproxy=2.0.\*

Чтобы проверить версию установленного HAProxy, выполните команду ниже;

haproxy -v
HA-Proxy version 2.0.1-1~bpo9+1 2019/06/27 - https://haproxy.org/

Настройте балансировщик нагрузки HAProxy в Ubuntu 18.04 / Debian 10/9

Конфигурация HAProxy — это все то, где он прослушивает запросы на соединение и куда направляет такие запросы.

Поэтому он состоит из системы внешнего интерфейса и одной или нескольких внутренних систем.

Внешняя система определяет IP-адрес и порт, который прослушивает прокси-сервер, а также внутренние системы для использования для конкретного прокси.

Основной файл конфигурации для HAProxy — /etc/haproxy/haproxy.cfg.

Файл конфигурации HAProxy состоит из четырех разделов;

  • global
    раздел определяет настройки безопасности и производительности в рамках всего процесса, которые влияют на HAProxy на низком уровне.
  • defaults
    Раздел  global определяет параметры конфигурации, которые применяются ко всем внешним и внутренним разделам. Вы можете определить несколько разделов по умолчанию, но последующие разделы по умолчанию переопределяют предшествующие ему.
  • frontend
    Когда HAProxy размещается в качестве обратного прокси-сервера, в разделе внешнего интерфейса определяются IP-адреса и порты, к которым могут подключаться клиенты.
  • backend
    Этот раздел определяет группу серверов, которые будут сбалансированы по нагрузке и назначены для обработки запросов.

Секции frontend и backend могут быть объединены с использованием секции listen.

Они также могут быть использованы для страницы статистики сервера HAProxy.

Чтобы узнать больше об объяснении разделов конфигурации HAProxy, посмотрите информацию тут.

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

cp /etc/haproxy/haproxy.cfg{,.bak}

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

global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # Default ciphers to use on SSL-enabled listening sockets.
        # For more information, see ciphers(1SSL). This list is from:
        #  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
        # An alternative list with additional directives can be obtained from
        #  https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
        ssl-default-bind-options no-sslv3
        ## Add the line below
        tune.ssl.default-dh-param 2048

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

Мы оставим эти настройки такими, какие они есть, и добавим наши конфигурации для разделов frontend и backend.

Однако вы можете добавить строку tune.ssl.default-dh-param 2048 в глобальный раздел, который устанавливает максимальный размер параметров Диффи-Хеллмана, используемых для генерации эфемерного / временного ключа Диффи-Хеллмана в случае обмена ключами DHE.

Настройте HAProxy с SSL на Ubuntu 18.04 / Debian 10/9

Как указано выше, раздел внешнего интерфейса определяет IP-адрес, на котором следует прослушивать запросы на подключение.

Поскольку мы настраиваем HAProxy с SSL, вам необходимо сгенерировать сертификаты SSL / TLS.

В этом руководстве используются самоподписанные сертификаты.

Вы можете получить свой собственный от доверенного CA.

Создание самоподписанных сертификатов SSL для HAProxy

Начните с генерации закрытого ключа.

openssl genrsa -out /etc/ssl/private/haproxy.key 2048

Затем сгенерируйте запрос на подпись сертификата (CSR).

openssl req -new -key /etc/ssl/private/haproxy.key -out /etc/ssl/certs/haproxy.csr

Создайте самоподписанный сертификат (CRT)

openssl x509 -req -days 365 -in /etc/ssl/certs/haproxy.csr -signkey /etc/ssl/private/haproxy.key -out /etc/ssl/certs/haproxy.crt

Создайте файл pem SSL, содержащий ключ и сертификат.

cat /etc/ssl/private/haproxy.key /etc/ssl/certs/haproxy.crt >> /etc/ssl/certs/haproxy.pem

Определите параметры конфигурации внешнего интерфейса HAProxy

Откройте файл конфигурации HAProxy и настройте параметры внешнего интерфейса, как показано ниже;

vim /etc/haproxy/haproxy.cfg

Это наши основные настройки конфигурации интерфейса.

frontend lb_01
    bind 192.168.43.62:443 ssl crt /etc/ssl/certs/haproxy.pem
    default_backend webapp_backends
  • Параметр bind назначает слушателя для данного IP-адреса и порта. ssl crt инструктирует HAProxy использовать SSL.
  • default_backend дает имя бэкенда для отправки трафика.

Определите настройки конфигурации HAProxy Backend

В базовой конфигурации настройки внешнего бэкенда определены ниже;

backend webapp_backends
    balance roundrobin
    server webapp_01.example.com  192.168.43.252:80
    server webapp_02.example.com  192.168.43.174:80
    server webapp_03.example.com  192.168.43.21:80

Настройка balance определяет алгоритм планирования балансировки нагрузки.
Roundrobin выбирает серверы по очереди.
Другие распространенные алгоритмы включаютe leastconn, которые позволяют балансировщику нагрузки пересылать запросы на серверы с наименьшим количеством соединений.

настройки server указывает серверы, доступные в бэкэнде.

Включить статистику HAProxy через Интернет

listen stats
    bind 192.168.43.62:443 ssl crt /etc/ssl/certs/haproxy.pem
    stats enable                    # enable statistics reports  
    stats hide-version              # Hide the version of HAProxy
    stats refresh 30s               # HAProxy refresh time
    stats show-node                 # Shows the hostname of the node
    stats auth admin:P@ssword       # Authentication for Stats page
    stats uri /lb_stats             # Statistics URL

Проверьте конфигурацию HAProxy

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

haproxy -c -f /etc/haproxy/haproxy.cfg
Configuration file is valid

Запуск HAProxy

После установки HAProxy настроен на запуск по умолчанию.

Перезапустите и разрешите запуск HAProxy при загрузке системы;

systemctl restart haproxy
systemctl enable haproxy

Проверьте статус;

systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
   Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-07-12 23:22:58 EAT; 5s ago
     Docs: man:haproxy(1)
           file:/usr/share/doc/haproxy/configuration.txt.gz
  Process: 10686 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=0/SUCCESS)
 Main PID: 10687 (haproxy)
    Tasks: 2 (limit: 2340)
   CGroup: /system.slice/haproxy.service
           ├─10687 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
           └─10688 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock

Если UFW работает, откройте порт 443,

ufw allow 443

Проверьте балансировку нагрузки HAProxy

Теперь, когда настройка завершена, вы можете получить доступ к вашему HAProxy из Интернета, чтобы увидеть, выполняет ли он какую-либо циклическую балансировку нагрузки, используя адрес https://<haproxy-IP>.

Первая страница загрузки показывает контент-сервер из webapp_01.

Для этой демонстрации у нас есть три тестовых HTML-страницы.

При обновлении отображается содержимое с других серверов.

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

Вот и все, что касается нашего основного руководства по настройке HAProxy Load Balancer с самоподписанным сертификатом в Ubuntu 18.04 / Debian 10 / Debian 9.

 

cryptoparty

Cryptography is typically bypassed, not penetrated.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

5e7fa976b0640d40