Je continue l’exploitation des usages du petit routeur/pare-feu ZeroShell. Toutefois, cette distribution est utilisée à titre d’exemple et l’implémentation présentée dans le cadre de cet article n’est en en aucun cas limité à ce produit. Nous cherchons ici la possibilité de se connecter en RDP à 2 machines virtualisées, sous Windows, sur Internet, mais avec une seule adresse ip publique à disposition.
Le sujet de cet article m’a été demandé par Nicolas dans le cadre d’un projet personnel.
Dans le cadre des cet article, nous allons poser le contexte suivant :
- Le Hôte : Cette station de travail est raccordée à l’internet. Son IP publiques est 10.0.3.111. L’utilisateur souhaite pouvoir accéder en TSE à Server1 Server2.
- L’hébergeur : Il dispose d’un accès internet protégé par ZeroShell : Router. Derrière ce routeur, se trouvent deux serveurs : Server1 & Server2. Chacun de ces serveurs doit pouvoir être accédé en TSE sans contraintes depuis l’internet. Le routeur est administré depuis le réseau 10.0.0.0/24. Son IP dans ce réseau est 10.0.0.254. Le serveur Server1 a pour IP privée 10.0.0.100 et le serveur Server2 a pour IP privée 10.0.0.101. La passerelle de ce réseau est 10.0.2.254.
Comme je ne dispose pas de 2 sites physiques, de 3 serveurs et 1 routeur, j’ai monté une maquette construite sous Microsoft HyperV. Pour cela, j’ai créé un réseau privé simulant l’internet : 10.0.3.0/24. L’ IP « publique »de l’hébergeur est 10.0.3.101.
Vous trouverez ci-dessous le résumé graphique de cette configuration.
Paramétrage du routeur de l’hébergeur
Nous allons utiliser la technologie NAT (Network address translation) pour permettre à l’hôte d’accéder en TSE au serveur Server1 et Server2.
Activation du NAT sur la carte ETH01
Translation du port 3389 sur 10.0.3.101 vers le server1
Le protocole TSE utilise le port TCP 3389.
Translation du port 3390 sur 10.0.3.101 vers le server2
Le service TSE utilise bien évidemment toujours le port TCP 3389 sur server2. Toutefois, le port 3389 du 10.0.3.101 a déjà été assigné au port 3389 de server1. Nous allons donc assigner le port TCP 3390 de 10.0.3.101 au port TCP 3389 de server2.
Connexion depuis l’extérieur
Depuis l’hôte, connectons-nous à server1
Il est inutile de préciser le port 3389 comme dans l’illustration ci-dessus car ce port est utilisé par défaut.
Depuis l’hôte, connectons-nous à server2
Cette fois-ci ; nous devons préciser le port 3390.
Conclusion
Cette solution permet bien d’héberger deux serveurs distincts. Toutefois, si cette approche est assez simple à mettre en œuvre, elle est très légère en terme de sécurité :
- Les échanges entre l’internet et les serveurs ne sont pas cryptés (en tout cas pas en dehors du protocole TSE-RDP)
- N’importe quel utilisateur d’internet peut tenter de se connecter aux serveurs (et tenter de trouver les mots de passe en Brute Force)
La création d’un VPN sécurisé obligatoire entre l’hôte et l’hébergeur avant de lancer la connexion TSE limitera ces risques.
Une autre faille est que tous les serveurs hébergés sont dans le même réseau. Il est donc possible à un utilisateur connecté au server1 de tenter d’accéder au server2. Pour contourner ce problème, il faudrait cloisonner les réseaux coté hébergeur en raccordant server1 et server2 à 2 cartes réseaux différentes sur le routeur.
Enfin, cette configuration n’est facile à réaliser que parce que le nombre de ports à translater est très limité et que le client TSE permet de préciser les ports TCP à utiliser. Il serait par exemple impossible d’utiliser cette méthode pour ouvrir un partage Windows (CIFS/SMB) par exemple.