Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado

Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado

por Raúl Unzué

Balanceador de Carga Seguro y Open Source

Cuando hablamos de balanceadores de carga normalmente pensamos en repartir tráfico web. Pero en entornos corporativos el juego cambia, además de distribuir conexiones hay que protegerlas. No sirve de nada tener alta disponibilidad si cualquier atacante puede colarse con un SQL Injection o un XSS contra tus aplicaciones.

Aquí es donde entra la pareja la combinación de dos soluciones:

  • HAProxy: reparte tráfico entre tus servidores backend.
  • ModSecurity: un WAF (Web Application Firewall) opensource que analiza las peticiones y bloquea lo sospechoso.

En un entorno corporativo real, el HAProxy único es un punto crítico de fallo. Y eso no se lo puede permitir nadie en producción.

Por eso en esta guía vamos a dar un paso más, montaremos dos servidores con HAProxy en alta disponibilidad usando Keepalived (para que compartan una IP flotante), y detrás de ellos unos backends con Apache + ModSecurity. Así, conseguimos que:

  1. Si un HAProxy falla, el otro toma el control sin que los usuarios lo noten.
  2. Los backends no solo reparten tráfico, también filtran ataques web gracias a ModSecurity.

Escenario y hosts necesarios

  • 2 servidores HAProxy (Debian 12)
    • HAProxy instalado
    • Keepalived configurado para gestionar una IP virtual flotante (VIP).
  • 2 servidores Backend (Debian 12)
    • Apache + ModSecurity instalados
    • OWASP CRS configurado para bloquear inyecciones, XSS, etc.

Seguridad en la capa de Aplicación y Red

Al montar este tipo de entorno, damos un extra en ciberseguridad tanto en la capa de Aplicación como en la red. Os lo explicamos:

  1. Reverse Proxy seguro: HAProxy actúa como intermediario entre usuarios y servidores internos. Así evitas exponer directamente tus servicios al exterior.
  2. TLS/SSL Offloading: Termina conexiones HTTPS en HAProxy, usando certificados centralizados y configuraciones modernas (TLS 1.2/1.3, curvas elípticas, ciphers fuertes).
  3. Protección contra ataques DDoS básicos: con rate limiting y connection throttling puedes limitar peticiones excesivas de un mismo origen.
  4. Filtrado de tráfico: con ACLs de HAProxy puedes bloquear o redirigir tráfico malicioso según IP, cabeceras, user agents sospechosos, etc.
  5. WAF (Web Application Firewall): HAProxy al integrarse con ModSecurity o conectarse a un WAF externo para filtrar inyecciones SQL, XSS, etc.

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 1

Instalar HAProxy para el Balanceador

Para instalar HAProxy, necesitaremos mínimo 1 CPU y 2GB de RAM por cada 1000 conexiones, así como como dos servidores para el Backend y otro para HAProxy, en nuestros caso, como ya hemos dicho, montaremos dos y dos. Evitar instalar HAProxy en los servidores de Backend para no tener problemas con los puertos de comunicación.

Para el ejemplo usaremos un entorno de laboratorio Proxmox:

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 2

Para instalar los dos hosts de HAProxy usaré las consolas. Abrimos ambos nodos de HAProxy y lanzamos el comando:

apt update && apt upgrade -yapt update && apt install haproxy -y

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 3

Revisamos la versión de haproxy:

haproxy -v

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 4

El archivo principal de configuración es:

/etc/haproxy/haproxy.cfg

Se divide en las siguientes secciones:

  • global: configuración del proceso.
  • defaults: valores por defecto para frontends/backends.
  • frontend: define cómo entra el tráfico (IP/puerto).
  • backend: define adónde se envía el tráfico (los servidores reales).
  • listen: combina frontend+backend en un bloque (menos usado en configs modernas).

Una configuración básica para los servidores de backend sería de la siguiente forma:

frontend http_in bind *:80 default_backend servidores_web
 backend servidores_web balance roundrobin
 server APACHE01 IP-APACHE01:80 check server APACHE02 IP-APACHE02:80 check

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 5

Validamos que la configuración es correcta:

haproxy -c -f /etc/haproxy/haproxy.cfg

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 6

Instalar Keepalived para alta disponibilidad

En ambos HAProxy lanzaremos el siguiente comando para instalar Keepalived:

apt install keepalived -y

La configuración del servicio y de la IP VIP debe hacerse en "/etc/keepalived/keepalived.conf". En cada nodo será diferente:

### PARA HAPROXY01 (Actuará como MASTER):global_defs { router_id HAPROXY01}
 vrrp_script haproxy { script "killall -0 haproxy" interval 2 weight 2}
 vrrp_instance VI_1 { state MASTER
 ## CAMBIAR NOMBRE INTERFAZ eth0 o el que corresponda interface ens18 
 virtual_router_id 51 priority 100 advert_int 1 authentication {
 auth_type PASS auth_pass claveSecreta } virtual_ipaddress {
 192.168.2.250 }}### HAPROXY02 (Actuará como BACKUP):global_defs {
 router_id HAPROXY02}vrrp_script haproxy {script "killall -0 haproxy"interval 2
 weight 2}vrrp_instance VI_1 { state BACKUP
 ## CAMBIAR NOMBRE INTERFAZ eth0 o el que corresponda interface ens18
 virtual_router_id 51 priority 90 advert_int 1 authentication {
 auth_type PASS auth_pass claveSecreta } virtual_ipaddress {
 192.168.2.250 }}

Ahora ambos nodos comparten una IP común, la 192.168.2.250, si el MASTER (HAPROXY01) cae, toma el control el BACKUP (HAPROXY02)

Habilitamos el servicio en ambos nodos:

systemctl restart keepalivedsystemctl enable keepalived

Podemos hacer una pequeña prueba si responde la IP VIP:

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 7

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 8

Si todo está OK, reinicia y habilita el servicio de HAPROXY también:

systemctl restart haproxysystemctl enable haproxy

Configurar Apache + ModSecurity en los Backends

Para instalar nuestros servidores Apache con el WAF ModSecurity lanzamos los siguientes comandos en ambos nodos:

apt install apache2 libapache2-mod-security2 -y

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 9

Activamos el módulo con el siguiente comando en ambos nodos:

a2enmod security2

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 10

Y reiniciamos el servidor de APACHE:

systemctl restart apache2systemctl enable apache2

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 11

Ahora instalamos las reglas básicas de OWASP Core Rule Set (CRS):

cd /etc/modsecuritymv modsecurity.conf-recommended modsecurity.conf
 nano modsecurity.conf

Cambiamos la línea:

SecRuleEngine DetectionOnly## La cambiamos porSecRuleEngine On

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 12

Esto hace que ModSecurity no solo detecte, sino que bloquee ataques.

Ahora descargamos OWASP CRS:

apt install git -ycd /etc/modsecurity
 git clone https://github.com/coreruleset/coreruleset.git
 mv coreruleset /usr/share/modsecurity-crs
 cp /usr/share/modsecurity-crs/coreruleset/crs-setup.conf.example /usr/share/modsecurity-crs/crs-setup.conf
 nano /etc/apache2/mods-enabled/security2.conf

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 13

Dejamos el fichero de la siguiente forma:

# Activa el motor SecRuleEngine On
 # Configuración principal de ModSecurity
 IncludeOptional /etc/modsecurity/modsecurity.conf
 # Configuración del Core Rule Set (CRS)
 IncludeOptional /usr/share/modsecurity-crs/crs-setup.conf
 IncludeOptional /usr/share/modsecurity-crs/coreruleset/rules/*.conf
 

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 14

Validamos sintaxis:

root@APACHE02:/etc/modsecurity# apache2ctl configtestSyntax OK

Reiniciamos Apache:

root@APACHE02:/etc/modsecurity# systemctl restart apache2
 root@APACHE02:/etc/modsecurity# systemctl status apache2
 ● apache2.service - The Apache HTTP Server
 Loaded: loaded (/lib/systemd/system/apache2.service; enabled; preset: enabled)
 Active: active (running) since Mon 2025-09-22 21:45:02 CEST; 5s ago
 Docs: https://httpd.apache.org/docs/2.4/
 Process: 2631 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
 Main PID: 2636 (apache2) Tasks: 55 (limit: 2278) Memory: 59.0M
 CPU: 207ms CGroup: /system.slice/apache2.service
 ├─2636 /usr/sbin/apache2 -k start
 ├─2637 /usr/sbin/apache2 -k start
 └─2638 /usr/sbin/apache2 -k start
 sep 22 21:45:02 APACHE02 systemd[1]: Starting apache2.service - The Apache HTTP Server...
 sep 22 21:45:02 APACHE02 systemd[1]: Started apache2.service - The Apache HTTP Server.

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 15

Con esto ya tenemos nuestro Apache con ModSecurity.

Pruebas de Alta Disponibilidad + Seguridad

Validamos que desde cualquier nodo podemos acceder al servidor y desde la VIP también, en mi caso:

http://192.168.2.250 -> IP VIP

http://192.168.2.196 -> HAPROXY01

http://192.168.2.197 -> HAPROXY02

Cuando hacemos esta prueba, el balanceador nos envía a uno de los equipos APACHE01 / APACHE02.

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 16

Ahora para probar el WAF, lanzamos una petición maliciosa, simplemente añadimos a la URL algo como (ejemplo: añadir ?id=' OR '1'='1 en la URL). Esto nos debería devolver un error 403:

http://192.168.2.250/index.php?id=' OR '1'='1

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 17

El log de estos bloqueas están localizados en "/var/log/apache2/modsec_audit.log" y podéis integrarlos en vuestro SOC / SIEM.

Geeknetic Cómo montar un balanceador en HAProxy con Alta Disponibilidad y WAF integrado 18

Adicionalmente, podéis ir apagando servicios o máquinas virtuales y ver si todo el sistema funciona ante fallos.

 

 

Arquitectura Segura: balanceo HAProxy + ModSecurity con alta disponibilidad

Con este montaje hemos conseguido:

  • Alta disponibilidad en el balanceo gracias a Keepalived + HAProxy.
  • Backends protegidos con Apache + ModSecurity y las reglas OWASP CRS.
  • Resiliencia y seguridad en la misma arquitectura, sin costes de licencia.

En producción esto significa que no solo repartes tráfico, también garantizas continuidad del servicio y blindas tus aplicaciones frente a ataques web.

En resumen, HAProxy reparte, Keepalived asegura y ModSecurity protege. La triple jugada perfecta para un entorno corporativo serio.

Fin del Artículo. ¡Cuéntanos algo en los Comentarios!

Temas Relacionados: Redes Balanceador HAProxy ModSecurity
Redactor del Artículo: Raúl Unzué

Raúl Unzué

Soy un apasionado de la virtualización con más de 20 años de experiencia, especializado en soluciones como VMware(premio vExpert y vExpert Pro desde 2013), Proxmox e Hyper-V. Durante mi carrera, he ayudado a empresas a optimizar sus infraestructuras TI mientras comparto mis conocimientos como redactor IT. Mi objetivo es traducir lo complejo en algo práctico y accesible, combinando teoría con experiencia real. Si te interesa la virtualización, las herramientas TI o simplemente aprender algo nuevo, espero ayudarte con mis artículos.