logo

Utilisacteur Linux-Québec

Les tunnels SSH

Par Nicolas Marchildon, avril 2002

Contexte client-serveur

La majorité des services offerts sur internet fonctionnent selon le principe client-serveur, où un machine offre ses services à plusieurs clients. Le serveur se met en position d'écoute et attend les requêtes de clients.

En termes de réseautique, le logiciel serveur écoute sur un port de la machine serveur. Réalisez bien la différence entre la machine serveur, et le logiciel serveur. Le logiciel serveur s'exécute sur la machine serveur. Dans ce document, le terme "serveur" désignera en général le logiciel.

Un port est un canal de communication numéroté de 0 à 65535. Les port inférieurs à 1024 sont dits "privilégiés" car l'application logicielle a besoin d'avoir des droits spéciaux pour les utiliser. Plusieurs services différents (HTTP, FTP, SMTP, etc.) peuvent être offerts par une seule machine, en se servant de plusieurs ports.

Chaque serveur est libre d'offir ses services sur n'importe quel port, mais il existe des conventions. Par exemple, le service HTTP est normalement disponible sur le port 80. Ainsi, le client qui désire obtenir des informations de la part du serveur HTTP sait qu'il pourra fort probablement accéder au service HTTP d'une machine en lancant une requête sur le port 80 de cette machine.

Un logiciel serveur doit ouvrir un port, et écouter les requêtes des clients. Le client tente d'établir une connection sur un port d'une machine dans l'espoir qu'un serveur écoute sur ce port. Si un serveur écoute sur le port en question, la connexion entre le client et le serveur peut s'établir.

Principe des tunnels

Lorsqu'une connexion a été établie entre un client et un serveur, les données sont souvent transmises "toutes nues" sur le réseau. Si une troisième machine a accès à ce réseau, il lui est possible de voir tout ce qui se transige entre les deux premières machines (le client et le serveur). Cette troisième machine pourrait même intervenir dans la communication et modifier les données transmises.

Bien sûr, les données ne sont pas toujours transmises toutes nues, mais il reste qu'une grande majorité des protocoles de communication ne comportent pas de protection contre l'écoute ou la modification des données. Parmis les protocoles non sécuritaires, on retrouve POP3 (lecture de courriels), HTTP (web), FTP (transfert de fichiers), et telnet.

Le protocole SSH en est un qui protège contre l'écoute non-autorisée et la modification de la transmission. Or, certains ont eu l'idée d'encapsuler une connexion non-sécurisée à l'intérieur d'une connexion SSH. Il s'agit des tunnels SSH. Un tunnel SSH permet donc de faire en sorte que les données transmises sur le réseau soient protégées, tout en utilisant le procole non-protégé.

Exemple: Lecture de courriels par POP3

Supposons que vous vouliez lire vos courriels du travail à partir de la maison. En temps normal, vous utilisez un client de courriel localement, et ce logiciel se connecte sur le serveur POP3 du travail. Dans la configuration de votre logiciel, vous avez par exemple entré:

Hôte: courrier.compagnie.com
Nom d'utilisateur: sebastien
Mot de passe: FidoLeChien

Ainsi, lorsque vous téléchargez vos courriels, votre logiciel transmet votre nom d'utilisateur et votre mot de passe à la machine nommée "courrier.compagnie.com". Étant donné que le protocole POP3 utilisé n'est pas sécuritaire, vous voulez configurer un tunnel SSH pour lire vos courriels sans avoir peur qu'un individu attrappe votre mot de passe au passage et puisse lire tous vos courriels.

Le but est de faire en sorte que les données qui sont transmises sur le réseau internet soient encapsulées à l'interieur d'un tunnel SSH. Pour cela, vous avez besoin d'un accès SSH au serveur "courrier.compagnie.com". Pour obtenir cet accès, faites la demande à votre technicien informatique.

Test de SSH

Vous pouvez tester votre accès SSH à la machine en tapant simplement ceci:

ssh -l utilisateur courrier.compagnie.com

Le mot "utilisateur" doit être remplacé par le nom du compte UNIX créé sur courrier.compagnie.com (ça aussi, c'est à remplacer).

Suite à cette commande, vous devrez entrer le mot de passe de votre compte UNIX, et vous obtiendrez une ligne de commande (shell). Tapez "exit" pour quitter.

Mise en place du tunnel

Normalement, votre logiciel de courrier se connecte au port 110 du serveur de courrier de votre compagnie. Une fois le tunnel mis en place, votre propre machine apparaîtra comme un serveur de courrier POP3, et vous pourrez configurer votre logiciel pour qu'il se connecte sur votre propre machine, plutôt que sur courrier.compagnie.com.

Étant donné que le tunnel ssh va écouter sur le port 110 de votre machine locale, il vous faut exécuter la commande qui suit en tant que "root" (tapez "su root", et entrez le mot de passe de l'usager "root" de votre machine). ssh -L 110:localhost:110 -l utilisateur courrier.compagnie.com

Voici la signification de chacun des éléments de cette commande:

ssh Nom du programme qui va mettre en place le tunnel.
-L Spécifie qu'un port Local doit être réenvoyé sur une machine distante sur un numéro de port donné. Les trois prochains items, séparés par des deux-points, sont alors nécessaires.
110 Numéro du port local qui doit être "ouvert" et réenvoyé. Le client de courriel ira se connecter à ce port pour télécharger les courriels.
localhost Nom de la machine distante qui héberge un serveur POP3. Le terme "localhost" désigne en fait courrier.compagnie.com, mais d'un point de vue local.
110 Numéro de port du serveur distant qui fournit le service POP3.
-l utilisateur Nom du compte UNIX à utiliser pour accéder à la machine distante.
courrier.compagnie.com Nom de la machine distante. C'est entre votre machine et cette machine que le tunnel SSH sera mis en place.

Une fois que vous aurez exécuté cette commande et que vous aurez entré le mot de passe pour l'usager "utilisateur" de la machine "courrier.compagnie.com", vous obtiendrez encore une fois une ligne de commande sur le serveur "courrier.compagnie.com".

Toutefois, le tunnel a été mis en place, et vous pouvez de ce pas modifier la configuration de votre logiciel de courriel. Au lieu de spécifier "courrier.compagnie.com" comme nom de serveur POP3, vous allez maintenant entrer "localhost".

Une fois votre configuration changée, demandez à votre logiciel de télécharger vos nouveaux messages. Si tout fonctionne comme d'habitude, c'est bon signe! Votre mot de passe et vos courriels sont transmis de façon sécurisée entre vous et le serveur de courrier.

Pas d'accès SSH au serveur POP3

Si vous ne pouvez pas obtenir d'accès SSH au serveur de courrier, mais je vous avez un accès SSH à une autre machine située sur le même réseau que votre serveur de courrier, rien n'est perdu. Vous pouvez établir le tunnel SSH entre la machine à laquelle vous avez accès et votre propre machine, et bénéficier quand-même d'un gain de sécurité.

Pour ce faire, vous devez remplacer "localhost" par le nom du serveur de courrier, tel que connu par la machine à laquelle vous avez un accès SSH. Ce pourrait être, par exemple, "courrier.bureau.compagnie.com".

Vous devez également remplacer "courrier.compagnie.com" pour le nom de la machine à laquelle vous avez un accès SSH:

ssh -L 110:courrier.bureau.compagnie.com:110 -l utilisateur autrechose.compagnie.com

Une fois cette commande exécutée, vous vous retrouverez encore une fois avec une ligne de commande, mais cette fois, vous serez sur "autrechose.compagnie.com".

Tout le traffic POP3 entre vous et autrechose.compagnie.com sera alors sécurisé par le tunnel SSH, mais ce qui transige entre autrechose.compagnie.com et courrier.compagnie.com ne le sera pas. Il s'agit habituellement d'un gain de sécurité, puisque la communication entre ces deux dernières machines se fait habituellement sur un réseau privé auquel seuls les employés de votre compagnie ont accès.

Conclusion

Les tunnels SSH peuvent apporter un gain de sécurité considérable à des applications déjà existantes, sans toutefois requérir des modifications au fonctionnement des logiciels client et serveur.


Copyright (c) 2002 Nicolas Marchildon.
Il vous est permis de copier, distribuer et/ou modifier ce document sous les conditions de la Licence de documentation libre GNU, version 1.1 ou ultérieure publiée par la Free Software Foundation; sans sections invariantes, sans texte de première page de couverture, et sans texte de dernière page de couverture.