
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:
- Si un HAProxy falla, el otro toma el control sin que los usuarios lo noten.
- 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:
- Reverse Proxy seguro: HAProxy actúa como intermediario entre usuarios y servidores internos. Así evitas exponer directamente tus servicios al exterior.
- TLS/SSL Offloading: Termina conexiones HTTPS en HAProxy, usando certificados centralizados y configuraciones modernas (TLS 1.2/1.3, curvas elípticas, ciphers fuertes).
- Protección contra ataques DDoS básicos: con rate limiting y connection throttling puedes limitar peticiones excesivas de un mismo origen.
- Filtrado de tráfico: con ACLs de HAProxy puedes bloquear o redirigir tráfico malicioso según IP, cabeceras, user agents sospechosos, etc.
- WAF (Web Application Firewall): HAProxy al integrarse con ModSecurity o conectarse a un WAF externo para filtrar inyecciones SQL, XSS, etc.
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:
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
Revisamos la versión de haproxy:
haproxy -v
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
Validamos que la configuración es correcta:
haproxy -c -f /etc/haproxy/haproxy.cfg
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:
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
Activamos el módulo con el siguiente comando en ambos nodos:
a2enmod security2
Y reiniciamos el servidor de APACHE:
systemctl restart apache2systemctl enable apache2
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
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
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
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.
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.
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
El log de estos bloqueas están localizados en "/var/log/apache2/modsec_audit.log" y podéis integrarlos en vuestro SOC / SIEM.
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!