Protección contra HTTP Flood en Windows Server

Tutorial práctico para identificar, mitigar y prevenir ataques DDoS de capa 7

⚠️
Escenario crítico: Su servidor web IIS en Windows Server 2019/2022 está respondiendo extremadamente lento con alta CPU, consumo excesivo de memoria y clientes reportando errores 503.

Fase 1: Detección y Confirmación

Paso 1: Identificar el Tráfico Malicioso

1 Abrir PowerShell como Administrador
2 Ejecutar comando para ver conexiones activas:
netstat -an | Select-String ":80 " | Group-Object { $_ -replace '^[^:]*:[^:]*:(\d+\.\d+\.\d+\.\d+):\d+.*$', '$1' } | Sort-Object Count -Descending

Esto agrupa las conexiones por IP y muestra las que más se repiten.

3 Usar el Monitor de Rendimiento (PerfMon):
  • Abrir perfmon.exe
  • Agregar contadores:
    • Web Service -> Current Connections
    • HTTP Service Request Queues -> CurrentQueueSize
    • Processor -> % Processor Time

Si CurrentQueueSize es alto y Current Connections está en miles, es probable un HTTP Flood.

Paso 2: Analizar Registros de IIS

1 Ubicar logs de IIS (por defecto en C:\inetpub\logs\LogFiles\W3SVC1)
2 Usar PowerShell para analizar requests por IP:
Get-Content .\u_ex220101.log | Select-String "GET|POST" | Group-Object { ($_ -split ' ')[1] } | Sort-Object Count -Descending | Select -First 10

Esto mostrará las 10 IPs con más requests.

Fase 2: Mitigación Inmediata (Durante el Ataque)

Paso 1: Bloquear IPs Maliciosas con Firewall de Windows

1 Identificar las IPs atacantes (ej: 192.168.1.100, 203.0.113.50)
2 Crear regla de bloqueo en PowerShell:
New-NetFirewallRule -DisplayName "Block_DDoS_IP" -Direction Inbound -RemoteAddress 192.168.1.100,203.0.113.50 -Action Block -Protocol TCP -LocalPort 80,443

Bloqueará las IPs en puertos HTTP/HTTPS.

Paso 2: Aplicar Limitación de Ancho de Banda en IIS

1 Abrir IIS Manager
2 Ir a "Limits de Ancho de Banda" en configuración del sitio
3 Habilitar y configurar:
  • Limitar ancho de banda (bytes/sec): Ej. 1000000 (1 MB/s)
  • Limitar conexiones: Ej. 50 conexiones por IP

Paso 3: Reducir Timeouts y Ajustar Colas

1 En IIS, modificar configuraciones avanzadas:
  • queueLength: Reducir a 1000 (por defecto es 65535)
  • connectionTimeout: Reducir a 00:00:30 (30 segundos)
2 Reiniciar el sitio web:
Restart-WebAppPool -Name "DefaultAppPool"

Paso 4: Habilitar Cache Estático

1 En IIS, para contenido estático (images, CSS, JS), habilitar cache:
Set-WebConfigurationProperty -Filter "system.webServer/staticContent" -Name clientCache -Value "max-age=3600"

Fase 3: Mitigación Avanzada (Herramientas Adicionales)

Paso 1: Configurar URL Rewrite para Filtrar Requests

1 Instalar módulo "URL Rewrite" en IIS
2 Crear regla para bloquear patrones maliciosos:
<rule name="Block_DDoS_UserAgent" stopProcessing="true">
    <match url=".*" />
    <conditions>
        <add input="{HTTP_USER_AGENT}" pattern="evil-bot|DDOSTool" />
    </conditions>
    <action type="CustomResponse" statusCode="403" statusReason="Forbidden" />
</rule>
                    

Paso 2: Usar Dynamic IP Restrictions (DIPR)

1 Instalar módulo "Dynamic IP Restrictions" (descargable desde Microsoft)
2 Configurar en IIS:
  • Denegar IPs que excedan 100 requests en 200 ms
  • Habilitar "Proxy Mode" para detectar IPs detrás de CDN

Paso 3: Integrar con un WAF (Web Application Firewall)

1 Azure WAF (si usas Azure): Habilitar reglas contra DDoS
2 Cloudflare:
  • Registrar tu dominio en Cloudflare
  • Cambiar DNS para apuntar a Cloudflare
  • Habilitar "Under Attack Mode" en Cloudflare Dashboard

Fase 4: Monitoreo y Recuperación

Paso 1: Monitoreo en Tiempo Real

1 Usar Resource Monitor (resmon.exe): Verificar red, CPU y memoria
2 PowerShell para monitoreo continuo:
while ($true) { 
    Get-NetTCPConnection -State Established | Where-Object { $_.RemotePort -eq 80 } | 
    Group-Object RemoteAddress | Sort-Object Count -Descending | Select -First 5; 
    Start-Sleep -Seconds 2 
}
                    

Paso 2: Análisis Post-Ataque

1 Revisar logs con herramientas como Log Parser:
logparser.exe -i:IISW3C "SELECT TOP 10 c-ip, COUNT(*) AS Requests FROM ex*.log GROUP BY c-IP ORDER BY Requests DESC"
2 Documentar IPs atacantes para bloqueo permanente

Paso 3: Hardening Preventivo

1 Configurar siempre DIPR y limitaciones en IIS
2 Usar un CDN (Cloudflare, Akamai) para ocultar la IP real del servidor
3 Implementar CAPTCHA en formularios para evitar bots

Checklist de Respuesta Rápida

Conclusión

Un ataque HTTP Flood puede ser devastador, pero con una respuesta rápida y las herramientas adecuadas (Firewall, IIS tuning, WAF), puedes mitigarlo efectivamente. La combinación de soluciones nativas de Windows Server y servicios externos (como CDN) proporciona la mejor defensa.

¿Necesitas ayuda? Si necesitas ayuda con la implementación de algún paso específico, no dudes en contactar a tu administrador de sistemas o buscar asistencia especializada.