Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
HAProxy-Keepalived-Sec-HighLoads — ✨ HAProxy и Keepalived рассматривает тему load balancer и cluster, а также безопасность(слабое использование SSL/Криптографии (LOGJAM) (CVE-2015-4000) мера предотвращения уязвимости) и защиту от высоких нагрузок. | Kitploit
Инструменты/GitHubGitHub/fatlan/haproxy-keepalived-sec-highloads
Сканеры уязвимостейАудит конфигурацииСетевая безопасность
GitHubfatlan/haproxy-keepalived-sec-highloads

HAProxy-Keepalived-Sec-HighLoads

✨ HAProxy и Keepalived рассматривает тему load balancer и cluster, а также безопасность(слабое использование SSL/Криптографии (LOGJAM) (CVE-2015-4000) мера предотвращения уязвимости) и защиту от высоких нагрузок.

Репозиторий

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
623 лет назадЕщё не проверено

Установка и настройка HAProxy и Keepalived (LoadBalancer+Cluster+Sec+HighLoads)

Crepe

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

Keepalived — это программное обеспечение с открытым исходным кодом, способное обеспечить возможность IP failover (отказоустойчивость) для более чем двух серверов. Keepalived использует между собой технику связи Multicast.

В нашей архитектуре мы будем использовать HAProxy для балансировки нагрузки, а Keepalived — для переключения IP, то есть для превращения нашей HAProxy архитектуры в Cluster.

В нашем сценарии имеется 3 сервера. На эти 3 сервера мы установим HAProxy, чтобы сделать их балансировщиками нагрузки. Затем, установив службу Keepalived, при отключении одного из серверов мы будем выполнять IP failover, переключаясь на другой сервер без прерывания работы, тем самым обеспечивая работу нашего сервиса балансировки нагрузки.

Для этого мы будем использовать 4 IP-адреса (адреса полностью вымышленные)

  1. Сервер : 10.10.5.13
  2. Сервер : 10.10.5.14
  3. Сервер : 10.10.5.15
  4. Виртуальный IP Keepalived : 10.10.5.5

Теперь установим службы HAProxy и Keepalived на всех 3 серверах, как показано ниже.

root@kitploit:~
sudo add-apt-repository ppa:vbernat/haproxy-2.7 -y
sudo apt update
sudo apt install haproxy keepalived -y
sudo openssl dhparam -out /etc/haproxy/dhparams.pem 2048

Прим1: На серверах должно быть установлено "net.ipv4.ip_nonlocal_bind=1". В противном случае конфигурация для HAProxy не сможет одновременно содержать один и тот же IP-адрес, что вызовет ошибку привязки, и служба не будет работать. Для этого необходимо выполнить следующие действия.

Сначала отредактируйте файл "vi /etc/sysctl.conf", вставьте приведенный ниже параметр, сохраните и выйдите.

root@kitploit:~
net.ipv4.ip_nonlocal_bind=1

Затем выполните следующую команду.

root@kitploit:~
sysctl -p

Прим2: Если вы будете использовать SSL на 443 порту, в каталоге "/etc/ssl/private/" должен находиться файл "haproxy.pem" с объединёнными SSL-сертификатами (***.crt, .ca, .key).

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

HAPoxy

Для этого вам нужно отредактировать файл "/etc/haproxy/haproxy.cfg". Приведенная ниже конфигурация поддерживает минимум HAv2.

root@kitploit:~
vi /etc/haproxy/haproxy.cfg

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

root@kitploit:~
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
#        maxconn 100000 #replaceable


        # 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
	ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
	ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
	ssl-dh-param-file /etc/haproxy/dhparams.pem
	#tune.ssl.default-dh-param 2048


#	nbproc 1
#	nbthread 8

	tune.maxrewrite 16384
	tune.bufsize 32768

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
	option forwardfor
#        maxconn 1000000 #replaceable
        timeout connect 3000000
        timeout client  6000000
        timeout server  6000000
        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

Раздел конфигурации Dashboard для HAProxy (добавлена интеграция с prometheus для мониторинга).

root@kitploit:~
listen stats
        bind fatlan.com:8989
        mode http
        stats enable
        stats uri /stats
        option http-use-htx
        http-request use-service prometheus-exporter if { path /metrics }
        #stats hide-version
        stats realm HAProxy\ Statistics
        stats auth admin:admin

В приведенной ниже конфигурации в двух блоках используется ACL. В первом блоке, если в ссылке где-либо встречается слово "rest", будет выполняться блок middleware-fatlan-backend; во втором блоке при запросе другого домена (forum.fatlan.com) будет выполняться backend fatlan-forum-backend; все остальные запросы, кроме перенаправления на другие порты, будут выполняться в блоке fatlan-backend443.

Раздел перенаправления 80 порта на 443 порт.

root@kitploit:~
frontend fatlan80
        bind fatlan.com:80
        mode http
        redirect scheme https if !{ ssl_fc }

frontend fatlan443
        bind fatlan.com:443 ssl crt /etc/ssl/private/haproxy.pem ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
        option httplog
	option forwardfor
 	#http-request set-header X-Client-IP req.hdr_ip([X-Forwarded-For])
        #option forwardfor except 127.0.0.0/8
        option http-server-close
	http-request set-header X-Forwarded-Proto https
#        reqadd X-Forwarded-Proto:\ https #old config
        mode http
        default_backend fatlan-backend443

Пример конфигурации ACL (proxypass): если в ссылке где-либо встречается слово rest, то перенаправлять.

root@kitploit:~
        acl middleware-fatlan path_beg /rest
        use_backend middleware-fatlan-backend if middleware-fatlan

ACL для перенаправления на другой хост forum.

root@kitploit:~
    	acl host_fatlanforum hdr(host) -i forum.fatlan.com
    	use_backend fatlan-forum-backend if host_fatlanforum

Раздел перенаправления по умолчанию, для 443.

root@kitploit:~
backend fatlan-backend443
        mode http
        balance roundrobin
        stick store-request src
        stick-table type ip size 256k expire 30m
        option forwardfor
#        option httplog
        option httpchk HEAD /
	
        server frontend_01 10.10.37.12:8001 check port 8001 inter 3000 rise 2 fall 3
        server frontend_02 10.10.37.13:8001 check port 8001 inter 3000 rise 2 fall 3

Раздел, куда перенаправляется запрос по ACL с rest.

root@kitploit:~
backend middleware-fatlan-backend
        mode http
        balance roundrobin
        stick store-request src
        stick-table type ip size 256k expire 30m
        option forwardfor
#        option httplog
        option httpchk OPTIONS /login HTTP/1.0
        http-check expect status 200
	http-request replace-path (.*)(?:rest\/)(.*) \1\2
#        reqrep ^([^\ :]*)\ /rest[/]?(.*) \1\ //\2  #old config 
	
        server middleware_01 10.10.37.34:3000 check port 4000 inter 12000 rise 3 fall 3
        server middleware_02 10.10.37.35:3000 check port 4000 inter 12000 rise 3 fall 3

Раздел, куда перенаправляется запрос по ACL с forum.

root@kitploit:~
backend fatlan-forum-backend
        mode http
        option forwardfor
#        option httplog
        option httpchk HEAD /
	
        server forum_01 10.10.37.45:8080 check port 8080 inter 3000 rise 2 fall 3

Внешние примеры также могут быть настроены следующим образом.

Пример для порта 5000;

root@kitploit:~
frontend Panel5000
        bind fatlan.com:5000
#        option httplog
        option forwardfor except 127.0.0.0/8
        #option http-server-close
	http-request set-header X-Forwarded-Proto https
#        reqadd X-Forwarded-Proto:\ https #old config
        mode http
        default_backend panel-backend5000

Раздел перенаправления порта 5000.

root@kitploit:~
backend panel-backend5000
        mode http
        balance roundrobin
        stick store-request src
        stick-table type ip size 256k expire 30m
        option forwardfor
#        option httplog
        option httpchk HEAD /
	
        server panel_01 10.10.37.43:5000 check port 5000 inter 12000 rise 3 fall 3
        server panel_02 10.10.37.44:5000 check port 5000 inter 12000 rise 3 fall 3

Пример для mysql 3306;

root@kitploit:~
frontend fatlanmysql
        bind fatlan.com:3306
        mode tcp
        default_backend fatlanmysql-backend3306

Раздел перенаправления порта 3306.

root@kitploit:~
backend fatlanmysql-backend3306
        mode tcp
	
        server mysql_01 10.10.37.60:3306 check
        server mysql_02 10.10.37.61:3306 check backup
        server mysql_03 10.10.37.62:3306 check backup

Вы также можете выполнять перенаправление для других доменов, поддоменов или портов через тот же haproxy. Хотя выше мы уже видели перенаправление по ACL для поддомена.

Пример для поддомена egitim.fatlan.com на порт 4444;

root@kitploit:~
frontend egitim4444
        bind egitim.fatlan.com:4444
#        option httplog
        option forwardfor except 127.0.0.0/8
        #option http-server-close
	http-request set-header X-Forwarded-Proto https
#        reqadd X-Forwarded-Proto:\ https #old config
        mode http
        default_backend egitim-backend4444

Раздел перенаправления порта 4444 для поддомена egitim.fatlan.com.

root@kitploit:~
backend egitim-backend4444
        mode http
        balance roundrobin
        stick store-request src
        stick-table type ip size 256k expire 30m
        option forwardfor
#        option httplog
        option httpchk HEAD /
	
        server egitim_01 10.10.37.77:4444 check port 4444 inter 12000 rise 3 fall 3
        server egitim_02 10.10.37.78:4444 check port 4444 inter 12000 rise 3 fall 3

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

Keepalived

Теперь давайте выполним настройку Keepalived. Для Keepalived на 3 серверах будут частично различные параметрические настройки. Для этого создадим и настроим файл "/etc/keepalived/keepalived.conf". Кстати, приоритет выше у того, у кого выше значение "priority".

Прим1: Keepalived общается с другими peer'ами с помощью multicast и таким образом определяется master и backup.

Вы также можете захватить multicast трафик между peer'ами с помощью Tcpdump (tcpdump -n "multicast").

https://www.redhat.com/sysadmin/keepalived-basics

1. Сервер (HAProxy+Keepalived)

root@kitploit:~
vrrp_sync_group haproxy {
  group {
   VI_01
  }
}

vrrp_script haproxy_check_script {
  script "killall -0 haproxy"
  interval 2 # checking every 2 seconds (default: 5 seconds)
  fall 3 # require 3 failures for KO (default: 3)
  rise 6 # require 6 successes for OK (default: 6)
}

#Virtual interface
vrrp_instance VI_01 {
  state MASTER
  interface ens3
  ### 61 id'sini degistirin, diger peer'lerde de aynı olacak
  virtual_router_id 61
  ### 103 id'sini degistirin, diger peer'lerde azalan şekilde olacak
  priority 103
  
  authentication {
    auth_type PASS
    auth_pass 123456
  }

# Virtual ip address – floating ip
  virtual_ipaddress {
    10.10.5.5
  }
  
  track_script {
    haproxy_check_script
  }
}

2. Сервер (HAProxy+Keepalived) (Пишу только отличия)

root@kitploit:~
  state BACKUP
  priority 102

3. Сервер (HAProxy+Keepalived) (Пишу только отличия)

root@kitploit:~
  state BACKUP
  priority 101

Прим2: В случае, если multicast связь между серверами невозможна (например, KVM, облачные среды и т.д.), вам необходимо настроить связь через unicast, иначе она не будет работать.

Unicast Config: может быть добавлена в середину конфигурации следующим образом.

root@kitploit:~
###Для каждого сервера необходимо указать IP-адреса других пиров (peer)

...
#Virtual interface
...

  unicast_peer {
    <anaother_peer_ip>
    <anaother_peer_ip>
  }

# Virtual ip address – floating ip
...

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

High Loads

Настройка HAProxy и ядра Linux для высоких нагрузок

root@kitploit:~
sudo vi /etc/security/limits.conf


* soft no le 1000000
* hard no le 1000000
root soft no le 1000000
root hard no le 1000000
root@kitploit:~
sudo vi /etc/default/haproxy

ulimit 1000000
root@kitploit:~
sudo vi /lib/systemd/system/haproxy.service

LimitNOFILE=1000000
root@kitploit:~
sudo vi /etc/sysctl.conf

net.ipv4.ip_local_port_range=1024 65535
net.ipv4.tcp_max_syn_backlog = 100000
net.core.somaxconn = 100000
net.core.netdev_max_backlog = 100000
root@kitploit:~
sudo vi /etc/haproxy/haproxy.cfg

global
    nbproc 1
    nbthread 8
    tune.maxrewrite 16384
    tune.bufsize 32768
    maxconn 1000000
    tune.ssl.cachesize 1000000
defaults
    maxconn 1000000

Затем выполните reboot, если reboot немедленно невозможен, то

root@kitploit:~
sudo systemctl daemon-reload
sudo systemctl restart haproxy.service

Security

Кроме того, для проведения проверок безопасности на наличие слабых SSL/криптографических настроек (LOGJAM) (CVE-2015-4000) вы можете воспользоваться следующей командой или https://www.ssllabs.com/ssltest/

root@kitploit:~
sudo nmap -sV --script ssl-enum-ciphers -p 443 fatlan.com

sudo nmap -p 443 --script ssl-cert fatlan.com

openssl s_client -connect fatlan.com:443

Кроме того, в приведённых выше конфигурациях вы можете использовать tcpdump для проверки конфигурации x-forwarder-for (option forwardfor), предназначенной для получения IP клиента, то есть для захвата IP-адресов на стороне haproxy.

root@kitploit:~
sudo tcpdump -i ens3 -A -s 10240 | grep -v IP | egrep --line-buffered "..(GET |\.HTTP\/|POST |HEAD )|^[A-Za-z0-9-]+: " |sed -r 's/..(GET |HTTP\/|POST |HEAD )/\n\n\1/g'

Crepe

Скачать инструмент