Playbook DoS/DDoS — Windows Server (Personalizado)

Incluye bloque de configuración para tu entorno, perfiles por servicio y comandos listos.

Bloque de Configuración — Edita aquí

Actualiza estos valores y usa los comandos tal cual. Si un campo no aplica, déjalo vacío o comenta la línea en PowerShell.

# === CONFIGURACIÓN ORGANIZACIÓN ===
$Empresa             = "Contoso S.A."
$ContactoIncidentes  = "incidentes@contoso.local"
$ZonaHoraria         = "Europe/Madrid"

# === REDES DE ADMINISTRACIÓN (permitidas) ===
$AdminRanges         = @("10.10.0.0/16","192.168.50.0/24","2001:db8::/48")

# === SERVICIOS EXPUESTOS ===
$TieneIIS            = $true
$PuertosWeb          = @(80,443)
$TieneRDP            = $true
$RDPLimitadoA        = @("10.10.0.0/16","192.168.50.0/24")
$TieneSQL            = $true
$SQLPort             = 1433
$SQLAllowedSubnets   = @("10.20.0.0/16")

# === CLOUD / ISP ===
$Proveedor           = "Azure"   # Azure | AWS | OnPrem
$DDOSProtection      = "Standard" # Standard/Enabled si aplica
$ContactoISP         = "soporte-isp@proveedor.com"

# === UMBRALES ===
$TopCount            = 200        # top IPs a analizar
$BlockTop            = 50         # top IPs a bloquear si no se alcanza umbral
$ConnThreshold       = 300        # conexiones por IP para considerarla sospechosa
Cómo usar: copia el bloque de configuración al inicio de tus sesiones/script y ejecuta los comandos de cada perfil.

Perfiles por Servicio (elige los que apliquen)

Perfil Web (IIS en 80/443)

Incluye bloqueo de IPs, restricción dinámica y recordatorio de módulo Dynamic IP Restrictions.

# Bloqueo rápido por IPs top/sospechosas
$grouped = Get-NetTCPConnection | Where-Object { $_.State -in @("SynReceived","Established") } |
  Group-Object -Property RemoteAddress | Sort-Object Count -Descending
$top     = $grouped | Select-Object -First $TopCount
$mal     = ($top | Where-Object { $_.Count -ge $ConnThreshold } | Select -Expand Name)
if(-not $mal){ $mal = ($top | Select -First $BlockTop | Select -Expand Name) }

# Crear regla de bloqueo inbound para IIS
if($mal){
  $label = "DDoS-Web-Block " + (Get-Date -Format yyyyMMdd-HHmm)
  New-NetFirewallRule -DisplayName $label -Direction Inbound -RemoteAddress ($mal -join ",") -Action Block | Out-Null
}

# Restringir temporalmente tráfico a IIS por geografía/redes (opcional)
# Ejemplo: permitir solo España + admin ranges (reemplazar por listas IP válidas si usas GeoIP en perimetral/WAF)

# Dynamic IP Restrictions (IIS): habilitar en el servidor web
# Recordatorio: Agregar característica: Web-Dyn-Compression + Web-IP-Security + módulo Dynamic IP Restrictions (si aplica)
# Establecer límites con appcmd o UI de IIS (solicitudes/s, conexiones/s, bloqueo temporal).

Perfil RDP (3389)

# Deshabilitar reglas RDP abiertas y permitir solo rangos de admin
Disable-NetFirewallRule -DisplayGroup "Remote Desktop"
New-NetFirewallRule -DisplayName "RDP Solo Admin" -Direction Inbound -Protocol TCP -LocalPort 3389 -RemoteAddress ($RDPLimitadoA -join ",") -Action Allow

# Sugerencia: mover RDP detrás de VPN/Bastion, activar MFA y registro de NLA obligatorio.

Perfil SQL Server (1433)

# Cortafuegos: permitir solo subredes de apps/backend
New-NetFirewallRule -DisplayName "SQL Permitido AppSubnets" -Direction Inbound -Protocol TCP -LocalPort $SQLPort -RemoteAddress ($SQLAllowedSubnets -join ",") -Action Allow

# Bloquear resto de orígenes hacia 1433 (capa host; ideal reforzar en perimetral)
New-NetFirewallRule -DisplayName "SQL Bloqueo Internet" -Direction Inbound -Protocol TCP -LocalPort $SQLPort -RemoteAddress Any -Action Block

Contención y Mitigación — Comandos Listos

# 1) Reducir temporalmente timeouts (reversible)
netsh int tcp set global autotuninglevel=disabled
netsh advfirewall set global tcptimeouttcp 60

# 2) Bloqueo expres de IPs concretas (ejemplo, añade IPs vistas)
New-NetFirewallRule -DisplayName "Block DDoS Manual" -Direction Inbound -RemoteAddress "203.0.113.0,198.51.100.45" -Action Block

# 3) Lista de permitidos (admin) de forma explícita (útil si pasas a modo estricto)
New-NetFirewallRule -DisplayName "Allow Admin Ranges (All)" -Direction Inbound -RemoteAddress ($AdminRanges -join ",") -Action Allow

# 4) Revisión rápida de estados/puertos
netstat -ano | findstr SYN
Get-NetTCPConnection | Group-Object -Property State | Sort-Object Count -Desc
Get-NetTCPConnection | Group-Object -Property RemoteAddress | Sort-Object Count -Desc | Select -First 40

Script Auxiliar — Mitigar-DoS.ps1 (personalizado)

Copia el bloque de configuración, luego el script. Bloquea top IPs, respeta listas de permitidos y etiqueta la regla.

param(
  [int]$TopCount = $TopCount,
  [int]$BlockTop = $BlockTop,
  [int]$ConnThreshold = $ConnThreshold,
  [string[]]$AllowList = $AdminRanges
)

Write-Host "Recolectando conexiones..." -ForegroundColor Cyan
$grouped = Get-NetTCPConnection |
  Where-Object { $_.State -in @("SynReceived","Established") -and $_.RemoteAddress -notin @("::","127.0.0.1") } |
  Group-Object -Property RemoteAddress |
  Sort-Object Count -Descending

$top = $grouped | Select-Object -First $TopCount
$mal = $top | Where-Object { $_.Count -ge $ConnThreshold } | Select-Object -ExpandProperty Name
if(-not $mal -or $mal.Count -eq 0){ $mal = ($top | Select-Object -First $BlockTop).Name }

# Excluir allowlist
$blockList = $mal | Where-Object { $AllowList -notcontains $_ }
if($blockList.Count -gt 0){
  $label = "DDoS-TempBlock " + (Get-Date -Format yyyyMMdd-HHmm)
  New-NetFirewallRule -DisplayName $label -Direction Inbound -RemoteAddress ($blockList -join ",") -Action Block -Enabled True | Out-Null
  Write-Host ("Bloqueadas: " + ($blockList -join ", " )) -ForegroundColor Red
}else{
  Write-Host "Sin candidatos a bloqueo." -ForegroundColor Green
}

Recuperación — Revertir Cambios Temporales

# Revertir autotuning y timeouts
netsh int tcp set global autotuninglevel=normal
# (Opcional) netsh advfirewall set global tcptimeouttcp 240

# Eliminar reglas temporales por prefijo
Get-NetFirewallRule | Where-Object {$_.DisplayName -like "DDoS-*"} | Remove-NetFirewallRule -Confirm:$false
Get-NetFirewallRule | Where-Object {$_.DisplayName -like "DDoS-Web-Block*"} | Remove-NetFirewallRule -Confirm:$false
Get-NetFirewallRule | Where-Object {$_.DisplayName -like "Block DDoS Manual*"} | Remove-NetFirewallRule -Confirm:$false

Checklist de Validación (rápido)

  • Firewall host Reglas temporales aplicadas y auditadas.
  • Perímetro/WAF Rate limiting / scrubbing activado con el ISP/Cloud.
  • IIS Dynamic IP Restrictions configurado; logs revisados.
  • RDP Restringido a redes de administración o VPN/Bastion.
  • SQL 1433 solo para subredes permitidas.
  • Reversión Timeouts de TCP y reglas temporales revertidos tras estabilizar.

Registro de Cambios (para completar)

Fecha/HoraAcciónComando/ReglaResponsableRollback