Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
HAProxy-Keepalived-Sec-HighLoads — ✨ Aborda el tema de HAProxy y Keepalived como balanceador de carga y clúster, además de seguridad (prevención de la vulnerabilidad de uso débil de SSL/Cripto (LOGJAM) (CVE-2015-4000)) y contra altas cargas. | Kitploit
Herramientas/GitHubGitHub/fatlan/haproxy-keepalived-sec-highloads
Escáneres de VulnerabilidadesAuditoría de ConfiguraciónSeguridad de Redes
GitHubfatlan/haproxy-keepalived-sec-highloads

HAProxy-Keepalived-Sec-HighLoads

✨ Aborda el tema de HAProxy y Keepalived como balanceador de carga y clúster, además de seguridad (prevención de la vulnerabilidad de uso débil de SSL/Cripto (LOGJAM) (CVE-2015-4000)) y contra altas cargas.

Ver Repositorio
623hace 3 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Instalación y Configuración de HAProxy y Keepalived (LoadBalancer+Cluster+Sec+HighLoads)

Crepe

HAProxy es un software de código abierto que proporciona servicio de servidor proxy para aplicaciones basadas en TCP y HTTP con balanceo de carga de alta disponibilidad.

Keepalived es un software de código abierto capaz de proporcionar capacidad de IP failover (conmutación por error) para más de dos servidores. Keepalived utiliza la técnica de comunicación Multicast entre sí.

En nuestra estructura, usaremos HAProxy como balanceador de carga y Keepalived para transferir la IP, es decir, para convertir nuestra estructura HAProxy en un Clúster.

En nuestro escenario hay 3 servidores. Instalaremos HAProxy en estos 3 servidores para convertirlos en balanceadores de carga. Luego, instalaremos el servicio Keepalived para que, cuando uno de los servidores se caiga, se realice un IP failover y se pase a otro servidor sin interrupción, manteniendo nuestro servicio de balanceador de carga en funcionamiento.

Para ello utilizaremos 4 IPs (las IPs son completamente inventadas)

  1. Servidor: 10.10.5.13
  2. Servidor: 10.10.5.14
  3. Servidor: 10.10.5.15
  4. IP Virtual de Keepalived: 10.10.5.5

Ahora instalemos el servicio HAProxy y Keepalived en los 3 servidores de la siguiente manera.

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

Nota1: En los servidores debe estar presente "net.ipv4.ip_nonlocal_bind=1". De lo contrario, la configuración utilizada para HAProxy no podrá albergar la misma IP simultáneamente y dará un error de bind, y el servicio no funcionará. Para ello, debe seguir la siguiente ruta.

Primero edite el archivo "vi /etc/sysctl.conf" y pegue el siguiente parámetro, guarde y salga.

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

Luego ejecute el siguiente comando.

root@kitploit:~
sysctl -p

Nota2: Si va a usar 443 SSL, debe tener en el directorio "/etc/ssl/private/" el archivo "haproxy.pem" que contiene la versión Bundle de sus SSLs (***.crt, .ca, .key).

Ahora veamos un ejemplo de configuración de HAProxy a continuación. Usará la misma configuración para cada HAProxy en su estructura.

HAProxy

Para ello editará el archivo "/etc/haproxy/haproxy.cfg". La siguiente configuración soporta mínimamente HA v2.

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

A continuación se muestran los valores por defecto.

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

Parte de configuración del Dashboard para HAProxy (se agregó integración con prometheus para monitoreo)

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

En la siguiente configuración se usó ACL en dos bloques. En el primer bloque, si en cualquier parte del enlace aparece la palabra "rest", se ejecutará el bloque middleware-fatlan-backend; en el segundo, cuando se solicite un dominio diferente (forum.fatlan.com), se ejecutará el backend fatlan-forum-backend; todas las demás solicitudes se ejecutarán en el bloque fatlan-backend443, excepto otras redirecciones de puertos.

Parte de redirección del puerto 80 al puerto 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

Ejemplo de configuración ACL (proxypass): si en cualquier parte del enlace aparece la palabra rest, redirigir

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

ACL para redirigir un host diferente de forum

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

Parte redirigida por defecto, para 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

Parte redirigida por ACL, proveniente de 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

Parte redirigida por ACL, proveniente de 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

Ejemplos externos también se pueden configurar de la siguiente manera.

Ejemplo para el puerto 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

Parte redirigida del puerto 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

Ejemplo mysql 3306;

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

Parte redirigida del puerto 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

También puede hacer la redirección para otros dominios, subdominios o puertos a través del mismo haproxy. Aunque ya vimos la redirección ACL para subdominios arriba.

Ejemplo para el subdominio egitim.fatlan.com en el puerto 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

Parte redirigida para el subdominio egitim.fatlan.com en el puerto 4444

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

Arriba mencioné ejemplos de configuraciones de HAProxy, yo mismo configuré la mía y pegué las mismas configuraciones en los 3 servidores.

Keepalived

Ahora configuremos Keepalived. Para Keepalived, en los 3 servidores habrá ajustes paramétricos parcialmente diferentes. Para ello crearemos y configuraremos el archivo "/etc/keepalived/keepalived.conf". Por cierto, el que tenga mayor "priority" tendrá prioridad.

Nota1: Keepalived se comunica mediante multicast con sus otros pares y de esta manera se determina el master y backup.

También puede capturar la comunicación multicast entre pares con Tcpdump (tcpdump -n "multicast").

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

1.er Servidor (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
  ### Cambie el id 61, será el mismo en los otros pares
  virtual_router_id 61
  ### Cambie el id 103, en los otros pares será decreciente
  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.º Servidor (HAProxy+Keepalived) (Solo escribo las diferencias)

root@kitploit:~
  state BACKUP
  priority 102

3.er Servidor (HAProxy+Keepalived) (Solo escribo las diferencias)

root@kitploit:~
  state BACKUP
  priority 101

Nota2: Si la comunicación multicast entre servidores no es posible (ej: entornos kvm, cloud, etc.), debe configurar usando comunicación unicast; de lo contrario, no funcionará.

Configuración Unicast: se puede agregar en medio de la configuración de la siguiente manera.

root@kitploit:~
###Para cada servidor se debe especificar (escribir) la IP del otro par(peer)

...
#Virtual interface
...

  unicast_peer {
    <ip_del_otro_par>
    <ip_del_otro_par>
  }

# Virtual ip address – floating ip
...

Eso es todo en cuanto a configuraciones. En todos los servidores, HAProxy debe estar funcionando sin problemas, al igual que el servicio keepalived. Ante cualquier interrupción en los servidores o servicios, el balanceador de carga seguirá dando servicio desde el otro servidor en funcionamiento.

High Loads

Ajustes para altas cargas en HAProxy y el kernel de 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

Luego reboot, si no es posible reboot inmediatamente

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

Security

Además, puede usar el siguiente comando para realizar pruebas de seguridad de uso de SSL/Criptografía débil (LOGJAM) (CVE-2015-4000) o 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

Además, en los config anteriores, para verificar la configuración x-forwarder-for (option forwardfor) que existe para obtener la ip del cliente, es decir, para capturar las IPs en el lado de haproxy, puede usar tcpdump.

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

Descargar herramienta