DevOps y monitorización

Depuración de errores 1010 y 530 de Cloudflare en APIs autoalojadas

Un desarrollador comparte cómo las Comprobaciones de Integridad del Navegador y los fallos de túnel causaron interrupciones en la API, ofreciendo pasos de diagnóstico para quienes alojan sus propios servicios.

Ilustración de acceso exitoso desde navegador mientras el acceso desde script es bloqueado por un firewall en la nube
Ilustración creada para este artículo

Traducido automáticamente del original en inglés.

Dos interrupciones distintas del servicio afectaron a un único endpoint de API en menos de veinticuatro horas, generando confusión en el equipo de ingeniería. El 19 de octubre de 2026, un cliente Python recibió una respuesta 403 Forbidden mientras que los navegadores accedían a la misma URL sin problemas. Horas después, todos los hostnames detrás del túnel de infraestructura devolvieron un error 530, lo que indicaba una pérdida total de conectividad con el servidor de origen, a pesar de que la aplicación local funcionaba con normalidad.

Qué ocurrió

El primer incidente involucró a un script de Python que intentaba acceder a un endpoint MCP. La página se cargaba correctamente en el navegador con un estado 200 OK, pero el cliente automatizado fallaba con un error 403 que contenía el cuerpo "error code: 1010". Este código específico corresponde a la Comprobación de Integridad del Navegador (BIC) de Cloudflare, una función de seguridad que analiza características de la solicitud como huellas digitales TLS, cabeceras y cadenas User-Agent. Dado que el cliente de Python utilizaba el User-Agent predeterminado Python-urllib/3.x, el Firewall de Aplicaciones Web (WAF) lo clasificó como bot y bloqueó el acceso antes de que la solicitud llegara al servidor de aplicaciones. El cliente interpretó la página de error HTML como un fallo de análisis JSON, ocultando la causa real.

El segundo incidente ocurrió más tarde ese mismo día, cuando todos los hostnames detrás del Argo Tunnel comenzaron a devolver errores 530 con "error code: 1033". Este estado indica que la red perimetral de Cloudflare no pudo conectar con el túnel de origen. El servicio local permanecía sano y receptivo en 127.0.0.1, confirmando que la aplicación en sí no era la culpable. El proceso del túnel había finalizado silenciosamente tras perder su conexión con el edge. Para complicar la recuperación, una sesión VPN obsoleta en la máquina anfitriona estaba redirigiendo el tráfico a través de una interfaz TUN con una puerta de enlace IP falsa, causando tiempos de espera agotados en los handshakes TLS con los servidores edge de Cloudflare. Reiniciar solo el túnel no funcionó; el equipo tuvo que reiniciar primero el cliente VPN para restaurar el enrutamiento correcto.

Detalles clave

  • El error 1010 es activado por la Comprobación de Integridad del Navegador cuando una solicitud carece de firmas típicas de navegador, como un User-Agent válido o una huella digital TLS.
  • El error 1033 con estado HTTP 530 significa que el conector del Argo Tunnel está caído o no puede alcanzar el edge de Cloudflare, no que el servidor de origen esté inactivo.
  • Los User-Agents predeterminados de librerías como python-requests o python-urllib son frecuentemente marcados por sistemas de protección contra bots a menos que se permitan explícitamente.
  • Las comprobaciones de salud locales que monitorean localhost pasarán por alto las interrupciones del túnel porque la aplicación sigue ejecutándose incluso cuando el endpoint público es inalcanzable.
  • Las conexiones VPN obsoletas pueden interceptar el tráfico destinado a rangos de IP de Cloudflare, causando tiempos de espera de conexión que impiden el restablecimiento del túnel.
  • Las unidades systemd configuradas con Restart=always recuperan automáticamente los procesos de túnel que han fallado, mientras que los comandos manuales nohup no lo hacen.

Contexto

Cloudflare actúa como proxy inverso y red de distribución de contenido (CDN) situada entre los usuarios y los servidores autoalojados. Ofrece funciones de seguridad como el Firewall de Aplicaciones Web (WAF) y servicios de tunelización como Argo Tunnel (cloudflared). El WAF incluye la Comprobación de Integridad del Navegador, que examina las solicitudes entrantes en busca de señales de automatización. Si una solicitud parece provenir de un script en lugar de un humano usando un navegador, Cloudflare la bloquea con un error 1010. Esto protege los sitios web de scrapers y bots, pero puede bloquear inadvertidamente clientes de API legítimos si no se configura correctamente.

Argo Tunnel crea una conexión segura saliente desde el servidor de origen hacia el edge de Cloudflare, eliminando la necesidad de abrir puertos de entrada en el firewall. Sin embargo, esta dependencia implica que si el proceso del túnel falla o pierde conectividad de red, el sitio se vuelve inaccesible desde internet pública aunque el servidor local esté perfectamente sano. Comprender la distinción entre errores a nivel de aplicación y bloqueos a nivel de infraestructura es crítico para una resolución eficiente de problemas.

Por qué importa

Para equipos que ejecutan software autoalojado, estos incidentes destacan un punto ciego común: probar APIs únicamente mediante navegadores web. Un servicio que funciona en Chrome puede estar completamente roto para herramientas automatizadas, pipelines CI/CD o integraciones de terceros. Cuando un cliente recibe un error 1010, ve un mensaje genérico de "acceso denegado" que parece ser un problema de configuración del lado del servidor. Sin inspeccionar el cuerpo de la respuesta cruda, los desarrolladores pierden tiempo depurando código de aplicación que nunca llega a ejecutarse. Esta desorientación retrasa la resolución y erosiona la confianza en la fiabilidad de la API.

De manera similar, depender de comprobaciones de salud locales ofrece una falsa sensación de seguridad durante las interrupciones del túnel. Si los sistemas de monitoreo solo hacen ping a localhost, reportarán un estado verde mientras los usuarios externos enfrentan errores 530. Esta brecha en la visibilidad significa que las interrupciones suelen ser descubiertas por los clientes en lugar de por alertas internas. Para pequeñas y medianas empresas que gestionan su propia infraestructura, asegurar que el monitoreo valide toda la ruta pública es esencial para mantener los acuerdos de nivel de servicio (SLA) y la satisfacción del usuario.

Qué puedes hacer

  • Configura reglas del WAF para omitir la Comprobación de Integridad del Navegador en rutas específicas de API, como /api/*, para permitir clientes máquina mientras proteges las páginas públicas.
  • Documenta y aplica cadenas User-Agent específicas para los clientes de API, incluyendo información de versión y URLs de contacto, para reducir falsos positivos.
  • Separa los hostnames públicos de los endpoints de API, utilizando subdominios distintos como api.example.com con configuraciones relajadas de protección contra bots.
  • Ejecuta servicios systemd para conectores de túnel con Restart=always para garantizar la recuperación automática si el proceso falla o termina inesperadamente.
  • Monitorea URLs públicas para las comprobaciones de salud en lugar de puertos locales para detectar desconexiones del túnel y problemas de DNS inmediatamente.
  • Verifica el enrutamiento de red cuando fallen los handshakes del túnel, revisando sesiones VPN obsoletas o reglas de firewall que bloqueen rangos de IP de Cloudflare.

Más noticias

Todas las noticias