DamienArt - stock.adobe.com
Réseau : comment rediriger des ports avec le tunneling SSH
Le tunneling SSH crée des connexions chiffrées sécurisées à travers des réseaux privés et non fiables. Cela permet d’accéder à distance, de contourner des restrictions et de protéger les transferts de données sensibles.
Le protocole Secure Shell (SSH) définit un mécanisme permettant de se connecter en toute sécurité à un hôte distant. SSH a remplacé Telnet, l'application Internet d'origine permettant d'exécuter des sessions de connexion à distance.
Au fil des ans, SSH est devenu bien plus qu'un simple outil d'émulation de terminal, en grande partie grâce à sa capacité à acheminer en toute sécurité le trafic réseau à l'aide de ports et de systèmes hôtes définis par l'utilisateur. Ces connexions sont appelées tunnels, car elles fournissent une connexion grâce à laquelle les utilisateurs peuvent transmettre des données en toute sécurité sur un réseau non sécurisé. On parle de tunneling SSH
Un tunnel SSH est une connexion sécurisée entre un client SSH et un serveur SSH. La machine locale achemine le trafic réseau depuis un port arbitraire via la connexion SSH vers un port spécifié (généralement le port TCP 22) sur le système distant.
Le tunnel SSH achemine le trafic réseau via les ports d'application du localhost vers un système distant ou vice versa. Le tunneling SSH, également appelé redirection de port SSH, permet à deux systèmes d'échanger des données en toute sécurité à travers les pare-feu d'un intranet et d'Internet. Il s'agit également d'un élément essentiel de l'administration du cloud.
Le tunneling est utile à plusieurs fins, notamment les suivantes :
- Accéder à des services Web internes depuis l'extérieur d'un réseau restreint en acheminant le trafic HTTP ou HTTPS via un port SSH.
- Contourner les firewalls et les contrôles réseau pour accéder à des services bloqués par ces dispositifs. Soyez prudent lorsque vous effectuez cette opération ; ces restrictions ont leur raison d'être.
- Mettre en tunnel des protocoles non sécurisés, tels que VNC ou RDP via SSH.
- Sécuriser les données d'application non cryptées en transit sur des réseaux fiables ou non fiables.
- Monter de manière sécurisée des systèmes de fichiers réseau distants (NFS, SMB), en fournissant une connexion chiffrée pour les transferts de données.
Comment fonctionne SSH ?
Le cas d'utilisation le plus simple de SSH est la connexion à un hôte distant pour une session d'émulation de terminal. Dans ce cas, un utilisateur utilise un logiciel client SSH pour se connecter en toute sécurité à une autre machine exécutant un serveur SSH. Vous pouvez configurer SSH pour échanger des clés publiques entre le client et le serveur afin d'authentifier l'utilisateur et chiffrer les données envoyées via la connexion SSH.
Le logiciel client SSH est presque toujours disponible sur les ordinateurs modernes. OpenSSH est une implémentation SSH en ligne de commande Open source initialement développée pour le système d'exploitation OpenBSD, mais qui est désormais disponible sur presque tous les systèmes d'exploitation basés sur Unix, y compris Linux et macOS. Les versions 10 et plus récentes de Windows intègrent également OpenSSH dans la ligne de commande. PuTTY est une autre version Open source de SSH avec interface graphique et disponible pour Windows.
Pour démarrer une session SSH, vous devez disposer des éléments suivants :
- Le nom de domaine ou l'adresse IP de la machine distante à laquelle vous souhaitez accéder. Cet hôte distant doit disposer d'une instance du programme serveur SSH, sshd, en cours d'exécution.
- L'accès à un client SSH sur la machine locale. Lancez les connexions SSH en entrant la commande ssh. Bien que vous puissiez utiliser des versions GUI de SSH, telles que PuTTY pour Windows, il est utile d'apprendre à utiliser la version en ligne de commande pour presque tous les systèmes d'exploitation modernes.
- Les informations d'identification d'un utilisateur disposant des autorisations nécessaires pour accéder au serveur distant.
Par exemple, lancez une session de terminal sur un hôte distant appelé server.example.com avec l'ID utilisateur example-user à l'aide de la commande SSH suivante :
Cette commande ouvre une session de terminal sur le serveur distant en utilisant le port 22, le port SSH par défaut. Les serveurs SSH peuvent également répondre aux demandes de session sur d'autres ports. Par exemple, pour vous connecter à un serveur distant avec une attribution de port SSH personnalisée de 2222, tapez :
ssh -p 2222 [email protected]
L'option -p spécifie le numéro de port 2222 sur le serveur distant, ce qui oblige SSH à envoyer le trafic vers le port 2222 au lieu du port 22 par défaut. Cette approche ne fonctionne que si vous avez configuré le serveur distant pour qu'il écoute les requêtes sur ce port.
Vous pouvez utiliser SSH avec des noms de domaine ou des adresses IP. Si un hôte nommé server.example.com a l'adresse IP 192.0.2.127, la commande suivante a le même effet que l'exemple ci-dessus :
ssh -p 2222 [email protected]
Lorsqu'une connexion SSH est établie, le serveur et le client échangent des informations de clé publique et négocient une clé de session sécurisée pour chiffrer les échanges de données SSH. La première fois que vous vous connectez à un hôte SSH distant, SSH vous invite à authentifier la clé publique de l'hôte distant.
Dans l'exemple SSH standard, l'utilisateur example-user se connecte à une session de terminal avec l'hôte distant server.example.com en utilisant le port 22.
Les 3 principaux types de tunneling SSH
Les tunnels SSH connectent des flux de données entre des processus s'exécutant sur deux hôtes distincts. Il existe trois principaux types de tunneling SSH ; vous en sélectionnerez un en fonction de vos besoins spécifiques.
1/ Redirection de port local. La redirection de port local vous permet de vous connecter depuis votre client SSH local à un serveur SSH distant. Choisissez cette approche lorsque le serveur de destination n'est pas accessible depuis la machine locale (par exemple, en raison du filtrage du firewall), mais qu'il est accessible au serveur SSH. La redirection de port local permet de contourner un firewall depuis l'intérieur d'un réseau privé pour accéder à un système distant que le pare-feu bloquerait autrement.
2/ Redirection de port à distance. La redirection de port à distance, ou tunneling SSH inverse, permet de se connecter à un serveur SSH de destination à partir d'un autre serveur SSH à l'aide du logiciel client SSH. La redirection de port à distance est une méthode moins couramment utilisée pour accéder à un serveur interne à partir d'un réseau privé externe qui serait autrement inaccessible depuis Internet. Des pirates malveillants pourraient utiliser cette méthode pour exploiter des systèmes sur des réseaux privés.
3/ Redirection dynamique des ports. La redirection dynamique des ports achemine tout le trafic réseau entrant et sortant via SSH sur un port spécifié. Cela permet d'établir des connexions SSH entre deux hôtes quelconques, toutes les connexions étant redirigées par le client SSH via un serveur SSH. Il s'agit également d'un mécanisme permettant de configurer un serveur proxy SOCKS, qui transmet le trafic réseau à encapsuler dans un tunnel SSH lorsque vous configurez le logiciel client local pour qu'il transmette tout le trafic au port spécifié. Le transfert de port dynamique permet également de contourner le pare-feu réseau et d'accéder à n'importe quel serveur de destination à partir d'un réseau privé.
Préparation à la configuration d'un tunnel SSH
Ce tutoriel se concentre sur l'utilisation de l'implémentation OpenSSH du protocole SSH dans l'interface de ligne de commande (CLI).
Avant d'essayer d'ouvrir un tunnel SSH, procédez comme suit :
-
Vérifiez que SSH est installé et fonctionne sur la machine locale et sur le serveur SSH distant. Sur les systèmes Windows ou Unix, ouvrez une fenêtre PowerShell (Windows) ou une session shell (systèmes Unix) et entrez la commande ssh sans aucun paramètre. La commande renvoie un message d'aide indiquant l'utilisation correcte et les paramètres disponibles.
Vérifiez également que le serveur SSH sshd est en cours d'exécution sur la machine cible (destination). Si l'hôte ne dispose pas d'un démon SSH (programme serveur) en cours d'exécution et à l'écoute des demandes de connexion SSH, vous devez le démarrer avant de créer un tunnel. Pour vérifier cela, vous pouvez notamment établir une connexion SSH avec le serveur en question. Si la connexion est acceptée, vous pouvez supposer que sshd est en cours d'exécution.
C'est également le moment idéal pour vérifier que le compte utilisateur authentifié sur les serveurs SSH dispose des autorisations appropriées. Au minimum, le compte utilisateur doit être autorisé à émettre des commandes superutilisateur à l'aide de la commande sudo, mais avec des restrictions afin d'empêcher le détournement du compte et son utilisation à l'encontre de l’entreprise.
-
Obtenez ou vérifiez le nom d'hôte ou l'adresse IP du serveur distant. L'adresse IP du serveur est toujours suffisante, mais disposer du nom de domaine peut faciliter la saisie des commandes SSH.
Sur les systèmes Windows, vous pouvez déterminer l'adresse IP du système en ouvrant l'application Paramètres, en sélectionnant l'option Réseau et Internet, puis en affichant les propriétés de l'interface réseau actuellement connectée.
Les commandes permettant de découvrir l'adresse IP à l'aide de la ligne de commande sont disponibles pour tous les systèmes d'exploitation :
- Dans la ligne de commande Windows, affichez l'adresse IP du système en entrant la commande ipconfig. Elle affiche la configuration réseau, y compris l'adresse IP, pour toutes les interfaces réseau du système.
- Sur les systèmes Linux, affichez l'adresse IP en entrant la commande ip addr. Elle affiche la configuration réseau, y compris l'adresse IP, pour toutes les interfaces réseau du système.
-
Déterminez les numéros de port à utiliser pour la redirection avec le transfert de port SSH. Pour les ports connus, consultez le registre des noms de service et des numéros de port de protocole de transport de l'Internet Assigned Numbers Authority (IANA). Les ports enregistrés auprès de l'IANA les plus couramment utilisés sont les ports 80 (HTTP), 443 (HTTPS) et 22.
En général, vous pouvez sélectionner n'importe quel port non connu compris entre 1024 et 65535, mais le port 1080 est le port enregistré pour SOCKS. Vous devez l'utiliser lorsque vous configurez un tunnel de transfert de port dynamique pour un proxy SOCKS.
Par exemple, lors de la configuration d'un tunnel pour le transfert de port local depuis un serveur web sur le réseau interne vers un serveur externe, le port source et le port de destination peuvent tous deux être définis sur 80 pour les transmissions HTTP. Lors de la configuration d'un tunnel sur un serveur local qui fonctionne à la fois comme serveur SSH et serveur web, le port entrant peut être défini sur 8080 afin de différencier le trafic du tunnel du trafic web ordinaire.
-
Vérifiez le tunnel prévu avant sa mise en œuvre en vérifiant les points suivants :
- Les hôtes sont-ils accessibles ?
- Tous les hôtes disposent-ils de versions à jour et interopérables de SSH ?
- Les hôtes qui agissent en tant que serveurs SSH ont-ils le logiciel serveur SSH installé et démarré ?
- L'utilisateur dispose-t-il des autorisations adéquates sur les systèmes concernés ?
Une fois que vous avez défini les points d'extrémité du tunnel, une approche étape par étape peut simplifier le dépannage, car vous pouvez tester chaque composant du tunnel au fur et à mesure que vous l'activez.
- Initialisez le démon SSH sur le serveur SSH. Pour Windows 10 et versions ultérieures, vous devez installer le serveur OpenSSH et le démarrer à l'aide d'une ligne de commande PowerShell exécutée avec les autorisations d'administrateur. Utilisez la commande suivante pour initialiser le démon du serveur OpenSSH à partir de la ligne de commande PowerShell :
PS C:\Users\peter> Start-Service sshd
Utilisez la commande suivante sur les systèmes Linux pour démarrer le serveur OpenSSH :
$ sudo systemctl start sshd
N'oubliez pas que la commande sudo nécessite un mot de passe autorisé pour obtenir un accès superutilisateur afin d'exécuter le service serveur.
Une fois que vous avez établi la connectivité avec tous les systèmes finaux et confirmé les autorisations d'accès aux programmes SSH, la configuration du tunnel est simple, bien que certaines implémentations SSH puissent offrir des options différentes. Pour déterminer quelle version SSH est installée sur Windows, ouvrez une fenêtre PowerShell et entrez la commande suivante :
PS C:\Users\userID> ssh -V</p
Pour vérifier la version de SSH exécutée sous Linux, entrez la commande suivante :
$ sudo systemctl status sshd
Comment créer un tunnel de redirection de port local
La redirection de port local utilise l'option -L de la commande SSH pour indiquer qu'un port local sera redirigé via le serveur SSH vers un autre serveur ou hôte. En d'autres termes, l'hôte local se connecte à un autre hôte exécutant le serveur SSH, puis redirige toutes les données réseau destinées au port redirigé via le serveur SSH vers l'hôte de destination souhaité.
Par exemple, si vous utilisez un ordinateur sur un réseau privé et que vous souhaitez accéder à un serveur web bloqué par le pare-feu de votre entreprise, vous pouvez rediriger le port local 8080 vers le serveur web souhaité à l'aide de cette commande :
ssh -L 8080:social.example.org:80 ssh-server.example.com
Dans cet exemple, l'option -L indique que le serveur SSH à l'adresse ssh-server.example.com doit transférer le port 8080 de l'hôte local vers le port 80 du serveur souhaité mais restreint, social.example.org.
L'exécution de la commande SSH avec les ports spécifiés signifie que vous devriez pouvoir accéder au serveur restreint à l'aide d'une URL dans votre navigateur Web, telle que http://localhost:8080/, qui pointe vers le port spécifié sur l'hôte local exécutant SSH. SSH transfère la requête HTTP via le tunnel SSH pour accéder au serveur Web souhaité.
Comment créer un tunnel de redirection de port à distance
Les hackers éthiques, les testeurs d'intrusion et les pirates malveillants utilisent souvent la redirection de port à distance, également appelée « reverse tunneling ». Si les pirates parviennent à exploiter un seul hôte au sein d'un réseau privé, ils peuvent utiliser cet accès pour potentiellement accéder à n'importe quel système au sein du réseau protégé.
Pour démarrer un tunnel inversé, exécutez la commande ssh avec l'option -R sur l'hôte du réseau privé que vous souhaitez utiliser pour transférer les requêtes réseau externes vers un hôte autrement restreint du réseau privé. Considérez la commande suivante, exécutée sur un hôte situé à l'intérieur du périmètre du pare-feu :
ssh -R 5900:localhost:5900 somehost.example.net
Dans cette commande, localhost fait référence à l'hôte situé à l'intérieur du réseau privé. Le port transféré (5900) est le port par défaut de VNC, un logiciel qui permet de contrôler à distance un bureau. Le système vers lequel le transfert est effectué est somehost.example.net, un hôte accessible à localhost mais également situé sur le réseau protégé. Normalement, cet hôte ne devrait être accessible à personne en dehors du périmètre du pare-feu ; cependant, dans ce cas, localhost a été rendu accessible à l'Internet public. Vous pouvez également utiliser ce type de transfert pour exploiter un accès privilégié sur un hôte situé en dehors du réseau privé qui a reçu des privilèges pour accéder à des services restreints.
Dans cet exemple, vous pouvez configurer le logiciel client VNC pour qu'il se connecte au nom de domaine ou à l'adresse IP publique de localhost sur le port 5900 afin de prendre le contrôle du système somehost.example.net.
Dans la pratique, l'ouverture d'un tunnel inverse de cette manière peut s'avérer compliquée. De nombreuses entreprises sont conscientes de cette faille, qui permet aux attaquants d'exécuter des commandes à distance sur un système protégé, et elles déploient des protections contre celle-ci. Dans tous les cas, vérifiez auprès du personnel réseau et informatique afin d'éviter de déclencher des alertes avec un tunnel inverse.
Comment créer un tunnel de redirection de port dynamique
La redirection de port dynamique avec SSH est souvent utilisée pour configurer un serveur proxy SOCKS. Dans cet exemple, le client SSH écoute sur un port spécifique de l'hôte local. Lorsqu'il reçoit du trafic sur ce port, le serveur SSH encapsule, ou tunnelise, les messages de la couche application dans un tunnel sécurisé qui se connecte à la machine de destination.
Lorsque vous utilisez des proxys SOCKS, vous devez configurer le logiciel client avec le numéro de port sur lequel SSH accepte le trafic à mettre en tunnel. Le port par défaut pour les proxys SOCKS est 1080, donc la commande SSH pour démarrer un proxy SOCKS (activant le transfert de port dynamique) est :
ssh -D 1080 bastion.example.org
L'option -D active le transfert dynamique de port sur l'hôte local, de sorte que tous les messages reçus sur le port 1080 sont transférés vers l'hôte nommé bastion.example.org. Bastion est un type d'hôte généralement situé à l'extérieur du périmètre du pare-feu ou dans la zone démilitarisée (DMZ) du réseau. Il sert d'intermédiaire pour l'accès aux hôtes externes via des tunnels SSH.
