DevOps et supervision

Débogage des erreurs Cloudflare 1010 et 530 dans les API auto-hébergées

Un développeur explique comment les vérifications d'intégrité du navigateur et les pannes de tunnel ont causé des indisponibilités d'API, en proposant des étapes de diagnostic pour les hébergeurs autonomes.

Illustration montrant l'accès navigateur réussissant tandis que l'accès script est bloqué par un pare-feu cloud
Illustration créée pour cet article

Traduit automatiquement depuis l’original en anglais.

Deux interruptions distinctes du service ont touché un seul point de terminaison API en moins de vingt-quatre heures, créant la confusion au sein de l'équipe d'ingénierie. Le 19 octobre 2026, un client Python a reçu une réponse 403 Forbidden alors que les navigateurs accédaient à la même URL sans problème. Quelques heures plus tard, tous les noms d'hôte situés derrière le tunnel d'infrastructure renvoyaient une erreur 530, indiquant une perte totale de connectivité avec le serveur d'origine malgré le fonctionnement normal de l'application locale.

Ce qui s'est passé

Le premier incident impliquait un script Python tentant d'accéder à un point de terminaison MCP. Le navigateur chargeait la page avec succès (statut 200 OK), mais le client automatisé échouait avec une erreur 403 contenant le corps "error code: 1010". Ce code spécifique correspond au Browser Integrity Check (BIC) de Cloudflare, une fonctionnalité de sécurité qui analyse les caractéristiques des requêtes telles que les empreintes TLS, les en-têtes et les chaînes User-Agent. Comme le client Python utilisait le User-Agent par défaut Python-urllib/3.x, le pare-feu applicatif web (WAF) l'a classifié comme un bot et a bloqué l'accès avant que la requête n'atteigne le serveur d'application. Le client a interprété la page d'erreur HTML comme un échec d'analyse JSON, masquant ainsi la véritable cause.

Le second incident est survenu plus tard dans la journée lorsque tous les noms d'hôte derrière le Argo Tunnel ont commencé à renvoyer des erreurs 530 avec "error code: 1033". Ce statut indique que le réseau périphérique de Cloudflare ne pouvait pas se connecter au tunnel d'origine. Le service local restait sain et réactif sur 127.0.0.1, confirmant que l'application elle-même n'était pas en cause. Le processus du tunnel s'était arrêté silencieusement après avoir perdu sa connexion avec le bord (edge). Pour compliquer la récupération, une session VPN obsolète sur la machine hôte routait le trafic via une interface TUN avec une passerelle IP fictive, provoquant des délais d'attente lors des poignées de main TLS avec les serveurs edge de Cloudflare. Le redémarrage du tunnel seul a échoué ; l'équipe a dû d'abord redémarrer le client VPN pour rétablir un routage correct.

Détails clés

  • L'erreur 1010 est déclenchée par le Browser Integrity Check lorsqu'une requête manque de signatures typiques de navigateur, telles qu'un User-Agent valide ou une empreinte TLS.
  • L'erreur 1033 avec un statut HTTP 530 signifie que le connecteur Argo Tunnel est hors service ou ne peut pas atteindre le bord de Cloudflare, et non que le serveur d'origine est en panne.
  • Les User-Agents par défaut des bibliothèques comme python-requests ou python-urllib sont fréquemment signalés par les systèmes de protection contre les bots sauf s'ils sont explicitement autorisés.
  • Les contrôles de santé locaux surveillant localhost manqueront les pannes de tunnel car l'application continue de fonctionner même lorsque le point de terminaison public est inaccessible.
  • Les connexions VPN obsolètes peuvent intercepter le trafic destiné aux plages IP de Cloudflare, causant des délais de connexion qui empêchent la rétablissement du tunnel.
  • Les unités systemd configurées avec Restart=always récupèrent automatiquement les processus de tunnel plantés, contrairement aux commandes manuelles nohup.

Contexte

Cloudflare agit comme un proxy inverse et un réseau de diffusion de contenu situé entre les utilisateurs et les serveurs auto-hébergés. Il offre des fonctionnalités de sécurité telles que le Web Application Firewall (WAF) et des services de tunnelisation comme Argo Tunnel (cloudflared). Le WAF inclut le Browser Integrity Check, qui examine les requêtes entrantes à la recherche de signes d'automatisation. Si une requête ressemble à un script plutôt qu'à un humain utilisant un navigateur, Cloudflare la bloque avec une erreur 1010. Cela protège les sites web contre les scrapers et les bots, mais peut bloquer involontairement des clients API légitimes si la configuration n'est pas correcte.

Argo Tunnel crée une connexion sortante sécurisée depuis le serveur d'origine vers le bord de Cloudflare, éliminant le besoin d'ouvrir des ports entrants sur le pare-feu. Cependant, cette dépendance signifie que si le processus du tunnel plante ou perd la connectivité réseau, le site devient inaccessible depuis Internet public, même si le serveur local est parfaitement sain. Comprendre la distinction entre les erreurs au niveau de l'application et le blocage au niveau de l'infrastructure est crucial pour un dépannage efficace.

Pourquoi c'est important

Pour les équipes exécutant des logiciels auto-hébergés, ces incidents mettent en évidence un angle mort courant : tester les API uniquement via des navigateurs web. Un service qui fonctionne dans Chrome peut être complètement cassé pour les outils automatisés, les pipelines CI/CD ou les intégrations tierces. Lorsqu'un client reçoit une erreur 1010, il voit un message générique "access denied" qui semble indiquer un problème de configuration côté serveur. Sans inspecter le corps brut de la réponse, les développeurs perdent du temps à déboguer du code d'application qui n'est jamais réellement exécuté. Cette fausse piste retarde la résolution et érode la confiance dans la fiabilité de l'API.

De même, compter sur les contrôles de santé locaux procure un faux sentiment de sécurité pendant les pannes de tunnel. Si les systèmes de surveillance ne pinguent que localhost, ils afficheront un statut vert tandis que les utilisateurs externes font face à des erreurs 530. Ce manque de visibilité signifie que les pannes sont souvent découvertes par les clients plutôt que par les alertes internes. Pour les petites et moyennes entreprises gérant leur propre infrastructure, s'assurer que la surveillance valide le chemin public complet est essentiel pour maintenir les accords de niveau de service (SLA) et la satisfaction des utilisateurs.

Ce que vous pouvez faire

  • Configurez les règles WAF pour ignorer le Browser Integrity Check sur des chemins API spécifiques, tels que /api/*, afin d'autoriser les clients machines tout en protégeant les pages publiques.
  • Documentez et imposez des chaînes User-Agent spécifiques pour les clients API, y compris les informations de version et les URL de contact, pour réduire les faux positifs.
  • Séparez les noms d'hôte publics des points de terminaison API, en utilisant des sous-domaines distincts comme api.example.com avec des paramètres de protection contre les bots assouplis.
  • Exécutez les services systemd pour les connecteurs de tunnel avec Restart=always pour assurer une récupération automatique si le processus plante ou se termine de manière inattendue.
  • Surveillez les URL publiques pour les contrôles de santé au lieu des ports locaux afin de détecter immédiatement les déconnexions de tunnel et les problèmes DNS.
  • Vérifiez le routage réseau lorsque les poignées de main du tunnel échouent, en cherchant des sessions VPN obsolètes ou des règles de pare-feu bloquant les plages IP de Cloudflare.

Autres actualités

Toutes les actualités