OffshoreVps
Seguridad13 oct 20268 min de lecturaPor el equipo de OffshoreVps

Protección DDoS de capa 7 para un VPS con Nginx

La protección DDoS a nivel de host detiene avalanchas de tráfico bruto, no peticiones astutas. Añade límites de tasa, caché y reglas anti-bots con Nginx y fail2ban para resistir ataques a nivel de aplicación.

La mayoría de los planes de hosting prometen protección DDoS. Eso suele significar filtrar grandes inundaciones de paquetes basura (capas 3 y 4) antes de que lleguen a tu servidor. No detiene a mil navegadores "reales" cargando tu página más lenta a la vez. Esos ataques de capa de aplicación (capa 7) parecen visitantes normales y debes gestionarlos tú mismo. Consulta qué es la protección DDoS para el contexto.

Ventana de terminal en un VPS que muestra los comandos usados para la defensa DDoS de capa 7 con Nginx
El tipo de comandos que ejecutarás en tu servidor en esta guía.

Conoce la diferencia

  • Inundaciones volumétricas: llenan la tubería de red. El host o el proveedor upstream las filtra.
  • Ataques de protocolo: agotan las tablas de conexiones. La red se encarga de ellos en su mayoría.
  • Ataques de capa 7: peticiones HTTP de apariencia válida que consumen CPU, base de datos o workers. Estos llegan a tu aplicación.

Paso 1: limita la tasa en Nginx

Limita la rapidez con que una dirección puede hacer peticiones. Define una zona en el bloque http y aplícala a tu sitio.

limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=connip:10m;

server {
    location / {
        limit_req zone=perip burst=20 nodelay;
        limit_conn connip 20;
    }
    location = /login {
        limit_req zone=perip burst=3 nodelay;
    }
}

Usa un límite mucho más estricto en los inicios de sesión y la búsqueda, ya que son costosos.

Paso 2: usa caché siempre que puedas

Servir una página en caché casi no cuesta nada. Activa la caché de FastCGI o de proxy para el tráfico anónimo, aunque sea durante 30 a 60 segundos. Convierte una inundación de peticiones idénticas en un puñado de reales.

fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=site:50m inactive=10m;
fastcgi_cache site;
fastcgi_cache_valid 200 60s;
fastcgi_cache_use_stale updating error timeout;
Los pasos de esta guía en orden: 1. Conoce la diferencia; 2. limita la tasa en Nginx; 3. cachea lo que puedas; 4. bloquea a los reincidentes con fail2ban; 5. pon un proxy por delante cuando se ponga serio; 6. Prepárate antes de que ocurra
Los pasos de esta guía, en orden.

Paso 3: establece tiempos de espera razonables

Los ataques de conexión lenta mantienen los workers ocupados. Acorta los límites.

client_body_timeout 10s;
client_header_timeout 10s;
send_timeout 15s;
keepalive_timeout 15s;
client_max_body_size 5m;

Paso 4: bloquea a los reincidentes con fail2ban

Bloquea las direcciones que activen el limitador de tasa. Nginx registra las peticiones rechazadas en el registro de errores, y un filtro puede detectarlas.

[nginx-limit-req]
enabled  = true
filter   = nginx-limit-req
logpath  = /var/log/nginx/error.log
maxretry = 10
findtime = 60
bantime  = 1h

Paso 5: coloca un proxy delante cuando la cosa se ponga seria

Un proxy inverso o una CDN con desafíos para bots puede absorber ataques que un solo VPS no puede. Recuerda proteger el origen como se describe en mantener en secreto la IP de tu origen, o los atacantes lo rodearán.

Prepárate antes de que ocurra

  • Conoce tus páginas más lentas y arréglalas o ponlas en caché.
  • Mantén la monitorización para notar un pico rápidamente.
  • Ten un plan: límites más estrictos, una página de mantenimiento, un servidor más grande.

Lo básico de la guía de UFW y fail2ban complementa esta.