Principe et généralités

Il est aujourd'hui impossible d'ouvrir certains services directement sur Internet, les problèmes d'attaques étant trop courants. Nous utilisons donc des procédés de filtrage interdisant l'accès à nos serveurs depuis l'extérieur. Cependant cela peut empêcher les utilisateurs d'utiliser ces mêmes services. Pour contourner ce problème, sans pour autant compromettre la sécurité de l'infrastructure, nous allons utiliser le principe de tunnel ssh. La mise en oeuvre d'un tunnel est un peu plus complexe que l'utilisation standard d'une application. C'est un peu le prix à payer pour avoir la sécurité et l'accès aux services.

Le principe de base est le suivant :

Vous êtes sur votre poste client et vous voulez accéder aux serveurs (exemples) proposant les services imap, smtp, squid.(Rappelons que le service squid est le nom technique du proxy cache web). Comme expliqué sur le schéma, vous ne pouvez pas vous connecter directement sur ces services depuis Internet pour cause de filtrage au niveau de l'entrée de notre réseau (symbolisée ici par la barrière rouge). Vous allez donc constituer un tunnel (grosse flèche verte) entre votre poste client et le serveur ssh.math.cnrs.fr. Lors de l'établissement de ce tunnel, vous allez indiquer les services que vous voulez faire passer à travers le tunnel (ici nous avons donc imap, smtp et squid). Pour cela il faut donc avoir les informations suivantes :

  • Le port de départ, c'est-à-dire le port qui va être ouvert sur votre poste client (schématiquement il faut voir cela comme l'entrée du tunnel).
  • La machine qui va faire le travail de tunnel (ici cela sera ssh.math.cnrs.fr).
  • La machine que vous voulez atteindre (le bout du tunnel si vous voulez).
  • Le numéro de port de destination qui dépend donc du type de service que vous voulez atteindre.

Le numéro de port de destination qui dépend donc du type de service que vous voulez atteindre.

Une fois cette opération effectuée, vous allez indiquer à vos applications exécutées sur votre poste client de passer à travers le tunnel ssh pour atteindre les différents services.

Ce procédé de tunnel (on parle aussi de relais de ports, ou de ports forwarding) vous permet de continuer à utiliser depuis l'extérieur de notre réseau :

  • vos applications usuelles de messagerie (comme Mozilla/Thunderbird, Mail, etc...), basées sur les protocoles SMTP, POP et IMAP
  • vos applications usuelles de transfert de fichiers comme Fetch ou WS_FTP, basées sur le protocole FTP au travers d'une connexion sécurisée par ssh.

Pour en savoir plus sur SSH et comment se procurer les applications, merci de vous reporter à cette page.

Il semble fort utile de jeter un œil attentif aux documentations suivantes, qui expliquent par des graphiques le schéma général de ces tunnels :

Si ce qui suit vous semble trop compliqué, merci de vous reporter aux trois autres documentations :

pour avoir des explications plus détaillées et des copies d'écran.

Ce système de tunnel peut fort légitimement être perçu comme complexe à comprendre, à mettre en oeuvre et à utiliser la première fois. Mais l'investissement en vaut la peine, car cela vous permettra d'utiliser à distance de nombreux services uniquement disponibles depuis Chevaleret, et cela de manière transparente, une fois les réglages faits une bonne fois pour toutes. Le tout d'une manière parfaitement sécurisée.

Comment mettre en place des tunnels sous Unix/MacOS X

Sur toutes les versions de Linux/Unix/Macos X, le client ssh est installé avec le système. Nous allons détailler dans ce paragraphe une méthode pour faire des tunnels ssh.

Lancez tout d'abord un terminal (pour les macintosh l'application terminal se trouve dans le dossier Applications/Utilitaires et l'icône ressemble à un petit écran avec des caractères). Une fois cette opération effectuée, l'établissement d'un tunnel (commençons par le proxy) se fait en tapant la ligne :

ssh -N -f mon_login@ssh.math.cnrs.fr -L3128:proxy.math.cnrs.fr:3128

ce qui signifie en laguage courant : établir un tunnel (la fléche verte dans le schéma) depuis mon poste vers la machine ssh.math.cnrs.fr en ouvrant le port 3128 sur mon poste et de telle sorte que tout ce qui entre dans ce port soit redirigé via la machine ssh.math.cnrs.fr vers le port 3128 de la machine proxy.math.cnrs.fr.

Faisons maintenant la même chose pour le mail :

ssh -N -f mon_login@ssh.math.cnrs.fr -L1025:mailhost.math.cnrs.fr:25

et enfin pour le courrier :

ssh -N -f mon_login@ssh.math.cnrs.fr -L1143:imap.math.cnrs.fr:143

Une fois ces opérations effectuées, vous aurez établi trois tunnels.

Ces 3 tunnels peuvent être créés avec une seule commande :

ssh -N -f mon_login@ssh.math.cnrs.fr -L3128:proxy.math.cnrs.fr:3128  -L1025:mailhost.math.cnrs.fr:25 -L1143:imap.math.cnrs.fr:143

Comme vous l'avez noté, nous ne prenons pas le même port pour smtp et pour imap, contrairement à ce que nous avions fait pour le proxy cache. La raison est que les ports dont le numéro est inférieur à 1024 sont des ports réservés au système et seul root a le droit d'ouvrir un service sur ces ports. Il est donc beaucoup plus simple de faire les tunnels sur des ports supérieurs. Un moyen simple est de rajouter 1000 au numéro de port.

Il est facile de faire un alias pour ne pas avoir à taper l'ensemble de la commande en éditant votre fichier .bashrc et en rajoutant quelque chose comme :

alias tunnel='ssh -N -f mon_login@ssh.math.cnrs.fr -L1025:smtp.math.cnrs.fr:25 -L1143:imap.math.cnrs.fr:143 -L3128:proxy.math.cnrs.fr:3128'

Après cela il vous suffit de taper le nom de l'alias (ici tunnel).


Si vous avez des problèmes de déconnexion intempestif de vos tunnels ssh le meilleur moyen pour palier ce problème est de rajouter dans un fichier au nom de .ssh/config l'option suivante

ServerAliveInterval 10

Comment faire de même sur un Macintosh ?

  • Sur Macintosh en MacOS 8.x ou 9.x, on peut utiliser MacSSH (c'est impossible avec NiftyTelnet).
  • Il faut alors créer autant de Favorites que de ports voulus, en configurant l'onglet General, puis l'onglet SSH2 où il faut :
    • prendre comme Method le choix Local TCP port forward,
    • renseigner Local Port, Remote host, Remote port comme indiqué au paragraphe II.
  • http://www.geo.umn.edu/computer/ssh... vous donnent des explications détaillées avec recopie d'écran.
  • Sur Macintosh en MacOS X, en plus de la méthode expliquée au paragraphe II ci-dessus, on dispose d'un outil graphique, qu'il est utile de lire de toutes façons.
  • Loic Mérel a rédigé un mémo très didactique sur le sujet, et qui explique très concrètement comment mettre en place un tunnel SSH pour utiliser notre serveur SMTP depuis l'application Mail.

Comment mettre en place des tunnels, sous Windows et avec l'application PuTTY ?

Dans ce paragraphe nous allons voir comment faire les mêmes opérations sous Windows avec l'application PuTTY. Lancez l'application en cliquant sur l'icône de celui-ci vous aurez la première fenêtre qui s'ouvre :

dans le champ Host name il faut entrer le nom du serveur par lequel vous allez faire le tunnel, dans le cas qui nous intéresse il s'agit de ssh.math.cnrs.fr comme indiqué sur l'image. Vous pouvez si vous le désirez sauvegarder cette configuration, mais il est préfèrable de faire d'abord les tunnels.

Pour la réalisation des tunnels il faut sélectionner comme indiqué l'item Tunnel (point 2), vous obtenez alors :

dans le champ Host name il faut entrer le nom du serveur par lequel vous allez faire le tunnel, dans le cas qui nous intéresse il s'agit de ssh.math.cnrs.fr comme indiqué sur l'image. Vous pouvez si vous le désirez sauvegarder cette configuration, mais il est préfèrable de faire d'abord les tunnels.

Pour la réalisation des tunnels il faut sélectionner comme indiqué l'item Tunnel (point 2), vous obtenez alors
Vous pouvez maintenant construire les tunnels en indiquant

  1. Le numéro de port (ici 3128)
  2. La destination avec en fin de nom le numéro de port du service
  3. Cliquez sur le bouton Add

Il vous suffit ensuite de recommencer ces opérations pour les services smtp et imap.


Comme pour la mise en oeuvre dans le monde Unix, mais cela dépend de comment est installé et est utilisé votre version de windows, il arrive que windows refuse d'ouvrir des ports inférieurs à 1024, dans ce cas prenez des ports supérieurs. Une astuce est de rajouter 1000 au numéro de port habituel du service.

Comme pour la mise en oeuvre dans le monde Unix, mais cela dépend de comment est installé et est utilisé votre version de windows, il arrive que windows refuse d'ouvrir des ports inférieurs à 1024, dans ce cas prenez des ports supérieurs. Une astuce est de rajouter 1000 au numéro de port habituel du service.

Vous pouvez maintenant sauvegarder la configuration que vous venez de créer sous un nom qui vous soit facile (comme Chevaleret). La prochaine fois lors du lancement de puTTY, pour la mise en oeuvre de tunnel il vous suffira de cliquer sur la configuration Chevaleret.

Comment utiliser des applications de messagerie et web dans ces tunnels ?

Le principe général est que l'application que l'on va utiliser sur son poste client va devoir être configurée pour se connecter sur le serveur 127.0.0.1

Le serveur 127.0.0.1 est appelé aussi localhost, mais il est plus fiable (surtout sous windows) d'utiliser partout la dénomination 127.0.0.1

Ainsi, pour accéder à votre messagerie, il suffit de lancer votre application usuelle (Eudora, Mozilla/Thunderbird, Mail, etc) et de lui dire que :

  • le "SMTP server" est la machine 127.0.0.1 (au lieu de mailhost.math.cnrs.fr) avec comme numéro de port le 1025 (ou un autre numéro si vous avez fait un choix différent pour les numéros.
  • le "IMAP server" est la machine 127.0.0.1 (au lieu de imap.math.cnrs.fr) avec comme numéro de port le 1143 (ou un autre numéro si vous avez fait un choix différent pour les numéros.

Pour la configuration du proxy cache veuillez consulter Configuration du proxy web.

Rappelons que dans notre exemple nous avons pris le protocole imap mais ces manipulations sont valables pour la plupart des autres protocoles, par exemple si vous utilisez pop il vous suffit dans cette documentation de changer le port 143 en 110 et le nom de l'host de imap.math.cnrs.fr par pop.math.cnrs.fr

Si dans la constitution du tunnel vous avez choisi (par exemple) d'utiliser le port 1025 pour le smtp il ne faut pas oublier de l'indiquer à votre agent de mail. De même que pour les autres services il faut donner le numéro de port que vous avez utilisé pour faire le tunnel.

Le cas de ftp

Pour transférer des fichiers, il faut constituer un tunnel pour le service ftp (port 21), ensuite il suffit de lancer votre application FTP usuelle, et de lui dire que lancer une connexion vers la machine '127.0.0.1' et vers le port 21 c'est-à-dire qu'il faut taper '127.0.0.1' comme nom de machine distante et '21' comme numéro de port distant.


Cependant il est impératif de dire à votre application ftp de se mettre en mode passive, sans cette option la connexion ne fonctionnera pas.

Sur Macintosh (sous OS X), et sur tout Unix, il n'est pas vraiment utile d'utiliser un tunnel pour faire du ftp, vous pouvez faire cela directement avec sftp qui est un ftp au dessus de ssh. Cependant si vous avez de très gros fichiers, il est quand même conseillé d'utiliser un tunnel ftp qui ne chiffre pas les données mais juste l'authentification, permettant ainsi de ne pas trop charger les serveurs

Serveur d'application Windows

Il est aussi possible d'accéder à notre serveur d'applications Windows : winserveur.math.cnrs.fr - ports 3389 et 1494 qui donne accès à des applications Windows, notamment bureautiques. Pour cela, il suffit, après avoir ouvert les tunnels de SSH, de configurer son client RDP ou ICA, pour qu'il se connecte sur le serveur 127.0.0.1.

Pour le client ICA , si vous utilisez le mécanisme d'applications publiées, il faut les indiquer à votre client : en effet, il n'est pas possible de les découvrir - il faut les connaitre et les déclarer explicitement. Ce fichier donne l'exemple de la syntaxe.

Appendice : La notion de port

VIII - Appendice : La notion de port

La notion de port est très importante en informatique, nous n'allons pas vous faire un cours de ce qu'est exactement un port, mais vous donner quelques notions imagées.

Prenons un serveur qui va proposer plusieurs services (envoi de courrier, relève de courrier etc...) le client n'a aucun moyen de dire si ce qu'il veut c'est envoyer du courrier ou relever du courrier. Pour pouvoir faire cette distinction, il a été inventé la notion de port. On peut voir cela schématiquement comme une porte, la porte A va être réservée pour l'envoi de courrier et la porte B pour la relève de courrier.

Naturellement dans le monde informatique, c'est par des numéros qu'on désigne les ports. Il y a des standards (toujours inférieur à 1024) communément utilisés :

  • 22 : Connexion ssh
  • 25 : Envoi de courrier
  • 80 : Serveur WEB
  • 110 : Relève de courrier par POP
  • 143 : Relève de courrier par IMAP
  • etc.

Ces affectations sont juste des conventions, vos applications (Thunderbird,Mail, etc...) les appliquent, c'est pourquoi dans une configuration standard vous n'avez pas à connaître le numéro du port pour un service. Si vous dites à Thunderbird que vous voulez relever votre courrier, il va le faire par défaut sur le port 143. Lorsque vous faites des tunnels, vous ouvrez des ports sur votre machine.Ces ports étant différents des ports par défaut, votre application n'a aucun moyen de savoir qu'il s'agit de 1143 (ou d'un autre). C'est pourquoi dans la configuration il faut indiquer le numéro du port.