⚖️ 2_servidor-balanceador-carga.md¶
Balanceador de carga con Nginx (Debian 12)¶
Este documento describe la configuración completa del balanceador de carga, que actúa como medida de alta disponibilidad y seguridad defensiva frente al ataque DDoS simulado.
El balanceador recibe todas las peticiones HTTP y las reparte entre dos servidores web vulnerables, evitando que uno solo quede saturado.
Objetivo del balanceador¶
- Centralizar el acceso al servicio web
- Repartir la carga entre varios servidores
- Aumentar la disponibilidad
- Mostrar que:
“la defensa también es arquitectura”
Características de la máquina virtual¶
| Parámetro | Valor |
|---|---|
| SO | Debian 12 |
| RAM | 1 GB |
| CPU | 1 |
| Servidor | Nginx |
| Rol | Reverse proxy + Load balancer |
Configuración de red¶
El balanceador tiene DOS interfaces:
| Interfaz | Uso | Configuración |
|---|---|---|
| enp0s3 | Acceso desde el aula / host | Bridge + DHCP |
| enp0s8 | Red interna con servidores web | IP estática |
IP interna del balanceador¶
Ejemplo:
192.168.100.10
````
---
## `/etc/network/interfaces`
Ejemplo de configuración mínima:
```ini
auto enp0s3
iface enp0s3 inet dhcp
auto enp0s8
iface enp0s8 inet static
address 192.168.100.10
netmask 255.255.255.0
````
Reiniciar red:
```bash
sudo systemctl restart networking
Instalación de Nginx¶
sudo apt update
sudo apt install nginx -y
Comprobar estado:
systemctl status nginx
Configuración del balanceo de carga¶
1. Definir el backend (upstream)¶
Editar el archivo principal:
sudo nano /etc/nginx/conf.d/loadbalancer.conf
Contenido:
upstream servidores_web {
server 192.168.100.11;
server 192.168.100.12;
}
server {
listen 80;
location / {
proxy_pass http://servidores_web;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Guardar y salir.
Comprobación de sintaxis¶
sudo nginx -t
Debe devolver:
syntax is ok
test is successful
Reiniciar Nginx¶
sudo systemctl restart nginx
Prueba de funcionamiento¶
Desde el propio balanceador:
curl http://192.168.100.11
curl http://192.168.100.12
Ambos deben responder.
Ahora prueba el balanceador:
curl http://192.168.100.10
O desde el host (IP por DHCP del balanceador):
curl http://IP_BRIDGE_DEL_BALANCEADOR
La página debe:
- responder
- tardar algo
- pero no caer inmediatamente
Demostración del balanceo¶
Ejecuta varias veces:
curl http://IP_BALANCEADOR
Mientras tanto, en los servidores web:
top
Verás que:
- la carga se reparte
- ningún servidor se satura tan rápido como cuando estaba solo
Ataque DDoS contra el balanceador¶
Desde una o varias máquinas:
while true;
do curl -s http://IP_BALANCEADOR > /dev/null;
done
Observa:
- el servicio tarda más
- pero aguanta mejor
- sigue respondiendo durante más tiempo
Extra: Limitación básica por IP¶
Para mostrar una defensa adicional sencilla, añade:
Editar el mismo archivo:
sudo nano /etc/nginx/conf.d/loadbalancer.conf
Dentro del server {}:
limit_req_zone $binary_remote_addr zone=ddos:10m rate=5r/s;
server {
listen 80;
location / {
limit_req zone=ddos burst=10;
proxy_pass http://servidores_web;
}
}
Comprobar y reiniciar:
sudo nginx -t
sudo systemctl restart nginx
Ahora el ataque con curl será mucho menos efectivo.
Mensaje clave¶
- El balanceador no elimina el ataque
- Reduce el impacto
- Permite escalar
- Compra tiempo para reaccionar
🔜 Siguiente paso¶
Configurar correctamente los dos servidores web backend para trabajar detrás del balanceador.
👉 Continúa con: 3_servidores-web-int.md