Vous prendrez bien un peu de ssh avec votre tunnel ?
By Geoffrey on Friday 20 October 2006, 20:06 - Geekeries - Permalink
Tags :
Il arrive des fois où on aimerait pouvoir relier directment deux machines appartenant a deux réseaux distincts. C'est par exemple mon cas quand j'ai besoin (envie on va dire) d'accéder à ma machine du boulot depuis une machine non connectée au VPN. Dans ce genre de cas, il existe en général une machine qui possède des interfaces susceptibles d'accéder à chacune des machines (le concentrateur VPN par exemple). Nous appellerons cette machine relay, car elle servira de relai au tunnel. Pour éviter les sempiternelles appellations A et B qui embrouillent plus qu'autre chose, les machines s'appelleront startpoint pour la machine sur laquelle on a la main et endpoint pour la machine à laquelle on souhaite accéder.
Postulats de base:
relaypossède un serveur SSH qui tournestartpointpossède un client SSH capable de créer un tunnel (ssh, par exemple)relayest accessible depuisstartpointet peut se connecter àendpoint
Bien, allons y franchement, la commande, à executer depuis startpoint, permettant de créer un tunnel SSH entre startpoint et endpoint est la suivante:
ssh -L 2222:endpoint:22 relay
Qu'avons nous fait là ? L'option -L de SSH sert à binder un port de la machine locale (startpoint donc), à un autre port (ou le même) de la machine distante (endpoint). Ici, on associe le port local 2222 (22 étant déjà pris par mon serveur SSH, mais on pourrait utiliser le port 22 si aucun serveur ne tournait, à la différence près qu'il faudrait lancer la commande en root pour pouvoir binder un port inférieur à 1024 (c'est comme ça)) au port 22 de endpoint, c'est à dire le serveur SSH. Il nous est dès lors possible d'ouvrir une connection SSH sur endpoint en se connectant au port 2222 de notre machine locale:
ssh -p 2222 localhost
Magique non ? Bien sur, il est possible de forwarder n'importe quel port au travers du tunnel:
ssh -L 8080:endpoint:80 relay
Faire pointer votre navigateur sur http://localhost:8080/ vous ammenera sur le serveur web de endpoint.
Mais un tunnel ne se limite pas à joindre deux machines d'un réseau différents. On peut également imaginer un tunnel entre deux machines dans l'unique but de sécuriser une transmission, par exemple, des échanges de mails. Imaginons que votre serveur mail preferré, pop.example.com, ne propose pas de connection POP sécurisée. Vous pouvez remédier à ce manque flagrant de confidentialité en créant un tunnel SSH:
ssh -L 1100:localhost:110 pop.example.com
Bien sur, ce cas de figure nécessite d'avoir un compte permettant une connexion SSH sur pop.example.com, ce qui n'est pas forcément le cas. Pour remédier a ceci, deux solutions: utiliser un relay qui possède un serveur SSH, ou installer un serveur SSH sur startpoint pour s'en servir comme relai (sudo apt-get install openssh-server sur toute distribution debian-like qui se respecte):
ssh -L 1100:pop.example.com:110 localhost
And voila, il n'y a plus qu'a indiquer à notre client mail que le pop se situe sur localhost au port 1100, et le tour est joué :-)
2 comments
Encore mieux, avec SOCKS:
http://www.debian-administration.or...
Une remarque: a la fin du post, la solution dans laquelle on se sert de localhost comme relay ne sert à rien en pratique car le tunnel ssh va "de" et "vers" localhost et donc s'arrete à localhost, qui ensuite ouvre une connexion avec le serveur pop (en clair). Sinon c un beau post, il est bookmarké et je m'en sers souvent car on oublie vite les options obscures de cette commande on ne peut plus utile.
This post's comments feed