
Cloudflare: Hardening WAF & Seguridad OWASP Top 10
Guía exhaustiva de configuración perimetral y WAF en Cloudflare conforme a los estándares de seguridad OWASP Top 10.
1. Arquitectura de Seguridad Perimetral y OWASP
El modelo de seguridad en capas (Defense in Depth) de Cloudflare actúa como escudo perimetral para proteger aplicaciones web y APIs contra las amenazas clasificadas en el OWASP Top 10.
Al filtrar el tráfico malicioso en el Edge antes de que impacte en la infraestructura de origen, se reduce la superficie de ataque, se evitan fugas de datos y se optimiza el consumo de recursos del servidor.
2. Cloudflare WAF: OWASP Core Ruleset & Managed Rules
Para neutralizar inyecciones (SQLi, XSS, Command Injection), ataques de inclusión de archivos (LFI/RFI) y falsificación de peticiones (SSRF), configuramos los dos conjuntos de reglas administradas principales:
A. Cloudflare OWASP Core Ruleset (CRS)
Basado en el estándar OWASP ModSecurity Core Rule Set con motor de puntuación de anomalías (Anomaly Scoring):
- Navegar a Seguridad > WAF > Conjuntos de reglas administradas.
- Desplegar Cloudflare OWASP Core Ruleset:
- Nivel de paranoia (Paranoia Level):
- Nivel 1 (PL1): Reglas base con tasa de falsos positivos prácticamente nula (adecuado para entornos estándar).
- Nivel 2 (PL2): Reglas adicionales de inspección estricta (recomendado para producción empresarial y comercio electrónico).
- Umbral de puntuación de anomalía (Score Threshold):
- Establecer en Medium (Puntuación 40) o High (Puntuación 25).
- Acción ante detección:
- Seleccionar Managed Challenge (Desafío interactivo/Turnstile no intrusivo) o Block (Bloqueo directo).
- Nivel de paranoia (Paranoia Level):
B. Cloudflare Managed Ruleset (Parcheo Virtual / CVEs)
Proporciona protección inmediata frente a vulnerabilidades de día cero (Zero-Day) y exploits conocidos (Log4j, Spring4Shell, vulnerabilidades de CMS y servidores web):
- Estado: Habilitado.
- Acción predeterminada: Predeterminada por Cloudflare (Drop / Block para payloads de alta severidad).
3. Control de Acceso y Rate Limiting (Fuerza Bruta & DoS L7)
Para mitigar ataques de denegación de servicio en capa 7 (OWASP A04) y ataques de fuerza bruta en paneles de acceso (OWASP A07), implementamos reglas de limitación de tasa:
Regla 1: Protección de Endpoints de Autenticación y Formularios
Protege rutas sensibles como /login, /wp-login.php, /api/auth/* o /contacto:
- Condición:
(http.request.uri.path contains "/login" or http.request.uri.path eq "/contacto") and http.request.method eq "POST" - Límite: Máximo 5 peticiones en una ventana de 10 segundos por dirección IP.
- Acción: Block durante 15 minutos o Managed Challenge.
Regla 2: Restricción Geográfica y Bloqueo por Reputación de IP
- Regla Geográfica: Bloquear o desafiar peticiones originadas en países fuera del radio de operación del servicio:
- Expresión:
(not ip.geoip.country in {"ES" "PT" "FR"}) and not cf.client.bot - Acción:
Managed Challenge
- Expresión:
- Listas de Permisión Seguras: Las excepciones de IPs corporativas o escáneres autorizados se configuran en Administrar cuenta > Configuraciones > Listas y se referencian en el WAF con la acción Skip / Bypass.
4. Cifrado y Seguridad de Transporte SSL/TLS (OWASP A02)
El cifrado no solo debe proteger el tramo entre el usuario y Cloudflare, sino también el enlace entre Cloudflare y el servidor de origen (Zero Trust):
- Modo de Encriptación: Completo (estricto) / Full (Strict).
Nota: Requiere un certificado SSL válido en el servidor de origen (emitido por Let’s Encrypt o Cloudflare Origin CA). Evita el uso de
Completosimple oFlexible, los cuales son vulnerables a ataques Man-In-The-Middle. - Versión Mínima de TLS: Establecer en TLS 1.2 (deshabilitando TLS 1.0 y 1.1 obsoletos).
- TLS 1.3: Habilitado con 0-RTT configurado de forma segura.
- Reescritura Automática HTTPS: Activado.
- HSTS (HTTP Strict Transport Security):
- Estado: Habilitado.
- Edad máxima (Max-Age):
31536000segundos (12 meses o 24 meses). - Incluir subdominios (includeSubDomains): Activado.
- Precarga (Preload): Activado.
- Encabezado antirrastreo: Activado.
Ocultación del Origen (Evitar Bypass del WAF)
Para asegurar que ningún atacante pueda saltarse el WAF de Cloudflare contactando directamente a la IP pública del servidor:
- Authenticated Origin Pulls (AOP): El servidor valida el certificado TLS del cliente Cloudflare.
- Cloudflare Tunnel (
cloudflared): La mejor práctica recomendada. Crea una conexión saliente segura sin necesidad de abrir puertos entrantes (80/443) en el firewall del servidor.
5. Protección Anti-Bot y Formularios Públicos
Para combatir el scraping no autorizado, credential stuffing y bots maliciosos:
- Bot Fight Mode / Super Bot Fight Mode: Habilitado en la consola de seguridad para desafiar automáticamente tráfico automatizado conocido.
- Cloudflare Turnstile: Integración de CAPTCHA inteligente, respetuoso con la privacidad del usuario y compatible con GDPR/RGPD, eliminando puzles visuales molestos.
6. Inyección de Cabeceras de Seguridad con Transform Rules (OWASP A05)
Cloudflare permite inyectar cabeceras HTTP de seguridad directamente en el Edge mediante Reglas > Transform Rules > Modificar encabezado de respuesta:
| Cabecera HTTP | Valor Recomendado | Propósito |
|---|---|---|
X-Frame-Options |
SAMEORIGIN |
Previene ataques de Clickjacking. |
X-Content-Type-Options |
nosniff |
Evita la interpretación errónea de tipos MIME. |
Referrer-Policy |
strict-origin-when-cross-origin |
Protege URLs internas en enlaces externos. |
Permissions-Policy |
camera=(), microphone=(), geolocation=() |
Deshabilita hardware del cliente no utilizado. |
Content-Security-Policy |
default-src 'self'; img-src 'self' data: https:; ... |
Mitiga XSS y ataques de inyección de recursos. |
7. Emisión Segura de Certificados con Certbot y API Token
Nunca se debe utilizar la clave global de la cuenta (Global API Key). En su lugar, creamos un Cloudflare API Token con permisos de mínimo privilegio:
Creación del API Token
- En el perfil de Cloudflare: Mis tokens de API > Crear token.
- Seleccionar la plantilla Editar DNS de zona (Edit Zone DNS):
- Permisos:
Zona - DNS - Editar - Recursos de zona:
Incluir - Zona específica - ejemplo.com - Restricción de IP del cliente: (Opcional) Limitar a la IP fija del servidor.
- Permisos:
Configuración en el Servidor (CentOS / Debian)
Instalamos el plugin DNS de Cloudflare:
yum install python3-certbot-dns-cloudflare -y
mkdir -p /root/.cloudflare
chmod 700 /root/.cloudflare
nano /root/.cloudflare/cloudflare.ini
Contenido de /root/.cloudflare/cloudflare.ini (protegido con permisos 600):
# Cloudflare API Token con permisos específicos Zone:DNS:Edit
dns_cloudflare_api_token = tu_token_seguro_con_alcance_minimo_abcdef123456
Aseguramos los permisos del archivo de credenciales:
chmod 600 /root/.cloudflare/cloudflare.ini
Generamos el certificado comodín (Wildcard) mediante validación DNS-01:
certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /root/.cloudflare/cloudflare.ini \
--dns-cloudflare-propagation-seconds 30 \
-d ejemplo.com,*.ejemplo.com \
--preferred-challenges dns-01
8. Resolución de Falsos Positivos e Integraciones Cloud
Al conectar servicios distribuidos (por ejemplo, microservicios en AWS, webhooks de pagos o integraciones SaaS), es habitual que el WAF pueda clasificar peticiones legítimas como sospechosas.
Gestión Segura de Excepciones
Para evitar desactivar reglas completas, se debe crear una regla de omisión (WAF Skip Rule) granular:
- Filtro de Expresión:
(ip.src in {52.0.0.0/8 54.0.0.0/8} and http.request.uri.path eq "/api/webhook/aws") - Acción:
Skip- Seleccionar específicamente el subsistema a omitir: Cloudflare Managed Ruleset o OWASP Core Ruleset únicamente para esa ruta y origen validado.
¿Necesitas ayuda implementando esta solución?
El equipo de ingenieros de Kuretes puede encargarse de la configuración, migración y mantenimiento seguro de estos entornos en tu infraestructura empresarial.