Les sessions RDP qui se ferment immédiatement après l’authentification sur Windows Server 2022 sont la hantise des administrateurs : pas de message d’erreur clair, un service critique indisponible, et des utilisateurs bloqués. Ce guide exhaustif détaille toutes les vérifications, commandes et bonnes pratiques pour rétablir un accès bureau à distance sécurisé et stable.
Vue d’ensemble du problème
Sur certains serveurs Windows Server 2022 hérités, la connexion locale via console fonctionne mais toute tentative RDP externe échoue. L’authentification aboutit (mot de passe ou smart‑card accepté), l’écran Welcome apparaît parfois une fraction de seconde puis le client affiche : « Your Remote Desktop Services session has ended ». Le phénomène n’affecte pas les nouvelles machines fraîchement installées, ce qui oriente vers un écart de configuration ou un composant corrompu plutôt qu’un bug générique de l’OS.
Symptômes caractéristiques
- Échec systématique depuis n’importe quel poste client (
mstsc.exe
ou RD Web). - Aucune invite d’acceptation de certificat n’est présentée ; l’erreur survient après la phase d’initialisation graphique.
- Journal Système : Event ID 40 (Kernel‑Power) suivi d’un Event ID 24 (TerminalServices‑LocalSessionManager) indiquant la fermeture de session quasi instantanée.
- Lanceurs PowerShell (Enter‑PsSession) aboutissent avant de se refermer immédiatement.
Comprendre le flux d’une session RDP
La réussite d’un bureau à distance repose sur une chaîne logicielle et réseau :
- Le service
TermService
crée un écouteur TCP (par défaut 3389). - NLA effectue une authentification Kerberos ou NTLM avant l’ouverture de session interactive.
- Le serveur obtient un certificat Machine pour chiffrer le canal TLS (sécurité CredSSP).
- Une licence RDS est allouée si le serveur est en mode Session‑Host avec licence centrale.
- Les politiques locales ou GPO appliquent restrictions et quotas.
- La session utilisateur est créée par
Winlogon.exe
et transmise au service graphique.
Une rupture à n’importe quel maillon provoque la déconnexion immédiate que vous observez.
Troubleshooting pas à pas
Étape | Objectif | Commande / Action | Résultat attendu |
---|---|---|---|
1 | Distinguer réseau vs. système | mstsc /v:localhost | Connexion réussie = incident réseau ; échec = problème local |
2 | Vérifier l’écoute RDP | qwinsta ou netstat -ano | find ":3389" | Listener rdp-tcp à l’état Listen |
3 | Confirmer le port utilisé | Registre : HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\PortNumber | Valeur décimale 3389 |
4 | Contrôler le certificat | MMC → Certificats (Machine) → Remote Desktop | Certificat valide et clé privée présente |
5 | Tester Network Level Authentication | Désactiver temporairement NLA (Panneau Système → Remote) | Si la connexion fonctionne sans NLA : vérifier SPN, drift NTP, canal sécurisé |
6 | Examiner les journaux | Event Viewer → Applications & Services Logs\Microsoft\Windows\TerminalServices-* | Identification d’erreurs précises (licence, auth, GPO) |
7 | Vérifier les droits | GPMC → « Allow log on through Remote Desktop Services » + appartenance Remote Desktop Users | Comptes autorisés listés |
8 | Réparer et redémarrer | sfc /scannow , Windows Update, redémarrage TermService | Fichiers système restaurés, patchs appliqués |
Analyse détaillée de chaque étape
Tester en local avec mstsc /v:localhost
Ce test contourne complètement le pare‑feu et toute appliance intermédiaire. Un succès signifie que la pile RDP du serveur est saine ; concentrez‑vous alors sur les ACL, le filtrage IPS ou une Gateway RD mal configurée. En revanche, un échec local signale immédiatement un souci de service ou de certificats.
Le listener RDP‑TCP
La commande qwinsta
doit afficher :
rdp-tcp 65536 Listen
Si le listener est absent ou en Down, recréez‑le :
cscript %windir%\system32\SCRegEdit.wsf /AR 0 net start TermService
Port personnalisé
Les migrations rapides ou les politiques hétérogènes peuvent changer le port RDP. Validez la valeur PortNumber
(REG_DWORD, little‑endian) puis ouvrez le port correspondant dans le pare‑feu Windows et sur vos équipements périmétriques.
Certificat et TLS
Depuis 2022, Microsoft force TLS 1.2 pour RDP. Un certificat expiré ou sans clé privée génère un Event ID 1058 (RemoteDesktopServices-RemoteFX-Graphics) et la session est refusée. Supprimez‑le, puis :
Restart-Service TermService -Force
Le service créera un nouveau certificat auto‑signé de 2048 bits.
NLA et Kerberos
Network Level Authentication s’appuie sur Kerberos pour valider les identités avant d’ouvrir la session graphique. Trois causes majeures :
- SPN du serveur manquant : exécutez
setspn -Q "TERMSRV/<FQDN>"
. - Dérive temporelle : la tolérance Kerberos est de 5 minutes. Vérifiez
w32tm /query /status
. - Canal sécurisé AD rompu : ré‑établissez‑le avec
Test-ComputerSecureChannel -Repair
.
Logs Terminal Services
Filtrez sur les Event ID :
ID | Source | Description fréquente |
---|---|---|
1012 | TerminalServices-Printers | Échec de redirection d’imprimantes, souvent bénin |
1296 | TS‑Licensing | Serveur de licences indisponible ou quota épuisé |
56 | TermDD | Erreur de protocole (cipher suite ou version TLS rejetées) |
50 | Winlogon | Échec de chargement de profil utilisateur |
Droits d’accès et GPO héritées
Les serveurs issus de vieilles OU héritent parfois de politiques restrictives :
- Encryption Oracle Remediation forcé à
Force Updated Clients
peut couper d’anciens clients. - Set client connection encryption level fixé à
High
mais sans support RSA 4096 sur le certificat. - Limit number of connections : une valeur 0 bloque toute nouvelle session.
Comparez les GPO entre un serveur fonctionnel et un serveur défaillant avec gpresult /h compare.html
ou l’outil AD MX.
Réparation des fichiers système
Des mises à jour incomplètes peuvent corrompre la DLL rdpcorets.dll
. La séquence recommandée :
Dism /Online /Cleanup-Image /RestoreHealth sfc /scannow wuauclt /detectnow Restart-Computer
Ne réenregistrez rdpclip.exe
qu’en dernier recours.
Scénarios spécifiques rencontrés en entreprise
Conflit avec un agent de sécurité
Certaines EDR insèrent des DLL dans lsass.exe
ou termsrv.dll
et déclenchent des déconnexions. Placez TermService
dans la liste d’exclusion du produit ou déployez la dernière version de l’agent.
Service Broker dans une ferme RDS
Si le serveur est membre d’une collection, la session est redirigée par le Connection Broker. Un certificat Broker expiré ou un enregistrement DNS obsolète provoque la fermeture immédiate. Exécutez Get-RDConnectionBrokerHighAvailability
puis mettez à jour le rôle si nécessaire.
Machines virtuelles clonées
Le clonage sans sysprep conserve les identités cryptographiques : SID identique, certificat RDP dupliqué, SPN identique. Le résultat est une chute Kerberos. Régénérez les GUID via sysprep /generalize /oobe /shutdown
avant déploiement.
Outils avancés de diagnostic
- Process Monitor : filtrez sur
termsrv.exe
pour détecter un accès refusé sur un fichier .dll. - Wireshark : capture sur port 3389, recherchez un EncryptedAlert après le ClientHello (cipher mismatch).
- ETW trace :
logman start RDPTrace -p Microsoft-Windows-TermDD 0xFFFFFFFF 5 -o rdp.etl
puistracerpt
.
Bonnes pratiques de sécurisation RDP
Rétablir la connexion ne suffit pas : il faut renforcer la surface d’attaque !
- Exiger le tunneling VPN ou RD Gateway et fermer 3389 public.
- Limiter le nombre de tentatives avec Account Lockout Policy.
- Activer UDR (User Datagram Protocol) transport (TCP+UDP) pour une meilleure latence, mais filtrer UDP 3389 en entrée si non utilisé.
- Déployer des certificats émis par une AC interne plutôt que des auto‑signés.
- Surveiller les Event ID 4625 (échec d’auth) et corréler avec fail2ban ou Azure Sentinel.
Automatiser la vérification avec PowerShell
Script minimal pour scanner 100 hôtes et générer un rapport CSV :
$servers = Get-Content .\listeServeurs.txt $result = foreach ($s in $servers) { try { $tcp = Test-NetConnection -ComputerName $s -Port 3389 -InformationLevel Quiet $nla = (Invoke-Command -ComputerName $s { (Get-ItemProperty ` 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server').UserAuthentication }) [pscustomobject]@{ Serveur = $s TCP3389 = $tcp NLA = $nla } } catch { } } $result | Export-Csv .\Etat_RDP.csv -NoTypeInformation
Importez ensuite le CSV dans Power BI ou Excel pour visualiser l’état global.
Checklist de validation finale
- Listener
rdp-tcp
actif sur le bon port. - Certificat RDP valide (date, Signature SHA‑256).
- NTP synchronisé,
w32tm /stripchart
montre un écart < 100 ms. - SPN
TERMSRV/<FQDN>
inscrit et unique dans l’AD. - Event Viewer exempt d’ID 56, 1058, 1296 lors d’une connexion de test.
- Connexion confirmée depuis un poste externe et depuis
mstsc /v:localhost
.
Conclusion
Dans 90 % des cas, l’analyse méthodique détaillée ci‑dessus permet d’isoler et de corriger la cause racine : port fermé, certificat expiré, NLA mal négocié ou GPO trop restrictive. Pour le reste, les traces ETW et un contrôle attentif de la chaîne Kerberos/TLS dévoilent les derniers écueils. En appliquant ces bonnes pratiques, vous garantissez un accès Bureau à distance performant et conforme aux exigences de sécurité moderne sur Windows Server 2022.