Un ataque DDoS puede tumbar tu VPS en segundos. Miles de conexiones simultáneas saturan recursos hasta que tu servidor deja de responder.
La buena noticia: la mayoría de ataques son simples y se pueden mitigar con configuración correcta. Los ataques sofisticados requieren servicios especializados.
Esta guía cubre desde protección básica hasta estrategias avanzadas.
Qué es un ataque DDoS
Definición
DDoS (Distributed Denial of Service): Ataque que busca hacer inaccesible un servicio saturándolo con tráfico desde múltiples fuentes.
Cómo funciona
Atacante → Controla botnet (miles de dispositivos)
→ Todos atacan tu servidor simultáneamente
→ Tu servidor se satura
→ Usuarios legítimos no pueden acceder
Impacto real
| Consecuencia | Efecto |
|---|---|
| Sitio caído | Pérdida de ventas/visitas |
| Recursos agotados | CPU 100%, RAM llena |
| Ancho de banda | Facturación extra |
| Reputación | Usuarios pierden confianza |
| SEO | Google penaliza downtime |
Tipos de ataques DDoS
Capa 3/4 (Red/Transporte)
Volumétricos: Saturan el ancho de banda.
| Ataque | Descripción | Volumen típico |
|---|---|---|
| UDP Flood | Paquetes UDP masivos | 10-100+ Gbps |
| ICMP Flood | Ping masivo | 1-50 Gbps |
| SYN Flood | Conexiones TCP incompletas | Millones/seg |
Difíciles de mitigar solo con VPS. Requieren protección a nivel de red.
Capa 7 (Aplicación)
Más sutiles: Parecen tráfico legítimo.
| Ataque | Descripción | Impacto |
|---|---|---|
| HTTP Flood | Peticiones HTTP masivas | Satura web server |
| Slowloris | Conexiones lentas abiertas | Agota conexiones |
| WordPress xmlrpc | Pingbacks maliciosos | Satura PHP |
Mitigables con configuración del servidor.
Capas de defensa
Capa 1: Proveedor (protección de red)
Capa 2: CDN/Proxy (Cloudflare, etc.)
Capa 3: Firewall servidor (iptables, UFW)
Capa 4: Web server (Nginx rate limiting)
Capa 5: Aplicación (WordPress, etc.)
Capa 1: Protección del proveedor
Qué ofrece tu proveedor
Pregunta a tu proveedor de VPS:
- ¿Tienen protección DDoS incluida?
- ¿Hasta cuántos Gbps?
- ¿Qué pasa si supera el límite?
Los VPS de Avantys incluyen protección DDoS básica a nivel de red.
Limitaciones
La protección del proveedor mitiga ataques volumétricos, pero:
- Tiene límites (típicamente 1-10 Gbps)
- No protege contra capa 7
- Puede cortar tu IP si el ataque es muy grande
Capa 2: CDN y proxy inverso
Cloudflare (recomendado)
Cloudflare es la mejor protección DDoS accesible:
Plan gratuito incluye:
- Protección DDoS ilimitada capa 3/4
- Protección básica capa 7
- WAF básico
- CDN global
Planes de pago añaden:
- WAF avanzado
- Rate limiting configurable
- Bot management
- Reglas personalizadas
Configurar Cloudflare para DDoS
- Activar proxy (nube naranja) en todos los registros DNS
- Under Attack Mode disponible para emergencias
- Security Level: Medium o High
- Bot Fight Mode: Activado
Reglas de firewall Cloudflare
# Bloquear países sospechosos (si no tienes usuarios allí)
(ip.geoip.country in {"CN" "RU" "KP"})
→ Block
# Rate limit agresivo en login
(http.request.uri.path contains "/wp-login")
→ Challenge
# Bloquear User-Agents vacíos
(http.user_agent eq "")
→ Block
Under Attack Mode
Actívalo durante un ataque:
- Muestra challenge JavaScript a todos
- Filtra bots automáticamente
- Impacta experiencia de usuario, usar solo en emergencia
Dashboard → Overview → Under Attack Mode → On
Modo I’m Under Attack automático
Con Page Rules:
URL: tudominio.com/*
Setting: Security Level = I'm Under Attack
Capa 3: Firewall del servidor
iptables - Rate limiting básico
# Limitar conexiones nuevas por IP (SYN flood)
iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above 50 -j DROP
# Limitar paquetes por segundo desde una IP
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m limit --limit 60/s --limit-burst 20 -j ACCEPT
iptables -A INPUT -p tcp -m conntrack --ctstate NEW -j DROP
# Bloquear paquetes inválidos
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# Limitar ICMP (ping)
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
Guardar reglas
sudo apt install iptables-persistent
sudo netfilter-persistent save
UFW rate limiting
# Limitar conexiones SSH
sudo ufw limit ssh
# Limitar puerto específico
sudo ufw limit 80/tcp
Script anti-DDoS básico
#!/bin/bash
# /root/scripts/anti-ddos.sh
# Limpiar reglas
iptables -F
# Permitir localhost
iptables -A INPUT -i lo -j ACCEPT
# Permitir conexiones establecidas
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Bloquear paquetes inválidos
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
# Protección SYN flood
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
# Limitar conexiones por IP
iptables -A INPUT -p tcp -m connlimit --connlimit-above 80 -j REJECT
# Limitar ICMP
iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 4 -j ACCEPT
iptables -A INPUT -p icmp -j DROP
# Puertos permitidos
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Bloquear todo lo demás
iptables -A INPUT -j DROP
echo "Reglas anti-DDoS aplicadas"
Capa 4: Configuración web server
Nginx - Rate limiting
# Definir zona de rate limiting
limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
# Limitar conexiones simultáneas por IP
limit_conn conn_limit 20;
# Rate limit general
limit_req zone=general burst=20 nodelay;
location /wp-login.php {
# Rate limit estricto en login
limit_req zone=login burst=3 nodelay;
}
location /xmlrpc.php {
# Bloquear xmlrpc
deny all;
}
}
Nginx - Timeouts ajustados
# Timeouts cortos para liberar conexiones
client_body_timeout 10s;
client_header_timeout 10s;
keepalive_timeout 15s;
send_timeout 10s;
# Limitar tamaño de peticiones
client_max_body_size 10m;
client_body_buffer_size 128k;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
Nginx - Bloquear User-Agents maliciosos
# Bloquear bots conocidos
if ($http_user_agent ~* (wget|curl|nikto|sqlmap|nmap|masscan)) {
return 403;
}
# Bloquear User-Agent vacío
if ($http_user_agent = "") {
return 403;
}
Apache - mod_evasive
sudo apt install libapache2-mod-evasive
# /etc/apache2/mods-available/evasive.conf
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 60
DOSEmailNotify [email protected]
DOSLogDir "/var/log/mod_evasive"
</IfModule>
sudo a2enmod evasive
sudo systemctl restart apache2
Capa 5: Protección a nivel aplicación
WordPress específico
// wp-config.php
// Bloquear xmlrpc
add_filter('xmlrpc_enabled', '__return_false');
// Limitar revisiones
define('WP_POST_REVISIONS', 3);
// Deshabilitar pingbacks
add_filter('pings_open', '__return_false', PHP_INT_MAX);
Plugin Wordfence
- Rate limiting integrado
- Bloqueo de IPs automático
- Firewall a nivel aplicación
Guía completa: Seguridad WordPress en VPS
Monitorización y alertas
Detectar ataque en curso
# Conexiones por IP
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
# Conexiones SYN_RECV (posible SYN flood)
netstat -n | grep SYN_RECV | wc -l
# Peticiones por segundo en Nginx
tail -f /var/log/nginx/access.log | pv -l -i10 -r > /dev/null
Script de alerta
#!/bin/bash
# /root/scripts/ddos-monitor.sh
THRESHOLD=500
CONNECTIONS=$(netstat -ntu | wc -l)
if [ $CONNECTIONS -gt $THRESHOLD ]; then
echo "ALERTA: $CONNECTIONS conexiones activas" | mail -s "Posible DDoS" [email protected]
# Log de IPs
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -50 >> /var/log/ddos-ips.log
fi
# Cron cada minuto
* * * * * /root/scripts/ddos-monitor.sh
Usar Netdata
Netdata muestra tráfico en tiempo real y puede alertar de anomalías.
Respuesta durante un ataque
Paso 1: Identificar el ataque
# Ver tráfico por IP
iftop -i eth0
# Ver conexiones
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -20
# Ver logs
tail -f /var/log/nginx/access.log
Paso 2: Activar protecciones
# Si usas Cloudflare
# Dashboard → Under Attack Mode → On
# Bloquear IPs atacantes manualmente
iptables -A INPUT -s IP_ATACANTE -j DROP
# Bloquear rangos completos si es necesario
iptables -A INPUT -s 123.45.0.0/16 -j DROP
Paso 3: Escalar si necesario
Si el ataque supera tu capacidad:
- Contacta a tu proveedor
- Activa Cloudflare Pro temporalmente
- Considera servicios especializados
Paso 4: Post-ataque
# Revisar qué IPs atacaron
cat /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -50
# Añadir a blacklist permanente
# O reportar a abuse del ISP
Herramientas de protección
Fail2ban para HTTP
# /etc/fail2ban/filter.d/nginx-req-limit.conf
[Definition]
failregex = limiting requests, excess:.* by zone.*client: <HOST>
ignoreregex =
# /etc/fail2ban/jail.local
[nginx-req-limit]
enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=ReqLimit, port="http,https"]
logpath = /var/log/nginx/error.log
findtime = 600
maxretry = 10
bantime = 7200
CSF (ConfigServer Security & Firewall)
cd /usr/src
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh
CSF incluye protección DDoS automática.
Servicios especializados
Para ataques grandes (>10 Gbps) necesitas servicios especializados:
| Servicio | Protección | Precio aprox. |
|---|---|---|
| Cloudflare Pro | 10+ Gbps | $20/mes |
| Cloudflare Business | Ilimitado | $200/mes |
| AWS Shield | Avanzada | Variable |
| Akamai | Enterprise | $$$$ |
Para la mayoría de VPS: Cloudflare gratuito + configuración correcta es suficiente.
Checklist anti-DDoS
Básico (hacer hoy)
| Tarea | ✓ |
|---|---|
| Cloudflare configurado | ☐ |
| Proxy activado (nube naranja) | ☐ |
| Firewall con rate limiting | ☐ |
| xmlrpc.php bloqueado | ☐ |
| Fail2ban activo | ☐ |
Avanzado (esta semana)
| Tarea | ✓ |
|---|---|
| Nginx rate limiting | ☐ |
| Timeouts ajustados | ☐ |
| Script de monitorización | ☐ |
| Reglas Cloudflare firewall | ☐ |
| Plan de respuesta definido | ☐ |
Prevención
Reducir superficie de ataque
- Cierra puertos innecesarios
- Deshabilita servicios no usados
- Usa CDN para contenido estático
- Implementa caché agresivo
Preparación
- Ten plan de respuesta documentado
- Conoce cómo activar Under Attack Mode
- Ten contacto de tu proveedor a mano
- Backups actualizados (por si debes migrar)
Preguntas frecuentes
¿Cloudflare gratuito protege contra DDoS?
Sí, la protección DDoS es ilimitada incluso en plan gratuito. Lo que cambia son las opciones de configuración.
¿Puedo mitigar un ataque de 100 Gbps con mi VPS?
No. Ataques volumétricos grandes requieren mitigación a nivel de red (proveedor) o servicios especializados.
¿El rate limiting afecta a usuarios legítimos?
Si está bien configurado, no. Usuarios normales no hacen 60 peticiones por segundo.
¿Debo preocuparme por DDoS?
Si tienes un sitio pequeño, probablemente no serás objetivo. Pero la protección básica es buena práctica siempre.
Nuestra recomendación
Para cualquier VPS:
- Cloudflare gratuito con proxy activado
- Rate limiting en Nginx
- Fail2ban configurado
- xmlrpc bloqueado si usas WordPress
Para sitios críticos: Cloudflare Pro + monitorización activa.
¿No quieres preocuparte? La administración gestionada incluye configuración anti-DDoS y monitorización 24/7.
Conclusión
La mayoría de ataques DDoS son simples y mitigables con configuración correcta. Cloudflare gratuito + rate limiting en el servidor cubren el 95% de los casos.
No esperes a ser atacado. Configura las protecciones básicas hoy.
¿Quieres un VPS con protección DDoS incluida? Explora los VPS de Avantys con seguridad integrada.
Guías relacionadas
- Firewall en VPS: UFW e iptables
- Fail2ban: proteger tu VPS
- CDN con Cloudflare
- Seguridad WordPress en VPS
¿Quieres la guía completa con todos los casos de uso?
¿Quieres que lo hagamos por ti?
En Avantys gestionamos tu web, hosting y crecimiento digital de punta a punta. Tú a lo importante.