Introduction
Je vous propose ici d’utiliser conjointement les deux outils que sont FreeRPD et xrdp à des fins de reverse proxy RDP.
De même que pour les reverse proxy web, l’idée ici est de proposer l’accès à une ou des sessions RDP à vos utilisateurs sans pour autant exposer le ou les serveurs RDP eux-même.
En plus des avantages en terme de sécurité induits par le concept de reverse proxy, la solution présentée ici propose quelques possibilités intéressantes comme le blocage de certains canaux RDP (audio, presse-papier, disque déporté, etc…).
L’implémentation ressemblerai à ceci :
- Le client ouvre une session sur le reverse proxy RDP.
- Le reverse proxy RDP ouvre une session sur le serveur ciblé et la présente au client.
Installation
Je traite ici de l’installation par la compilation depuis les sources plutôt que par un gestionnaire de paquets, simplement parce qu’étant orienté Debian les paquets à ma disposition dans Squeezee sont trop vieux pour supporter la dernière version du protocole RDP. Mais vous allez voir que pour une fois c’est facile ;-)
FreeRDP 1.0.1
Commençons d’abord par télécharger les sources : ici ou directement sur github
Installons ensuite les paquets nécessaires :
aptitude install unzip build-essential git-core cmake libssl-dev libx11-dev libxext-dev libxinerama-dev libxcursor-dev libxdamage-dev libxv-dev libxkbfile-dev libasound2-dev libcups2-dev libxml2 libxml2-dev libavutil-dev libavcodec-dev autoconf libtool pkg-config libpam0g-dev libpulse-dev libcunit1-dev libdirectfb-dev xmlto doxygen libxtst-dev libpcsclite-dev libxrandr-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libdirectfb-dev libneon27-dev
Une fois l’archive décompressée, placez vous dans le répertoire crée puis lancez les commandes suivantes :
cd /usr/local/src
wget http://www.lassipourlesnuls.fr/wp-content/uploads/2012/09/FreeRDP-FreeRDP-1.0.1-923-gbf02b5b.zip
unzip FreeRDP-FreeRDP-1.0.1-923-gbf02b5b.zip
cd FreeRDP-FreeRDP-bf02b5b
cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_DEBUG_CERTIFICATE=ON -DWITH_DEBUG_CHANNELS=ON WITH_DEBUG_CLIPRDR=ON -DWITH_DEBUG_DVC=ON -DWITH_DEBUG_GDI=ON -DWITH_DEBUG_KBD=ON -DWITH_DEBUG_LICENSE=ON -DWITH_DEBUG_NEGO=ON -DWITH_DEBUG_NLA=ON -DWITH_DEBUG_NTLM=ON -DWITH_DEBUG_ORDERS=ON -DWITH_DEBUG_RAIL=ON -DWITH_DEBUG_RDP=ON -DWITH_DEBUG_REDIR=ON -DWITH_DEBUG_RFX=ON -DWITH_DEBUG_SCARD=ON -DWITH_DEBUG_SVC=ON -DWITH_DEBUG_TRANSPORT=ON -DWITH_DEBUG_TSG=ON -DWITH_DEBUG_WND=ON -DWITH_DEBUG_X11=ON -DWITH_DEBUG_X11_CLIPRDR=ON -DWITH_DEBUG_X11_LOCAL_MOVESIZE=ON -DWITH_DEBUG_XV=ON -DWITH_FFMPEG=ON -DWITH_JPEG=ON -DWITH_MANPAGES=ON -DWITH_PCSC=ON -DWITH_PROFILER=ON -DWITH_PULSEAUDIO=ON -DWITH_SERVER=ON -DWITH_SSE2=ON -DWITH_SSE2_TARGET=ON -DWITH_THIRD_PARTY=ON -DWITH_ALSA=ON -DWITH_XTEST=ON .
make
make install
echo « /usr/local/lib/freerdp » > /etc/ld.so.conf.d/freerdp.conf
ldconfig
Voilà, c’est fini pour FreeRDP !!!
pam_userpass 1.0.2
Nous aurons besoin de ce module PAM pour une partie de l’authentification.
Téléchargez le ici ou directement sur openwall.
Décompressez l’archive, entrez dans le répertoire puis :
cd /usr/local/src
wget http://www.lassipourlesnuls.fr/wp-content/uploads/2012/09/pam_userpass-1.0.2.tar.gz
tar -xzf pam_userpass-1.0.2.tar.gz
cd pam_userpass-1.0.2
make
make install
xrdp 0.6.0
Une nouvelle fois, commençons par télécharger les sources : ici ou directement sur github
Une fois l’archive décompressée, placez vous dans le répertoire crée puis lancez les commandes suivantes :
cd /usr/local/src
wget http://www.lassipourlesnuls.fr/wp-content/uploads/2012/09/FreeRDP-xrdp-fa3088a.zip
unzip FreeRDP-xrdp-fa3088a.zip
cd FreeRDP-xrdp-fa3088a
./bootstrap
./configure –enable-freerdp1 –enable-jpeg –enable-simplesound –enable-pamuserpass
make
make install
Voilà c’est fini pour xrdp !!!
Configuration
Les fichiers de configuration sont regroupé dans /etc/xrdp, mais ce coup-ci parce qu’on a vraiment beaucoup de chance il n’y a rien changé, la conf par défaut convient à l’utilisation que nous souhaitons en faire.
Lacez votre client RDP et connectez vous sur l’addresse de votre reverse proxy RDP, vous verrez ceci :
Entrez l’IP de votre serveur RDP cible, vos login/password sur ce dernier et une fois validé vous devriez avoir une session dessus :-)
Conclusion
Cette solution vous permet donc de proposer des accès RDP sans exposer l’hôte, de contrôler certaines capacités du protocole RDP, et encore d’autre fonctionnalités que je mettrai bientôt en ligne…
Voici une petite vidéo de ce que vous dervriez avoir :
Download Video: WebM
3 comments
igor
28 novembre 2013 à 03:17 (UTC 1)
Ben moi j’ai une erreur
CMake Error :
The path to the source directory:
/usr/src/FreeRDP-FreeRDP-75b919a/DWITH_DEBUG_CLIPRDR=ON
contains unsupported character ‘=’.
Please use a different source directory name.
Ben, je fais quoi là svp? Merci.
Toni
23 août 2013 à 09:15 (UTC 1)
Bonjour,
Merci pour ce tuto.
J’ai suivi à la lettre les instructions et tout semble bien installé.
Cependant, en lançant le bureau à distance sur le serveur FreeRDP, il n’arrive pas à se connecter.
En regardant le fichier freerdp.conf, le chemin enregistré grâce à la commande echo n’existe pas. Il n’y a pas de répertoire freerdp dans /usr/local/lib
Le fait que cela ne fonctionne pas peut-il venir de là?
Merci.
CaSa
20 juin 2013 à 10:40 (UTC 1)
erreur de syntaxe dans le make, remplacer
WITH_DEBUG_CLIPRDR=ON
par
-DWITH_DEBUG_CLIPRDR=ON
;-)