RDP Bastion¶
Le Bastion RDP Reemo est un environnement durci, exposé de manière sécurisée via une session Reemo directement dans le navigateur.
Ce guide couvre d’abord le déploiement (côté administrateur), puis l’usage au quotidien (côté utilisateur final), avec un focus particulier sur le transfert de fichiers via le lecteur \\tsclient\Reemo.
Template¶
Ce gabarit est importable depuis la page Images de l’interface d’administration. Reportez-vous à la section Import et export d’images pour la procédure d’importation et de mise à jour.
{
"name": "RDP Bastion",
"type": "ALU",
"comments": "",
"reference": "registry.reemo.io/reemosbrdp",
"icon": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svg width=\"800px\" height=\"800px\" viewBox=\"0 0 100 100\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">\n <path style=\"fill:#888888;stroke:#222222;stroke-width:1.5\" d=\"m 30,56 0,6 c 0,0 -4,0 -5,0 -3,0 -4,4 -4,4 1,0 33,0 34,0 0,0 -1,-4 -3,-4 -2,0 -5,0 -5,0 l 0,-6\"/>\n <path style=\"fill:#cccccc;stroke:#222222;stroke-width:3px;stroke-linecap:butt\" d=\"M 4,51 C 4,41 4,19 4,11 4,9 4,4.6 8,4.6 c 8,0 57,0 61,0 4,0 4,4.4 4,9.4 0,7 0,33 0,37 0,1 0,4 -6,4 -4,0 -55,0 -59,0 -4,0 -4,-4 -4,-4 z\"/>\n <path style=\"fill:#1E567D;stroke:#333333\" d=\"M 8,9 69,9 69,51 8,51 z\"/>\n <path style=\"fill:#888888;stroke:#222222;stroke-width:1.5\" d=\"m 53,88 0,6 c 0,0 -4,0 -5,0 -3,0 -4,4 -4,4 1,0 33,0 34,0 0,0 -1,-4 -3,-4 -2,0 -5,0 -5,0 l 0,-6\"/>\n <path style=\"fill:#cccccc;stroke:#222222;stroke-width:3px;stroke-linecap:butt\" d=\"m 27,83 c 0,-10 0,-32 0,-40 0,-2 0,-6 4,-6 8,0 57,0 61,0 4,0 4,4 4,9 0,7 0,33 0,37 0,1 0,4 -6,4 -4,0 -55,0 -59,0 -4,0 -4,-4 -4,-4 z\"/>\n <path style=\"fill:#3B739A;stroke:#444444\" d=\"m 31,41 61,0 0,42 -61,0 z\"/>\n <circle cx=\"72\" cy=\"12\" r=\"5\" style=\"fill:#e24b4a;stroke:#791f1f;stroke-width:1\"/>\n <path style=\"fill:none;stroke:#ffffff;stroke-width:1.5\" d=\"M 70,12 72,14 75,10\"/>\n</svg>",
"config": [
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "desktop",
"intMax": null,
"intMin": null,
"intStep": null,
"volumeName": null,
"volumeTarget": null,
"volumeStorageClass": null,
"volumeAccessMode": null,
"volumeMode": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"editable": true,
"hint": "Choose between a full desktop environment or a single isolated application",
"name": "Session Type",
"placeholder": null,
"type": "SELECT",
"uiPriority": 950,
"value": "",
"variable": "REEMO_SESSION_TYPE",
"optional": false
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"intMax": null,
"intMin": null,
"intStep": null,
"volumeName": null,
"volumeTarget": null,
"volumeStorageClass": null,
"volumeAccessMode": null,
"volumeMode": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"editable": false,
"hint": null,
"name": "Desktop",
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 10,
"value": "desktop",
"variable": "REEMO_SESSION_TYPE",
"optional": false
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"intMax": null,
"intMin": null,
"intStep": null,
"volumeName": null,
"volumeTarget": null,
"volumeStorageClass": null,
"volumeAccessMode": null,
"volumeMode": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"editable": false,
"hint": null,
"name": "Vault",
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 10,
"value": "vault",
"variable": "REEMO_AUTH_METHOD",
"optional": false
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": "3389",
"intMax": null,
"intMin": null,
"intStep": null,
"volumeName": null,
"volumeTarget": null,
"volumeStorageClass": null,
"volumeAccessMode": null,
"volumeMode": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"editable": true,
"hint": "Target RDP service port",
"name": "Port",
"placeholder": null,
"type": "STRING",
"uiPriority": 960,
"value": "",
"variable": "REEMO_RDP_PORT",
"optional": false
},
{
"conditionOp": "EQUAL",
"conditionVal": "remoteapp",
"conditionVar": "REEMO_SESSION_TYPE",
"defaultValue": null,
"intMax": null,
"intMin": null,
"intStep": null,
"volumeName": null,
"volumeTarget": null,
"volumeStorageClass": null,
"volumeAccessMode": null,
"volumeMode": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"editable": true,
"hint": "Optional command-line arguments to pass to the standalone application",
"name": "Application Arguments",
"placeholder": null,
"type": "STRING",
"uiPriority": 930,
"value": "",
"variable": "REEMO_RDP_APPCMD",
"optional": true
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"intMax": null,
"intMin": null,
"intStep": null,
"volumeName": null,
"volumeTarget": null,
"volumeStorageClass": null,
"volumeAccessMode": null,
"volumeMode": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"editable": false,
"hint": null,
"name": "RemoteApp",
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 5,
"value": "remoteapp",
"variable": "REEMO_SESSION_TYPE",
"optional": false
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"intMax": null,
"intMin": null,
"intStep": null,
"volumeName": null,
"volumeTarget": null,
"volumeStorageClass": null,
"volumeAccessMode": null,
"volumeMode": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"editable": true,
"hint": "Target server IP address or fully qualified domain name",
"name": "IP",
"placeholder": null,
"type": "STRING",
"uiPriority": 970,
"value": "",
"variable": "REEMO_RDP_IP",
"optional": false
},
{
"conditionOp": "EQUAL",
"conditionVal": "remoteapp",
"conditionVar": "REEMO_SESSION_TYPE",
"defaultValue": null,
"intMax": null,
"intMin": null,
"intStep": null,
"volumeName": null,
"volumeTarget": null,
"volumeStorageClass": null,
"volumeAccessMode": null,
"volumeMode": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"editable": true,
"hint": "The RemoteApp alias or system path configured on the server",
"name": "Application Path",
"placeholder": null,
"type": "STRING",
"uiPriority": 940,
"value": "",
"variable": "REEMO_RDP_APP",
"optional": false
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"intMax": null,
"intMin": null,
"intStep": null,
"volumeName": null,
"volumeTarget": null,
"volumeStorageClass": null,
"volumeAccessMode": null,
"volumeMode": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"editable": false,
"hint": null,
"name": "Password",
"placeholder": null,
"type": "SELECT_OPTION",
"uiPriority": 5,
"value": "password",
"variable": "REEMO_AUTH_METHOD",
"optional": false
},
{
"conditionOp": null,
"conditionVal": "",
"conditionVar": "",
"defaultValue": null,
"intMax": null,
"intMin": null,
"intStep": null,
"volumeName": null,
"volumeTarget": null,
"volumeStorageClass": null,
"volumeAccessMode": null,
"volumeMode": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"editable": true,
"hint": "Select the authentication method",
"name": "Authentification",
"placeholder": null,
"type": "SELECT",
"uiPriority": 1000,
"value": "",
"variable": "REEMO_AUTH_METHOD",
"optional": false
},
{
"conditionOp": "EQUAL",
"conditionVal": "password",
"conditionVar": "REEMO_AUTH_METHOD",
"defaultValue": null,
"intMax": null,
"intMin": null,
"intStep": null,
"volumeName": null,
"volumeTarget": null,
"volumeStorageClass": null,
"volumeAccessMode": null,
"volumeMode": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"editable": true,
"hint": "User account name",
"name": "Username",
"placeholder": null,
"type": "STRING",
"uiPriority": 990,
"value": "",
"variable": "REEMO_RDP_USERNAME",
"optional": true
},
{
"conditionOp": "EQUAL",
"conditionVal": "password",
"conditionVar": "REEMO_AUTH_METHOD",
"defaultValue": null,
"intMax": null,
"intMin": null,
"intStep": null,
"volumeName": null,
"volumeTarget": null,
"volumeStorageClass": null,
"volumeAccessMode": null,
"volumeMode": null,
"volumeRequestSize": null,
"volumeRequestSizeOverhead": null,
"editable": true,
"hint": "User account password",
"name": "Password",
"placeholder": null,
"type": "BASE64",
"uiPriority": 980,
"value": "",
"variable": "REEMO_RDP_PASSWORD",
"optional": true
}
],
"links": [],
"usePushNotifications": false,
"assignableToProvider": true,
"os": null,
"vmStartMode": null,
"vmCreationMode": null,
"vmCreationDate": null,
"vmPersistentDisk": null,
"official": false
}
Configuration et déploiement¶
Le bastion se déploie via un template Reemo importé dans le portail. Le formulaire généré expose les paramètres ci-dessous.
Informations de l’image¶
Image :
registry.reemo.io/reemosbrdp:latest
Service interne : RDP Bastion (Rust)
Définir la cible RDP¶
Champ |
Description |
|---|---|
Target Host IP |
Adresse de la machine Windows distante (FQDN accepté). Obligatoire. |
Target Port |
Port RDP cible. Défaut : |
Domain |
Domaine NetBIOS / Active Directory. Optionnel. |
Session Type |
|
Kiosk Program |
Chemin Windows absolu du programme à lancer en mode kiosque (ex. |
Kiosk Args |
Arguments de ligne de commande transmis au programme kiosque. Optionnel. |
Mode RemoteApp (Kiosk Mode) — prérequis côté cible¶
Le mode kiosque demande au serveur Windows d’exécuter un programme spécifique à la place du bureau standard. Ce mécanisme est réservé à Windows Server avec le rôle RDS Session Host installé.
Windows Server (2016, 2019, 2022, 2025) — pas Workstation (voir limitation ci-dessous).
Rôle RDS Session Host installé, via une commande PowerShell admin :
Install-WindowsFeature -Name RDS-RD-Server -IncludeManagementTools -Restart
Un redémarrage est inclus (~3 min). Vérification post-reboot :
Get-WindowsFeature -Name RDS-RD-Server | Select Name, InstallState # attendu : InstallState = Installed
L’utilisateur cible présent dans le groupe Remote Desktop Users ou Administrators.
Aucune GPO « Start a program on connection » active (Computer Configuration > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Remote Session Environment) — une telle GPO prend la priorité sur le programme demandé.
Aucune session existante pour l’utilisateur cible au moment de la connexion : RDP réutilise la session ouverte, et le programme kiosque n’est consulté qu’à l’ouverture d’une nouvelle session. Si le compte est auto-logué, utilisez
query sessionpuislogoff <id>pour le déconnecter d’abord, ou utilisez un compte dédié non auto-logué.
Warning
Limitation Windows Workstation : sur Windows 10/11, le comportement est variable et non garanti — selon l’image, les GPO actives et l’état du registre, Windows peut ignorer le programme demandé et démarrer l’Explorateur à la place. Pour une session kiosque en production, utilisez Windows Server avec RDS.
Choisir la méthode d’authentification¶
Le sélecteur Auth Method pilote le mécanisme utilisé par le bastion pour s’authentifier sur la cible RDP.
Option |
Comportement |
|---|---|
Vault (défaut recommandé) |
Le bastion résout les credentials au démarrage via une connexion sécurisée au portail Reemo. Rien n’est stocké sur disque. |
Password |
Authentification par nom d’utilisateur et mot de passe statiques, saisis dans le formulaire. |
Interactive (JIT) |
Aucun secret dans le formulaire. Au lancement, le bastion affiche un formulaire de saisie à l’écran ; l’utilisateur entre ses identifiants depuis le navigateur. |
Note
Mode interactif — détails :
Tabbascule entre les champs Username et Password,Backspaceefface,Entréevalide (les deux champs doivent être remplis),Échapannule.Pour un compte de domaine Active Directory, saisir
DOMAINE\utilisateurdans le champ Username.En cas d’échec de connexion (mauvais identifiants), le formulaire réapparaît automatiquement après environ 1 seconde.
Les frappes saisies dans ce formulaire ne sont pas journalisées (confidentialité des identifiants).
Le mode interactif conserve l’authentification NLA/CredSSP — compatible avec les cibles « Require NLA ».
Guide d’utilisation¶
Vous êtes dans une session Reemo, face à un bureau Windows. Vous le pilotez à la souris et au clavier comme un poste local : les événements partent du navigateur vers le bastion, sont rejoués sur la cible Windows, et le rendu vous revient en streaming.
Se connecter¶
Quand votre session s’ouvre, le bastion établit automatiquement la connexion vers la cible Windows.
Mode interactif : si votre administrateur a configuré la méthode interactive, un formulaire de saisie apparaît à l’écran avant la connexion. Entrez votre nom d’utilisateur et votre mot de passe, puis appuyez sur Entrée.
Si la connexion échoue (mauvais identifiants, cible injoignable), fermez l’onglet et corrigez la configuration côté portail Reemo.
Résolution et redimensionnement¶
L’image affichée dans le navigateur est rendue à la résolution initiale définie par l’administrateur (par défaut 1920×1080). Quand vous redimensionnez l’onglet, le bureau Windows est automatiquement redimensionné pour correspondre — si le canal Allow display resize est activé. Sinon, l’image est étirée côté navigateur.
Clavier et souris¶
Clavier : layout configurable dans le formulaire (défaut :
fr). Toutes les touches sont transmises fidèlement à la cible Windows, y compris les touches étendues (PrintScreen,Pause, etc.).Souris : boutons gauche, droit, molette verticale et boutons latéraux supportés.
Journalisation : si la journalisation des frappes est activée par l’administrateur, chaque caractère tapé est enregistré côté bastion.
Transférer des fichiers¶
Le drive \\tsclient\Reemo est le pivot du transfert de fichiers entre votre poste local et la session Windows distante. Cette section détaille la configuration côté administrateur, puis l’usage complet côté utilisateur final.
Activer le transfert (administrateur)¶
Dans le formulaire Reemo, cochez Allow file transfer et redémarrez le conteneur. Au démarrage suivant :
Le drive
\\tsclient\Reemoest automatiquement exposé dans la session Windows.Le bouton Transfer devient disponible dans la barre de contrôle du navigateur Reemo.
Le bouton Transfer du navigateur et le drive Windows partagent le même dossier — ils sont toujours synchronisés.
Utiliser le transfert depuis Windows (session RDP)¶
Dès l’ouverture de la session, l’Explorateur Windows monte automatiquement un lecteur réseau baptisé Reemo, accessible via \\tsclient\Reemo. Vous le retrouvez à plusieurs endroits :
Dans l’arborescence « Ce PC », sous Périphériques et lecteurs réseau (une lettre de lecteur libre est attribuée automatiquement, généralement
Z:).Dans la barre d’adresse de l’Explorateur ou dans Exécuter… (
Win+R).Dans les boîtes de dialogue Ouvrir… / Enregistrer sous… de toutes les applications Windows.
Résumé — qui voit quoi ?¶
Action |
Dépose côté |
Apparaît côté |
Persiste après la session ? |
|---|---|---|---|
Upload dans le panneau Reemo (navigateur) |
Navigateur opérateur |
|
Non |
Glisser-déposer dans |
Session RDP Windows |
Panneau Transfer (navigateur) |
Non |
Copie vers |
Disque dur Windows distant |
— |
Oui (persisté côté Windows) |
Téléchargement depuis le panneau Reemo |
Poste local opérateur |
— |
Oui (persisté côté poste local) |
Le dossier de transfert côté bastion n’est qu’un pivot : il n’a pas vocation à conserver des fichiers entre sessions. À la fin de la session, copiez ce qui doit être conservé vers Windows (C:\…) ou téléchargez-le via le navigateur.
Sécurité du transfert¶
Périmètre minimal : seul le dossier de transfert est exposé. Le reste du système de fichiers du conteneur reste inaccessible depuis Windows.
Protection path-traversal : toute tentative d’accès en dehors du dossier de transfert est bloquée avec un refus d’accès.
Audit complet : chaque opération de fichier (création, lecture, écriture, suppression) est journalisée avec la direction, le chemin et la taille en octets.
Changelog - RDP Bastion Image¶
v1.0.0 (2026-07-08)¶
First public release of the RDP Bastion Reemo image: a hardened Remote Desktop gateway that opens an RDP session to a target Windows machine on the user’s behalf and delivers it through a Reemo browser session.
Added¶
Remote Desktop in the browser. Reach a Windows server, workstation or published application through a Reemo browser session. The bastion opens the RDP connection on the user’s behalf — nothing to install, no credentials handed to the user, and no RDP port exposed to the network.
Published application or full desktop. A session can launch a single published Windows application (RemoteApp) instead of the entire desktop, for tightly scoped access to just the tool an operator needs.
Secure file transfer. When enabled, a network drive named Reemo appears automatically in Windows Explorer. Files dropped into it — or into the browser’s transfer panel — move between the remote desktop and the browser in real time, with no client, no SCP and no manual mount. Only a single dedicated folder is exposed.
Bidirectional text clipboard. Optional copy and paste between the local device and the remote desktop, disabled by default and enabled per deployment.
Dynamic resolution. The remote desktop resizes to match the browser window as it changes, so the Windows session always fills the available space.
Centralized credential management. Optional integration with the Reemo credential portal: target credentials are resolved at session start over a mutually authenticated channel and kept in memory only — never written to disk. A direct password mode is also available.
Network Level Authentication. Connections use NLA (CredSSP) by default, matching the security posture expected by modern Windows servers.
Unified audit logging across all subsystems, with per-line Reemo user attribution. Connections, disconnections, keystrokes, clipboard activity, file transfers and denied access are all recorded, making it straightforward to correlate events with a specific session.
Versions - RDP Bastion Image¶
Images published on registry.reemo.io/reemosbrdp.
Each build exposes these pullable tags:
Latest (
:latest) – the latest published releaseRelease (
:vX.Y.Z) – always tracks the latest build of this versionBuild (
:vX.Y.Z-N) – a specific, frozen weekly buildImage (
:<id>) – immutable reference to this exact build
Example: docker pull registry.reemo.io/reemosbrdp:vX.Y.Z-N
v1.0.0-2 (2026-07-08)
v1.0.0-1 (2026-07-08)