🖥️ 3_servidores-web-int.md¶
Servidores web backend para balanceo de carga¶
Este documento describe la configuración conjunta de los dos servidores web (web1 y web2) que trabajan detrás del balanceador de carga.
Ambos servidores: - son deliberadamente simples - tienen recursos muy limitados - ejecutan la misma aplicación web - permiten visualizar claramente el reparto de carga
Objetivo de esta parte¶
- Tener dos servidores idénticos
- Mostrar cómo el balanceador reparte peticiones
- Comparar el comportamiento:
- servidor único vs infraestructura mínima
- Introducir el concepto de escalado horizontal
Máquinas implicadas¶
| Servidor | IP interna |
|---|---|
| web1 | 192.168.100.11 |
| web2 | 192.168.100.12 |
Ambos usan: - Debian 12 - Apache2 - PHP - Sin swap - 512 MB de RAM
Configuración de red¶
Cada servidor web tiene UNA interfaz:
enp0s3→ Red interna VirtualBox
Ejemplo: /etc/network/interfaces¶
web1¶
auto enp0s3
iface enp0s3 inet static
address 192.168.100.11
netmask 255.255.255.0
````
#### web2
auto enp0s3
iface enp0s3 inet static
address 192.168.100.12
netmask 255.255.255.0
Reiniciar red o máquina tras el cambio.
---
## Instalación de servicios (en ambos)
```bash
sudo apt update
sudo apt install apache2 php libapache2-mod-php -y
Comprobar:
systemctl status apache2
Swap deshabilitada (recordatorio)¶
Verificar que NO hay swap:
free -h
Si aparece swap, revisa serverweb.md.
Aplicación web común¶
Ambos servidores deben tener exactamente la misma web, salvo un pequeño detalle para identificar cada nodo.
Archivo: /var/www/html/index.php¶
sudo nano /var/www/html/index.php
Contenido (MODIFICA SOLO EL NOMBRE DEL SERVIDOR):
web1¶
<?php
echo "<h1>Servidor WEB1</h1>";
echo "<p>Backend web1</p>";
echo "<p>Hora: " . date("H:i:s") . "</p>";
$contador = 0;
for ($i = 0; $i < 100000000; $i++) {
$contador += sqrt($i);
}
echo "<p>Proceso terminado</p>";
?>
web2¶
<?php
echo "<h1>Servidor WEB2</h1>";
echo "<p>Backend web2</p>";
echo "<p>Hora: " . date("H:i:s") . "</p>";
$contador = 0;
for ($i = 0; $i < 100000000; $i++) {
$contador += sqrt($i);
}
echo "<p>Proceso terminado</p>";
?>
Permisos¶
En ambos servidores:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
Pruebas individuales¶
Desde el balanceador:
curl http://192.168.100.11
curl http://192.168.100.12
Debe verse claramente:
- “Servidor WEB1”
- “Servidor WEB2”
Si esto no funciona, NO sigas.
Prueba de balanceo¶
Desde el balanceador o el host:
curl http://IP_BALANCEADOR
Ejecuta varias veces.
Resultado esperado:
- a veces WEB1
- a veces WEB2
- ambos consumen CPU
Visualización de carga¶
En web1 y web2, en terminales separadas:
top
Durante peticiones:
- la CPU sube en ambos
- no se concentra todo en uno solo
Esto es clave para la explicación.
Ataque DDoS distribuido¶
Lanza el ataque contra el balanceador:
while true;
do curl -s http://IP_BALANCEADOR > /dev/null;
done
Observa:
- ambos servidores trabajan
- la caída es más lenta
- el servicio aguanta más tiempo
Mensaje clave¶
- No hemos “blindado” los servidores
-
Solo hemos:
-
duplicado el servicio
- añadido un punto de control
- La seguridad mejora sin tocar el código
Conclusión del escenario¶
| Escenario | Resultado |
|---|---|
| 1 servidor | Caída rápida |
| 2 servidores + LB | Mayor resistencia |
| LB + limitación | Ataque mitigado |
Notas finales¶
- Este escenario es mínimo y educativo
- No pretende ser producción
-
Sirve para:
-
visualizar conceptos
- provocar preguntas
- abrir debate
Fin del recorrido¶
Con esto queda completo el laboratorio.
Vuelve a:
- README.md para visión general