Tunnel SSH & Remote port forwarding avec Serveo

Développement avr. 16, 2020

Je vous propose dans cet article de réaliser un tunnel permettant d'accéder en SSH à des machines situées dans un réseau privé derrière un pare-feu en passant simplement par un tiers de confiance.

Des tunnels SSH et du port forwarding

Créer un tunnel SSH pour accéder à une machine située derrière le pare-feu d'une entreprise depuis l'extérieur peut vite devenir compliquer dès lors que l'installation d'outils externes n'est pas autorisé ou que des ports exotiques sont bloqués.

A l'aide d'une commande SSH, nous allons créer un tunnel de l'ordinateur A vers le serveur. Une fois le tunnel établie, l'ordinateur B établie à son tour un tunnel vers le serveur. Vu qu'il s'agit de connexions sortantes classiques, elles ne seront pas bloquées par le pare-feu. Une fois les 2 tunnels établis, je peux, via une nouvelle commande SSH, me connecter à l'ordinateur B depuis l'ordinateur A.

Accès depuis l'extérieur via un double tunnel SSH via un serveur externe

C'est là que Serveo intervient...

Sereo est un outil qui permet d'exposer des serveurs locaux sur Internet. En utilisant l'utilitaire Serveo  en ligne de commande (CLI) et avec l'aide d'un serveur accessible depuis Internet, il est tout à fait possible de monter une passerelle d'accès sécurisée pour se connecter à distance en SSH. Serveo est un peu l'équivalent de NGRok pour les connaisseurs. A l'instar de ce dernier, Serveo ne nécessite pas l'installation d'un client sur l'hôte distant et ne passe pas par le serveur d'un tiers. Avec Serveo, une simple commande SSH suffit pour créer un tunnel. Seul prérequis : disposer d'un serveur accessible sur Internet pour  y démarrer le serveur Serveo.

Serveo en ligne de commande

Serveo s'installe facilement en téléchargeant le CLI via http://serveo.net/#self-host.

Une fois installé sur notre serveur our_server.com, il suffit de le démarrer :

sudo ./serveo-linux-amd64 -private_key_path=ssh_host_rsa_key -port=2222 -http_port=8080 -https_port=8443
Un serveur SSH est ainsi disponible sur le port 2222 sur our_server.com

Ensuite on créer le tunnel de B vers le serveur our_server.com:

ssh -R B:22:localhost:22 yohann@our_server.com -p 2222
Le port 22 de notre machine interne est exposé via du SSH Forwarding

On se connecte sur le serveur our_server.com sur le port 2222 et on crée un tunnel de type remote pour rediriger le port SSH 22 de la machine B sur le serveur. Le port 22 de la machine B est alors accessible sur le serveur our_server.com.

On peut donc se connecter à B depuis A via la commande :

ssh -o ProxyCommand="ssh -W B:22 -p 2222 our_server.com" root@B
On se connecte à distance via une simple commande SSH

Encore une fois, une seule commande SSH suffit pour se connecter à B via notre serveur our_server.com

En conclusion

La mise en place de ce type de tunnel nécessite une petite gymnastique mais permet de créer rapidement un tunnel pour accéder à une machine dans un réseau d'entreprise via une simple commande SSH.
A noter qu'il existe un équivalent open source nommé sish mais que je n'ai pas eu le temps de tester. Et vous ?

Téléchargements et informations :

Yohann Ciurlik

Solution Architect - Gadget & innovation addict - 3D Printing - Raspπ Arduino - Maker - Photographer - SlashGen - Father - PGP 52F3EEA0103DAC2F