Fermer

août 10, 2021

Comment comprendre le tunneling SSH et ses cas d'utilisation


Le tunneling SSH est la fonctionnalité offerte par l'outil OpenSSHqui nous permet de créer un tunnel entre deux hôtes afin que les données d'un autre protocole soient encapsulées dans l'en-tête SSH et transférées en tant que données SSH entre ces deux hôtes.

SSH est livré avec une authentification et un cryptage intégrés, ce qui signifie que nous pouvons utiliser des tunnels SSH pour transférer les données de services non sécurisés entre deux hôtes.

Le tunnel SSH peut être implémenté de trois manières :

  1. Tunnel SSH (redirection de port local)
  2. Tunnel SSH inverse (redirection de port distant)
  3. Tunnel SSH dynamique (redirection de port dynamique)

Tunnel SSH (redirection de port local)

Lorsque vous créer un tunnel SSH avec redirection de port local, le tunnel SSH retransmet les données du port de la machine cliente vers le port de la machine serveur. C'est la forme la plus simple de tunnel SSH.

Utilisez la commande suivante pour configurer le tunnel SSH entre votre machine et la machine distante (étant donné que vous avez un accès SSH à la machine distante) :

ssh -L 1234:localhost:5678 remoteuser@remotehost

Dans cette commande, "-L" fait référence à l'écoute du côté local. Avec la commande ci-dessus, toutes les données arrivant sur le "port 1234" de votre machine seront encapsulées en tant que données SSH et transmises au "port 5678" de l'hôte distant. Dans l'exemple ci-dessus, « localhost » fait référence à l'adresse IP de l'hôte local d'une machine distante.

Une autre implémentation de la redirection de port local est la suivante :

ssh -L 1234:farawayhost_IP : 5678 remoteuser@remotehost

Dans ce genre d'implémentation, toutes les données arrivant sur le « port 1234 » de votre machine seront transmises au « port 5678 » sur la machine farawayhost par la machine remotehost (étant donné que farawayhost permet le hôte distant pour envoyer des données pour le port 5678).

La redirection de port local est très utile pour accéder aux services hébergés sur un réseau privé. Prenons un scénario dans lequel le réseau de votre bureau n'autorise que les connexions SSH aux ressources/machines internes, bloque tout autre trafic provenant des réseaux extérieurs et vous souhaitez accéder en toute sécurité au site Web limité à votre réseau de bureau. Dans un tel cas, vous pouvez créer un tunnel SSH vers la machine à l'intérieur du réseau de votre bureau et accéder au site Web restreint :

ssh -L 8080:restricted.domain.com:80 remoteuser@remotehost[19659002]Vous pouvez accéder au site Web restreint avec l'URL "http://localhost:8080" dans le navigateur de votre machine locale. C'est l'un des nombreux cas d'utilisation de la redirection de port local. Un autre cas d'utilisation serait d'accéder à la base de données sur le serveur en toute sécurité sans exposer les ports de la base de données.

Reverse SSH Tunnel (Remote Port Forwarding)

Reverse SSH tunnel écoute le port sur la télécommande machine et transfère toutes les données provenant de ce port vers le port spécifié sur votre machine locale via SSH.

ssh -R 1234:localhost:5678 remoteuser@remotehost

Dans cette commande, "- R" fait référence au côté distant qui écoute et écoute le "port 1234" sur la machine distante et transmet toutes les données du "port 1234" de la machine distante au "port 5678" sur votre machine locale.

Une autre implémentation de la redirection de port distant est la suivante :

ssh -R 1234:nearhost_IP:5678 remoteuser@remotehost

Dans cet exemple, toutes les données du "port 1234" de la machine distante sera transmise par votre machine locale au "port 5678" de la machine proche de l'hôte.[19659002]

Imaginons maintenant un scénario dans lequel un développeur développe une application/un site Web sur sa machine locale et souhaite permettre à son client/à son équipe d'accéder à ce site Web/application hébergé localement pour une démonstration. Souvent, vous n'avez pas d'adresse IP publique pour votre machine locale (bien que vous puissiez créer un accès à votre machine locale en configurant des règles NAT, cela ne fonctionne pas toujours). Vous pouvez créer un tunnel SSH inversé vers un serveur accessible au public pour le "port 80" (ou tout port personnalisé) et laisser les utilisateurs finaux (clients ou membres de votre équipe dans cet exemple) parcourir le site Web en utilisant l'adresse IP de ce serveur public sur le « port 80 » (ou tout port personnalisé que vous définissez dans la commande) pour accéder au site Web.

Avant d'envisager la mise en œuvre d'un tunnel SSH inversé, le paramètre « GatewayPorts » doit être défini sur « oui » dans le SSH de votre hôte distant fichier de configuration du serveur "/etc/ssh/sshd_config."

Dynamic SSH Tunnel (Dynamic Port Forwarding)

Avant d'apprendre ce qu'est un tunnel SSH dynamique, discutons de ce qu'est un proxy et un Les proxy Socket Secure (SOCKS) sont. Simplement, un proxy est un service/serveur qui fait une demande en votre nom. Vous devez avoir utilisé un proxy HTTP, où votre navigateur se connecte à un serveur proxy et ce serveur proxy effectue la requête HTTP en votre nom et vous transmet la réponse qu'il obtient. Adresse IP d'un client.

Un proxy SOCKS achemine tout type de trafic généré par tout protocole ou programme vers le serveur réel au nom du client. Contrairement à un proxy HTTP, il est indépendant du protocole.

De nombreuses applications telles que les navigateurs prennent en charge un proxy SOCKS où vous configurez l'adresse IP et le port du serveur proxy. Si le proxy est configuré sur le navigateur, cette requête est encapsulée avec l'en-tête SOCKS où le port de destination et l'IP de votre requête deviennent le port et l'IP du serveur proxy que vous avez configuré sur votre navigateur.

Le serveur proxy désencapsule ensuite cela. données et envoie la demande à l'adresse IP réelle (IP du site Web) et au port (80 ou 443), où l'adresse IP source est l'adresse IP du serveur proxy.

Démontrons le tunnel SSH dynamique. en revisitant l'exemple que nous avons vu pour la redirection de port local. Dans ce cas, si vous souhaitez accéder à plusieurs URL restreintes dans un réseau privé, vous devrez créer plusieurs sessions de tunnel SSH statiques vers l'hôte de destination. Ce n'est pas une solution réalisable.

Voici le tunnel SSH dynamique à la rescousse, qui exploite le protocole SOCKS. Vous pouvez implémenter le tunnel SSH dynamique à l'aide de la commande suivante :

ssh -D 1234 remoteuser@remotehost

Dans ce cas, votre tunnel SSH agit comme un proxy SOCKS écoutant sur le « port 1234 ». La demande est ajoutée au "port 1234" de votre machine locale sera transmise à la machine hôte distante, et la machine hôte distante fera la demande au serveur réel en votre nom.

Votre application cliente doit être compatible avec SOCKS. Dans ce cas, notre client est notre navigateur. Nous allons considérer Firefox dans notre exemple :

Allez dans « Paramètres ». Cliquez sur "Général", puis "Paramètres réseau", et cliquez sur le bouton "Paramètres". Sélectionnez « Configuration manuelle du proxy ». Entrez l'adresse IP de votre machine locale (127.0.0.1 fonctionnera également) dans la section « Hôte SOCKS ». Ensuite, entrez le numéro de port que vous avez spécifié dans la commande ci-dessus (1234 dans cet exemple).

Maintenant, chaque fois que vous appuyez sur une URL, la demande sera envoyée au "port 1234" de votre machine locale par le navigateur, qui sera puis être transmis à l'hôte distant via le tunnel SSH, puis l'hôte distant fera la demande au serveur réel en votre nom. Dans ce cas, toutes les requêtes DNS (Domain Name System) du navigateur sont également effectuées via la machine hôte distante.

Ce type d'implémentation est très utile lorsque vous êtes connecté à une source Internet publique comme un hôtel ou un restaurant Wi. -Fi. Vous pouvez configurer un petit appareil comme un Raspberry Pi (un petit ordinateur System-on-Chip de poche) dans votre réseau domestique et le rendre accessible publiquement en SSH. Connectez-vous au Raspberry Pi en utilisant le tunnel SSH dynamique et configurez votre navigateur en conséquence. Cela peut vous protéger d'une attaque « Man-In-The-Middle » (où un attaquant renifle le trafic de données entre la source et la destination) tout en utilisant l'Internet public. une fonctionnalité très simple mais très puissante, permettant un transfert de données sécurisé sur un réseau. Comme nous l'avons vu, SSH Tunneling n'a pas de cas d'utilisation fixe, mais il peut s'avérer très utile dans différents types de situations si vous savez comment cela fonctionne. Pour plus d'informations, contactez nos experts.

À propos de l'auteur

Swapnil est un administrateur système certifié Red Hat et Azure, qui crée et gère une infrastructure basée sur les plateformes Linux et Windows. Il est toujours désireux d'apprendre et d'ajouter de nouvelles compétences chaque jour.

En savoir plus sur cet auteur




Source link