CentOS - Système - Créer un tunnel ssh depuis une CentOS ou toute autre Linux
Par manuardo le lundi 15 avril 2013, 06:10 - Linux
Une liaison SSH permet de transporter sur votre pc le port d'une machine distante, quelle soit sous Windows, Mac ou Linux, sans que ce port soit accessible depuis l'extérieur.
Pas toujours facile à appréhender, le tunnel SSH est pourtant pratique, secure et rapide.
Voyons s'il est possible de simplifier la compréhension de cette option SSH...
Un tunnel, c'est un moyen pour joindre deux points en traversant en toute sécurité des milieux parfois incertains et hostiles..
Principe et pré-requis
Ne voyez pas le tunnel SSH comme une liaison complète entre votre machine et un autre poste distant.
En fait, ce qui est transporté (relié), c'est le port d'un pc connu et un port "localhost", par l'intermédiaire d'une liaison SSH entre votre système (CentOS ou autre) et une machine du réseau distant ou se trouve le pc connu.
Prenons un exemple concret. Je suis sur une CentOS (parti pris inside, je sais..), baptisée "client SSH" sur le schéma ci-dessus et située dans un réseau privé à mon domicile.
L'objectif est d'ouvrir une session Windows à distance (type TSE, "serveur cible" sur le schéma), sur une machine située au bureau, dans un réseau privé d'entreprise, avec pour seule passerelle un serveur CentOS ("serveur SSH" sur l'image) qui a une patte SSH ouverte sur l'extérieur (ip publique + port 2222).
Pour ce faire, il nous faut :
- L'ip externe (ou l'adresse résolue) du site distant : on va prendre 89.89.10.10 pour l'exemple
- Le port SSH (22 par défaut) transféré et donc accessible depuis l'extérieur : 2222 dans notre cas
- L'ip locale (sur son réseau privé d'entreprise) de la machine distante (serveur cible) : mettons 192.168.100.10
- Le port de l'application de la machine distante que l'on souhaite utiliser : le TSE Windows utilise par défaut le port 3389
- Un compte utilisateur SSH sur la passerelle CentOS : on va utiliser le compte "pierre", créé avec des droits limités
- Un port local non utilisé : le 3340 est disponible sur ma machine
Ce que l'on va obtenir concrètement :
- Le port 3389 du serveur cible va être relié au port 3340 de la carte "lo" (localhost) de ma machine
- Notez que localhost n'est pas le nom de mon pc, quasi toutes les machines ont un localhost généralement en 127.0.0.1
- L'ip locale de mon pc "client SSH" n'a aucune importance.
- La translation restera active tant que la connexion SSH sera maintenue. Coupez SSH pour fermer le tunnel
Mise en pratique et création de la translation (tunnel)
- Tout d'abord, assurez vous de pouvoir joindre la passerelle depuis l'extérieur. D'une manière tout à fait traditionnelle. Avec les informations données ci-dessus, ça donne une connexion SSH (ci dessous pour l'utilisateur "pierre" et le port "2222") :
# ssh 89.89.10.10 -l pierre -p 2222
- Une fois ce test effectué, vous pouvez passer à l'étape suivante, c'est à dire au tunnel SSH. Voici la partie de ligne requise pour la translation :
# ssh -L port_localhost:ip_de_la_machine_cible:port_de_la_machine_cible
- Ce qui donne dans notre cas :
# ssh -L 3340:192.168.100.10:3389
- Ne nous reste qu'à fusionner nos deux lignes SSH (celle de la connexion et celle du tunnel) :
# ssh -L 3340:192.168.100.10:3389 89.89.10.10 -l pierre -p 2222
Paramétrage du Client bureau à distance
Comme décrit plus haut, la connexion transfère le port distant 3389 (machine cible) sur le port 3340 de notre client SSH (localhost). Fort logiquement, c'est cette information qu'il suffit d'indiquer au logiciel de bureau à distance :
Autre exemple avec un serveur web
Pour en terminer avec les exemples, supposons que la machine cible ne soit pas un serveur TSE Windows mais plutôt un serveur Web privé.
Par défaut, un serveur Web normal utilise le port 80. Nous allons donc transférer le port 80 de la machine cible vers un port disponible de notre poste CentOS, par exemple le 8080.
- La ligne de connexion complète devient :
# ssh -L 8080:192.168.100.10:80 89.89.10.10 -l pierre -p 2222
- Il vous suffit ensuite d'ouvrir votre navigateur Web sur l'adresse : http://localhost:8080
Vous pouvez commenter ou participer à l'amélioration de cet article via le topic dédié du forum.