Comment configurer le tunnel SSH (redirection de port)

La tunnellisation SSH ou la redirection de port SSH est une méthode de création d’une connexion SSH chiffrée entre un client et une machine serveur à travers laquelle les ports de services peuvent être relayés.

Le transfert SSH est utile pour transporter des données réseau de services qui utilisent un protocole non chiffré, tel que VNC ou FTP, accéder à du contenu géo-restreint ou contourner des pare-feu intermédiaires. Fondamentalement, vous pouvez transférer n’importe quel port TCP et tunneler le trafic via une connexion SSH sécurisée.

Il existe trois types de redirection de port SSH:

  • Transfert de port local. – Transmet une connexion de l’hôte client à l’hôte du serveur SSH, puis au port hôte de destination.
  • Transfert de port à distance. – Transmet un port de l’hôte serveur à l’hôte client, puis au port hôte de destination.
  • Redirection de port dynamique. – Crée un serveur proxy SOCKS qui permet la communication sur une gamme de ports.

Dans cet article, nous expliquerons comment configurer des tunnels SSH cryptés locaux, distants et dynamiques.

Transfert de port local #

Le transfert de port local vous permet de transférer un port sur la machine locale (client ssh) vers un port sur la machine distante (serveur ssh), qui est ensuite transféré vers un port sur la machine de destination.

Dans ce type de transfert, le client SSH écoute sur un port donné et tunnelise toute connexion à ce port vers le port spécifié sur le serveur SSH distant, qui se connecte ensuite à un port sur la machine de destination. La machine de destination peut être le serveur SSH distant ou toute autre machine.

La redirection de port locale est principalement utilisée pour se connecter à un service distant sur un réseau interne tel qu’une base de données ou un serveur VNC.

Sous Linux, macOS et autres systèmes Unix pour créer un transfert de port local, passez le-Loption à lasshclient:

ssh -L [LOCAL_IP:] LOCAL_PORT: DESTINATION: DESTINATION_PORT [USER @] SSH_SERVER

Les options utilisées sont les suivantes:

  • [LOCAL_IP:] LOCAL_PORT– L’IP de la machine locale et le numéro de port. QuandLOCAL_IPest omis le client ssh se lie sur localhost.
  • DESTINATION: DESTINATION_PORT– L’IP ou le nom d’hôte et le port de la machine de destination.
  • [USER @] SERVER_IP– L’adresse IP de l’utilisateur et du serveur SSH distant.

Vous pouvez utiliser n’importe quel numéro de port supérieur à1024comme unLOCAL_PORT. Nombre de ports inférieur à1024sont des ports privilégiés et ne peuvent être utilisés que par root. Si votre serveur SSH écoute sur un port autre que 22 (par défaut), utilisez le-p [PORT_NUMBER]option.

Le nom d’hôte de destination doit pouvoir être résolu à partir du serveur SSH.

Disons que vous avez un serveur de base de données MySQL en cours d’exécution sur la machinedb001.hostsur un réseau interne (privé), sur le port 3306 accessible depuis la machinepub001.hostet vous souhaitez vous connecter en utilisant votre machine localemysqlclient au serveur de base de données. Pour ce faire, vous pouvez transférer la connexion comme suit:

ssh -L 3336: db001.host: 3306 [email protected]

Une fois la commande exécutée, vous serez invité à saisir le mot de passe de l’utilisateur SSH distant. Après l’avoir entré, vous serez connecté au serveur distant et le tunnel SSH sera établi. C’est une bonne idée de configurer une authentification basée sur une clé SSH et de se connecter au serveur sans entrer de mot de passe.

Maintenant, si vous pointez votre client de base de données de machine locale vers127.0.0.1:3336, la connexion sera transmise audb001.host:3306Serveur MySQL via lepub001.hostmachine qui servira de serveur intermédiaire.

Vous pouvez transférer plusieurs ports vers plusieurs destinations dans une seule commande ssh. Par exemple, vous avez un autre serveur de base de données MySQL en cours d’exécution sur la machinedb002.hostet vous souhaitez vous connecter aux deux serveurs à partir de votre client local, vous devez exécuter:

ssh -L 3336: db001.host: 3306 3337: db002.host: 3306 [email protected]

Pour vous connecter au deuxième serveur que vous utiliseriez127.0.0.1:3337.

Lorsque l’hôte de destination est le même que le serveur SSH au lieu de spécifier l’IP ou le nom d’hôte de l’hôte de destination que vous pouvez utiliserlocalhost.

Supposons que vous devez vous connecter à une machine distante via VNC qui s’exécute sur le même serveur et qu’il n’est pas accessible de l’extérieur. La commande que vous utiliseriez est:

ssh -L 5901: 127.0.0.1: 5901 -N -f [email protected]

le-Foption indique à lasshcommande à exécuter en arrière-plan et-Nne pas exécuter de commande à distance. Nous utilisonslocalhostcar le VNC et le serveur SSH s’exécutent sur le même hôte.

Si vous rencontrez des problèmes pour configurer la tunnellisation, vérifiez la configuration de votre serveur SSH distant et assurez-vousAllowTcpForwardingn’est pas défini surnon. Par défaut, le transfert est autorisé.

Redirection de port à distance #

La redirection de port à distance est l’opposé de la redirection de port locale. Il vous permet de transférer un port sur la machine distante (serveur ssh) vers un port sur la machine locale (client ssh), qui est ensuite transféré vers un port sur la machine de destination.

Dans ce type de transfert, le serveur SSH écoute sur un port donné et tunnelise toute connexion à ce port vers le port spécifié sur le client SSH local, qui se connecte ensuite à un port sur la machine de destination. La machine de destination peut être la machine locale ou toute autre machine.

Sous Linux, macOS et autres systèmes Unix pour créer un transfert de port distant, passez le-Roption pour le client ssh:

ssh -R[ÉLOIGNÉ:]REMOTE_PORT: DESTINATION: DESTINATION_PORT[[email protected]]SSH_SERVER

Les options utilisées sont les suivantes:

  • [REMOTE:] REMOTE_PORT– L’IP et le numéro de port sur le serveur SSH distant. Un videÉLOIGNÉsignifie que le serveur SSH distant se liera sur toutes les interfaces.
  • DESTINATION: DESTINATION_PORT– L’IP ou le nom d’hôte et le port de la machine de destination.
  • [USER @] SERVER_IP– L’adresse IP de l’utilisateur et du serveur SSH distant.

La redirection de port locale est principalement utilisée pour donner accès à un service interne à quelqu’un de l’extérieur.

Imaginons que vous développiez une application Web sur votre ordinateur local et que vous souhaitiez en afficher un aperçu à votre collègue développeur. Vous n’avez pas d’adresse IP publique, donc l’autre développeur ne peut pas accéder à l’application via Internet.

Si vous avez accès à un serveur SSH distant, vous pouvez configurer un transfert de port distant comme suit:

ssh -R 8080: 127.0.0.1: 3000 -N -f [email protected]

La commande ci-dessus fera en sorte que le serveur ssh écoute sur le port8080et tunneler tout le trafic de ce port vers votre machine locale sur le port3000.

Maintenant, votre collègue développeur peut taperthe_ssh_server_ip: 8080dans son navigateur et prévisualisez votre application géniale.

Si vous rencontrez des problèmes pour configurer la redirection de port à distance, assurez-vousGatewayPortsest réglé surOuidans la configuration du serveur SSH distant.

Redirection de port dynamique #

La redirection de port dynamique vous permet de créer un socket sur la machine locale (client ssh) qui agit comme un serveur proxy SOCKS. Lorsqu’un client se connecte à ce port, la connexion est transmise à la machine distante (serveur ssh), qui est ensuite transmise à un port dynamique sur la machine de destination.

De cette façon, toutes les applications utilisant le proxy SOCKS se connecteront au serveur SSH et le serveur transmettra tout le trafic à sa destination réelle.

Sous Linux, macOS et autres systèmes Unix pour créer un transfert de port dynamique (SOCKS), passez le-RÉoption à lasshclient:

ssh -D[LOCAL_IP:]LOCAL_PORT[[email protected]]SSH_SERVER

Les options utilisées sont les suivantes:

  • [LOCAL_IP:] LOCAL_PORT– L’IP de la machine locale et le numéro de port. QuandLOCAL_IPest omis le client ssh se lie sur localhost.
  • [USER @] SERVER_IP– L’adresse IP de l’utilisateur et du serveur SSH distant.

Un exemple typique de redirection de port dynamique consiste à tunneler le trafic du navigateur Web via un serveur SSH.

La commande suivante créera un tunnel SOCKS sur le port9090:

ssh -D 9090 -N -f [email protected]

Une fois le tunneling établi, vous pouvez configurer votre application pour l’utiliser. Cet article explique comment configurer Firefox et le navigateur Google Chrome pour utiliser le proxy SOCKS.

La redirection de port doit être configurée séparément pour chaque application pour laquelle vous souhaitez canaliser le trafic.

Configurer le tunneling SSH dans Windows #

Les utilisateurs Windows peuvent créer des tunnels SSH à l’aide du client PuTTY SSH. Vous pouvez télécharger PuTTY ici.

  1. Lancez Putty et entrez l’adresse IP du serveur SSH dans leNom d'hôte (ou adresse IP)champ.

  2. Sous leConnexionmenu, développezSSHet sélectionnezTunnels. Vérifier laLocalbouton radio pour configurer local,Éloignépour télécommande, etDynamiquepour la redirection de port dynamique.

    • Si vous configurez le transfert local, entrez le port de transfert local dans lePort sourcesur le terrain et dansDestinationentrez l’hôte de destination et l’IP, par exemple,localhost: 5901.
    • Pour le transfert de port distant, entrez le port de transfert de serveur SSH distant dans lePort sourcesur le terrain et dansDestinationentrez l’hôte de destination et l’IP, par exemple,localhost: 3000.
    • Si vous configurez le transfert dynamique, entrez uniquement le port SOCKS local dansPort sourcechamp.
  3. Clique sur leAjoutercomme indiqué dans l’image ci-dessous.

  4. Retournez auSessionpour enregistrer les paramètres afin que vous n’ayez pas à les saisir à chaque fois. Entrez le nom de la session dans leSession enregistréechamp et cliquez sur lesauverbouton.

  5. Sélectionnez la session enregistrée et connectez-vous au serveur distant en cliquant sur leOuvertbouton.

    Une nouvelle fenêtre vous demandant votre nom d’utilisateur et votre mot de passe s’affichera. Une fois que vous aurez entré votre nom d’utilisateur et votre mot de passe, vous serez connecté à votre serveur et le tunnel SSH sera démarré.

    La configuration de l’authentification par clé publique vous permettra de vous connecter à votre serveur sans entrer de mot de passe.

Conclusion #

Nous vous avons montré comment configurer des tunnels SSH et transférer le trafic via une connexion SSH sécurisée. Pour faciliter l’utilisation, vous pouvez définir le tunnel SSH dans votre fichier de configuration SSH ou créer un alias Bash qui configurera le tunnel SSH.

Si vous rencontrez un problème ou avez des commentaires, laissez un commentaire ci-dessous.