Cómo permitir tráfico legítimo de apps y servicios propios sin saltarse la protección contra bots.

Cuando configuras reglas de bloqueo agresivas en Cloudflare (por país, por comportamiento, etc.), el tráfico legítimo de tus propias apps y servicios puede quedar bloqueado también. Las Skip Rules permiten que ciertas peticiones pasen directamente, saltándose el resto de reglas.
⚠️ Orden importa Las reglas de Cloudflare se ejecutan de arriba a abajo. Las Skip Rules SIEMPRE deben estar en las primeras posiciones, antes de cualquier regla de bloqueo.
El escenario
Supongamos que tienes myapp.com, una aplicación con:
- Una app móvil (iOS + Android) que consume tu API
- Reglas de bloqueo por países y rutas maliciosas
Sin Skip Rules, tu app móvil podría quedar bloqueada por las mismas reglas que frenan a los bots.
Estructura de reglas recomendada
Así debe quedar el orden en Security → WAF → Custom Rules:
| Order | Nombre | Condición | Acción |
|---|---|---|---|
| 1 | Whitelist apps propias | User-Agent o Header personalizado | Skip |
| 2 | Block rutas maliciosas | URI contiene /.env, /.git, etc. | Block |
| 3 | Challenge por país | País en lista sospechosa | JS Challenge |
| 4 | Block total por país | País de alto riesgo | Block |
Crear la Skip Rule
Ve a Security → WAF → Custom Rules → Create rule y escribe la siguiente expresión. Esta regla cubre la app móvil:
Regla:
# Cubre la app móvil (por header personalizado)
(any(http.request.headers["header_secreto"][*] contains "codigo_clave_secreta_token"))
En Choose action selecciona Skip → marca Skip all remaining custom rules.
✅ Resultado Cualquier petición que llegue con el User-Agent correcto se saltará todas las reglas de bloqueo.
Añadir el header en tu app móvil
En tu cliente HTTP (ejemplo con Axios en React Native), añade el header en el interceptor de requests:
axiosInstance.interceptors.request.use((config) => {
config.headers["header_secreto"] = `codigo_clave_secreta_token`;
return config;
});
ℹ️ Nota sobre mayúsculas Cloudflare normaliza todos los headers a minúsculas internamente. Da igual si en tu app escribes Header_Secretro o header_secreto — la comparación funcionará igual.
¿Es seguro esto?
Depende del nivel de amenaza:
| Escenario | Header solo | Header + Token secreto |
|---|---|---|
| Bots genéricos masivos | ✓ Suficiente | ✓ Suficiente |
| Scrapers automáticos | ✓ Suficiente | ✓ Suficiente |
| Atacante dirigido a tu app | ✗ Puede replicarlo | ✓ Sin el token no pasa |
🔒 Nunca expongas el token No lo subas a GitHub ni lo incluyas en logs. Úsalo como variable de entorno en tu app.
Verificar que funciona
Desde terminal, simula una petición de tu app y comprueba que no es bloqueada:
cURL — Test
# Debe pasar (simula la app)
curl -v https://api.myapp.com/endpoint \
-H "header_secreto: codigo_clave_secreta_token"
# Debe ser bloqueado (sin header, desde país bloqueado)
curl -v https://api.myapp.com/endpoint
En Cloudflare → Security → Events verás en tiempo real qué regla se aplicó a cada petición y si fue Skip, Block o Challenge.
✅ Todo correcto si… Las peticiones con el header aparecen como «Skip» en el log de eventos, y las peticiones sin header desde países bloqueados aparecen como «Block».

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.