WAF/WAAP · RD Gateway · Erreurs 502 · Analyse protocolaire WebSocket · Correction reverse proxy
Notre client est une collectivité territoriale qui met à disposition de ses agents un accès distant à leurs applications internes via Microsoft RD Gateway (Remote Desktop Gateway). Cet accès permet aux agents en télétravail ou en déplacement de se connecter à leur environnement de bureau à distance, à travers un navigateur ou le client RDP natif de Windows.
L'architecture de sécurité repose sur une solution WAF/WAAP positionnée en frontal, qui inspecte et filtre le trafic entrant avant de le relayer vers les serveurs internes. C'est une bonne pratique : le WAF protège les applications exposées sur Internet contre les attaques web classiques (injections, XSS, requêtes malformées, etc.).
Le problème : depuis la mise en place de cette architecture, les utilisateurs distants rencontraient des erreurs 502 (Bad Gateway) de manière systématique lorsqu'ils tentaient de se connecter via le RD Gateway. Les sessions ne s'établissaient pas, rendant l'accès distant totalement inopérant.
Avant notre intervention, l'équipe IT de la collectivité avait déjà réalisé un certain nombre de vérifications :
Tout semblait en ordre, et pourtant le 502 persistait. C'est à ce stade que nous sommes intervenus.
On a commencé par analyser le flux réseau de bout en bout pour comprendre à quel moment précis la connexion échouait. Le RD Gateway utilise un mécanisme en deux temps :
Upgrade: websocket). C'est par ce canal WebSocket que transite ensuite le flux RDP encapsulé.C'est précisément à la phase 2 que le problème se produisait.
Le protocole WebSocket permet une communication bidirectionnelle persistante entre le client et le serveur, contrairement au HTTP classique qui fonctionne en requête/réponse. C'est indispensable pour le bureau à distance : le serveur doit pouvoir envoyer des mises à jour d'écran au client en continu, sans que celui-ci ait à les demander à chaque fois.
Le WAF/WAAP était configuré pour relayer le trafic vers le RD Gateway en utilisant son module de reverse proxy HTTP standard. Ce module sait parfaitement gérer les requêtes HTTP/HTTPS classiques : il reçoit la requête du client, l'inspecte, et la transmet au serveur backend.
Mais quand le client RDP demandait l'upgrade en WebSocket, le reverse proxy HTTP ne savait pas gérer cette transition. Concrètement :
Upgrade: websocket et Connection: UpgradeEn résumé : le trafic passait par le mauvais module de proxy. Il fallait utiliser le module dédié au WebSocket au lieu du module HTTP standard.
Ce type de dysfonctionnement est particulièrement piégeux car tout semble correctement configuré côté WAF : les règles de routage sont bonnes, le trafic HTTPS passe, l'authentification fonctionne. Le problème n'apparaît qu'au moment de l'upgrade WebSocket, ce qui le rend invisible dans les logs HTTP classiques. Sans analyse protocolaire fine, on peut tourner en rond pendant des jours.
La correction consistait à reconfigurer la règle de reverse proxy du WAF pour que le trafic à destination du RD Gateway soit traité par le module de proxy WebSocket plutôt que par le module de proxy HTTP standard.
Concrètement, au lieu de faire transiter l'intégralité du flux via le handler HTTP classique, la règle devait :
La bonne architecture pour un RD Gateway derrière un WAF/WAAP repose sur deux modules de proxy complémentaires : le module HTTP pour la phase d'authentification et la négociation initiale, et le module WebSocket pour le tunnel RDP une fois la session établie. Les deux doivent coexister sur la même règle de routage.
Ce cas illustre un problème classique mais sous-estimé dans les architectures de sécurité applicative : la majorité des WAF/WAAP gèrent très bien le trafic HTTP/HTTPS, mais le support des protocoles basés sur WebSocket nécessite une configuration spécifique qui n'est pas toujours activée par défaut — ni même documentée clairement par les éditeurs.
Le RD Gateway n'est pas le seul service concerné : toute application utilisant WebSocket (visioconférence, outils collaboratifs temps réel, applications métier modernes) peut rencontrer le même problème derrière un reverse proxy ou un WAF mal configuré.
L'autre enseignement : un diagnostic protocolaire rigoureux, couche par couche, permet souvent de résoudre en quelques heures un problème sur lequel les équipes butent depuis des semaines. Ici, l'infrastructure fonctionnait, la configuration semblait correcte, les certificats étaient valides. Seule l'analyse fine du flux au moment de l'upgrade WebSocket a permis d'identifier la cause racine.
Si vous publiez un service utilisant WebSocket derrière un WAF ou un reverse proxy, vérifiez systématiquement que le module de proxy WebSocket est activé et correctement configuré pour ce service. Un test fonctionnel complet (pas seulement l'accès à la page d'authentification) est indispensable avant la mise en production.
Erreurs 502, timeouts, services inaccessibles — nous diagnostiquons les dysfonctionnements à la couche applicative et protocolaire.
Discuter de votre projet