Guide complet du tunneling SSH inversé sous Linux

Tunneling SSH inversé, du début à la fin

Alors que l’accès aux machines devient de plus en plus essentiel dans les entreprises, en particulier avec l’essor des applications cloud, les utilisateurs se sont habitués à disposer d’un accès à distance complet ou limité, ce qui rend l’accès aux machines à distance absolument nécessaire.

La survenue de la pandémie de Covid-19 a mis en évidence la nécessité de l’accès à distance, car les entreprises ont dû décentraliser leurs activités et s’adapter à des environnements de travail à distance. Pour cette raison, aussi bien les entreprises que les particuliers ont exploité diverses techniques de localisation qui sont à leur disposition.

Cet article fournit un guide étape par étape pour configurer et utiliser le tunneling SSH inversé dans les environnements basés sur Linux. Plus précisément, l’article présente le concept de tunneling SSH, qui inclut sa définition, son utilisation et ses inconvénients avant de passer au tunneling SSH inversé.

Tunneling SSH

SSH est le protocole réseau cryptographique qui fonctionne sur le port 22 et vous permet de vous connecter au shell d’une machine distante. D’autre part, le tunneling SSH/la redirection de port est un mécanisme qui crée une connexion SSH sécurisée entre un ordinateur local et un ordinateur distant. En raison de sa nature chiffrée, vous pouvez utiliser le tunneling SSH pour transmettre des messages utilisant des protocoles non chiffrés tels que IMAP, VNC ou IRC.

Il existe trois types de redirection de port :

  1. Redirection de port locale

Cette connexion vous permet d’accéder à un autre serveur depuis votre ordinateur local. Cependant, vous devez connaître deux numéros de port et votre serveur de destination. Par exemple, si vous souhaitez un accès à distance à www.HackerOne.com, votre tunnel SSH serait :

ssh -L 8080:www.HackerOne.com:80 <host>

Où vous remplacez <host> par le nom de votre ordinateur portable et l’option -L spécifie la redirection de port locale. Vous pouvez utiliser n’importe quel numéro de port source (voir la liste des numéros de ports TCP et UDP sur Wikipédia). Malgré cela, les numéros de port inférieurs à 1 024 ou supérieurs à 49 151 sont réservés au système et ne peuvent fonctionner qu’avec des ports source spécifiques.

  1. Redirection de port distante

Contrairement à la redirection de port locale, la redirection de port distante vous permet de vous connecter depuis un serveur SSH distant à un service réseau distant situé côté client du tunnel. Pour ce faire, tapez la commande suivante dans votre terminal :

SSH -R 5900:localhost:5900 guest@janes-pc

L’option -R détermine la redirection de port distante, permettant à Jane d’accéder à votre ordinateur portable (localhost) en connectant un client VNC au port 5 900.

La redirection distante est utile lorsqu’une personne extérieure à une organisation doit accéder à un serveur web interne, ou lorsqu’il est nécessaire de rendre une application web interne accessible sur l’Internet public.

  1. Redirection de port dynamique

Ce tunneling SSH fait d’un client un serveur proxy SOCKS. Par conséquent, tous les programmes du serveur proxy nécessitent une configuration et une reconfiguration lorsque vous avez terminé.

Comme indiqué ci-dessous, utilisez l’option -D pour spécifier une redirection de port dynamique.

SSH -C -D 1080 laptop.

Vous pouvez également utiliser n’importe quel numéro pour la connexion. Cependant, le port SOCKS standard est 1 080, et certains programmes peuvent ne pas fonctionner si d’autres ports sont utilisés.

Risques liés au tunneling SSH

Le protocole SSH est vulnérable à divers logiciels malveillants servant à masquer les violations de données et les canaux des sources d’attaque. Des clés SSH obtenues de manière malveillante ont également été utilisées pour des attaques réseau. Par exemple, associé à des clés SSH non gérées, le tunneling SSH permet aux auteurs d’attaques d’utiliser des clés SSH volées pour un réseau privé depuis des canaux publics.

Selon SSH Academy, ces attaques peuvent servir de cachettes pour la source de l’attaque lorsque les pirates informatiques redirigent des attaques depuis des systèmes et des appareils. À leur tour, les auteurs d’attaques peuvent rechercher et exploiter des vulnérabilités sans être détectés.

Parmi les activités malveillantes fréquemment exécutées figurent le test de divers identifiants de connexion et l’exécution d’outils d’attaque contre les protocoles e-mail et web. Il est donc essentiel que les techniques de tunneling offrent à la fois un accès et un contrôle sécurisés à distance ainsi que la sécurité sur le réseau accédé.

Tunnel SSH inversé

Un pare-feu sur un routeur empêche toutes les requêtes de connexion ou de transfert ne correspondant à aucune requête sortante d’atteindre une machine distante. Par conséquent, les seules connexions autorisées sont celles demandées par la machine distante, ce qui crée un problème : le pare-feu rejette les connexions SSH initialisées par un client et annule votre accès à la machine distante lorsqu’elle se trouve derrière une NAT.

Le SSH inversé résout ce problème en simulant un SSH vers le serveur distant. Dans ce cas, la machine distante écoute sur le port réseau de l’ordinateur local. Elle relaie vers ce port les demandes de connexion SSH, ce qui établit une nouvelle connexion entre les ordinateurs local et distant. En d’autres termes, vous utilisez un tunnel dans un tunnel pour connecter un serveur, une machine distante et votre machine (voir Schéma 1).

 

Pour créer un tunnel SSH inversé, la machine en question doit d’abord ouvrir une connexion SSH au-delà du pare-feu, puis inclure un tunnel -R au niveau du port de connexion de la machine distante. Sur la page man, la description -R de SSH est : -R [bind_address:]port:host:hostport.

Ceci spécifie que le port donné sur l’hôte (serveur) distant doit être redirigé vers l’hôte et le port donnés côté local. Cela fonctionne en allouant un socket pour écouter le port côté distant. Chaque fois qu’une connexion est établie vers ce port, la liaison s’effectue via le canal sécurisé, et une connexion est transmise au port hôte depuis la machine locale.

Guide pas à pas pour créer un tunnel SSH inversé sous Linux

Avant d’établir une connexion, assurez-vous d’avoir déjà installé SSH sur votre machine Linux/Ubuntu. Si ce n’est pas le cas, effectuez les étapes suivantes pour activer SSH :

  • Exécutez la commande suivante dans le terminal pour installer le package OpenSSH-server :

$ sudo apt install OpenSSH-server

Saisissez le mot de passe lorsqu’il vous est demandé et Y pour continuer l’installation.

  • Le service SSH démarrera automatiquement une fois l’installation terminée. Cependant, vous devez vérifier que l’installation a réussi et que le service est effectivement en cours d’exécution. Pour ce faire, exécutez

$ sudo systemctl status SSH

Cela affichera Active: active (running) si l’installation a réussi et que le service est en cours d’exécution. Appuyez sur q pour revenir à l’invite de commande.

  • Si vous utilisez une machine Ubuntu, assurez-vous d’ouvrir le port SSH à l’aide de la commande suivante

$ sudo UWF allow SSH.

Les systèmes basés sur Linux et macOS disposent de clients SSH préinstallés. Toutefois, si vous souhaitez vous connecter depuis une machine Windows, utilisez le client SSH de l’environnement, par exemple PuTTY.

Si l’ordinateur local n’a jamais accepté de connexions SSH auparavant, démarrez le démon SSH (sshd) en exécutant la commande suivante dans le terminal

$ sudo systemctl start sshd

Pour que le démon démarre à chaque démarrage de votre ordinateur, exécutez la commande suivante

$ sudo systemctl enable sshd

Comment cela fonctionne ?

  1. Se connecter à un serveur distant

Pour vous connecter à un serveur distant, utilisez la commande ssh

$ ssh [your-account-login]@[server-ip]

  1. Créer un tunnel SSH inversé

Après avoir établi la connexion, une personne, par exemple un administrateur système, côté serveur distant, doit exécuter la commande suivante sur sa machine :

ssh -fN -R 7010:localhost:23 username@yourMachine-ipaddress.

Cette demande de connexion garantira que les demandes de connexion SSH pour le port 7 010 de votre machine sont redirigées vers le port 23 du serveur distant.

  1. Faites une demande de connexion SSH depuis votre machine vers votre machine

À cette étape, vous établirez une connexion sur le port 7000.

ssh username@localhost -p 7000

Votre requête parviendra ensuite à l’hôte distant. Par conséquent, utilisez le nom d’utilisateur et le mot de passe de votre compte sur le serveur distant lorsque ces informations vous sont demandées.

Vous pouvez également configurer des clés SSH pour sécuriser la connexion depuis l’ordinateur distant vers l’ordinateur local. Sur l’ordinateur distant, saisissez la commande suivante :

$ ssh-keygen

qui vous demandera une phrase de passe.

Il est conseillé d’utiliser quatre mots séparés par des symboles pour créer une phrase de passe robuste et de vous assurer que seules les personnes disposant de cette phrase peuvent établir une connexion SSH à votre ordinateur sans qu’un mot de passe ne leur soit demandé. De plus, vous devez transférer la clé générée vers l’ordinateur local à l’aide de la commande ssh-copy-id username@localhost.

Conclusion

La traduction d’adresses réseau (NAT) masque les adresses IP légitimes en faisant appel à des réseaux IP secrets indétectables qui reposent sur des adresses IP non enregistrées disponibles sur Internet. Ainsi, la NAT, qui combine deux réseaux, est située sur un routeur et peut être configurée pour n’annoncer qu’une seule adresse pour l’ensemble du réseau au niveau mondial.

Le tunneling SSH inversé vous permet d’accéder à des machines distantes derrière une NAT. Par exemple, vous pouvez accéder à votre bureau depuis votre domicile. Par conséquent, le tunneling SSH inversé est une technique qui vous permet de vous connecter en SSH à votre système Linux qui ne dispose pas d’une adresse IP publique.

Connectez-vous dès aujourd’hui à JFrog Connect et accédez facilement à tous vos appareils distants en quelques secondes, avec une connexion sûre et sécurisée.

 

Tous les systèmes d’exploitation basés sur Linux sont pris en charge, ainsi que tous les SBC disponibles, tels que : Raspberry Pi, Beaglebone, Jetson Nano et bien d’autres.

Cliquez ici pour en savoir plus sur JFrog Connect et inscrivez-vous pour une démo dès aujourd’hui !