Taller Avanzado: fail2ban con nginx personalizad

Taller Avanzado: fail2ban con nginx personalizado

馃攼 Taller Avanzado: fail2ban con nginx personalizado

馃幆 Objetivo

Implementar una imagen Docker personalizada de nginx para registrar intentos fallidos y monitorear con fail2ban.

馃摝 Paso 1: Crear imagen personalizada de nginx

1. Crea una carpeta vac铆a con nombre nginx-fail2ban y dentro un archivo llamado Dockerfile con este contenido:

FROM nginx:latest

# Instala bash y herramientas necesarias
RUN apt update && apt install -y bash procps

# Crea el directorio de logs
RUN mkdir -p /var/log/nginx

# Redirecciona logs de nginx a archivos tradicionales
RUN sed -i 's|access_log /dev/stdout|access_log /var/log/nginx/access.log|' /etc/nginx/nginx.conf \
    && sed -i 's|error_log /dev/stderr|error_log /var/log/nginx/error.log|' /etc/nginx/nginx.conf

EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

2. Desde esa carpeta, construye la imagen:

sudo docker build -t nginx-fail2ban .

馃惓 Paso 2: Crear contenedor del servidor web

sudo docker run -dit --name servidor_web --network red_segura \
  --ip 172.25.0.10 nginx-fail2ban

馃攳 Paso 3: Verificar que nginx est茅 corriendo

sudo docker exec -it servidor_web bash
cat /proc/1/cmdline

Si el log no se muestra con cat /var/log/nginx/access.log, puedes ver registros directamente con:

sudo docker logs servidor_web

馃И Paso 4: Simular ataques desde cliente

sudo docker exec -it cliente sh
for i in $(seq 1 10); do curl http://172.25.0.10/admin; done

馃摑 Paso 5: Crear filtro fail2ban en firewall

nano /etc/fail2ban/filter.d/nginx-404.conf

Contenido del archivo:

[Definition]
failregex = ^ -.*"GET /admin HTTP.*" 404
ignoreregex =

馃敀 Paso 6: Configurar jail

nano /etc/fail2ban/jail.local

Contenido del archivo:

[nginx-404]
enabled = true
port = http
filter = nginx-404
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 600

馃殌 Paso 7: Reiniciar fail2ban y verificar estado

sudo systemctl restart fail2ban
sudo fail2ban-client status
sudo fail2ban-client status nginx-404

馃搶 Paso 8: Verificar bloqueo con iptables

sudo iptables -L -n -v

馃棶️ Entregables

  • Captura del Dockerfile utilizado
  • Captura del log de intentos (access.log o docker logs)
  • Archivos jail.local y filtro personalizado
  • Captura del resultado de fail2ban-client status nginx-404
  • Captura de las reglas en iptables

馃帀 ¡Taller completado! Has creado un entorno seguro donde los intentos de acceso indebido son monitoreados y bloqueados autom谩ticamente con fail2ban en un servidor nginx dentro de Docker.

Comentarios