Outils pour utilisateurs

Outils du site


sysadmin:unix:tunnels

Tunnels SSH

Position du problème

La commande ssh(1) permet de remplacer telnet(1) et rsh(1). En fait, SSH permet plus encore : il permet de sécuriser des protocoles qui ne le sont pas et il permet de traverser des gardes barrières. Nous allons voir comment.

Maintenant que vous utilisez ssh(1), votre mot de passe ne passe plus en clair, n'est ce pas ? Oui mais vous vous refusez à utiliser mail(1), elm(1), pine(1) ou mutt(1), qui vous paraissent frustres. Et bien, utilisez votre logiciel favori (typiquement Eudora ou Mozilla Thunderbird) de chez vous en tunnelisant les communications !

Rappels réseaux

Notion d'interface

Chaque machine (reliée à un réseau IP) a deux interfaces de communication (au moins) et donc deux adresses IP et deux noms correspondants. L'une, qui dépend du réseau et une autre standard. Celle vous reliant au réseau est configurée par vous, votre administrateur ou un logiciel. L'autre permet de communiquer avec votre propre machine.

Sur Unix, l'interface est appelée lo0 (loopback) ; elle est toujours adressée en 127.0.0.1 et nomme votre machine localhost. Les autres interfaces sont matérialisées par des connecteurs (par exemple RJ45 ou BNC pour un réseau local Ethernet ou RJ11 pour un modem) et des périphériques (éventuellement inclus dans le boîtier de l'unité centrale).

Notions d'adresse IP et de nom

Une machine reliée à un réseau TCP/IP a une adresse (qui peut être dynamique, typiquement dans le cas d'une connexion par modem, ou statique). À une adresse IP (comme 127.0.0.1), correspond un nom de machine et un domaine (le nom du réseau).

Notion de port

Sans se lancer dans un cours d'informatique, disons que : pour qu'une connexion entre deux machines puisse avoir lieu, il faut que ces dernières parlent le même langage. Ce langage est le protocole de communication. Avec un navigateur Web, pour lire une page HTML, votre logiciel se connecte au serveur sur le port HTTP standard. Avec un logiciel de courrier, pour récupérer vos mails, votre logiciel ouvre une connexion vers le serveur de courrier sur les ports 110 ou 143 (POP3 ou IMAP). Un port est donc un nombre qui permet au serveur de savoir ce que l'on attend de lui.

Schématiquement et à la louche, ça se passe comme suit :

  • client : Je veux lire mon courrier. J'ai réglé mon logiciel pour qu'il le récupère sur la machine pop.domaine.fr via le protocole POP3. Mon logiciel demande à mon système d'exploitation d'ouvrir un port, disons 12345 et de contacter le serveur sur le port 110 (POP3).
  • serveur : La machine pop.domaine.fr reçoit la demande de connexion et l'honore. Le système transmet au logiciel serveur.

À ce moment là, mon logiciel client et le logiciel serveur peuvent discuter.

Tout ce qui précède est valable pour tout protocole et ne dépend en aucun cas de POP3.

Méthode Unixienne et principes

Sur toutes les machines Unix de l'UFR la commande ssh(1) est installée. Nous utilisons les clients et le serveur (tous libres) OpenSSH. Ils fonctionnent aussi très bien sur les autres Unix du marché à commencer par GNU/Linux (Debian, Mandrake, Red Hat, SuSE, …).

Commençons par un exemple :

1   hexley 15:10:48 ~> uname -n
2   hexley.bertillon.fr
3   hexley 15:10:53 ~> ssh -C -f pc@zeus -L 10000:zeus:23 sleep 50
4   pc@zeus's password: <---- [mon mot de passe sur la machine zeus ici] ---->
5   hexley 15:11:48 ~> telnet localhost 10000
6   Trying 127.0.0.1...
7   Connected to localhost.
8   Escape character is '^]'.
9   
10  NetBSD/mac68k (zeus.bertillon.fr) (ttyp1)
11  
12  login: pc
13  Password: <---- [mon mot passe sur la machine zeus ici] ---->
14  Last login: Sun Sep 15 12:52:15 2002 from zeus
15  You have mail.
16  zeus 15:16:01 ~> uname -n
17  zeus.bertillon.fr
18  zeus 15:20:20 ~>

À la ligne 1, je demande sur quelle machine je travaille actuellement. Le shell me répond à la ligne 2 que je suis sur hexley.bertillon.fr. À la ligne 3 j'ouvre un tunnel vers le serveur telnet zeus. Enfin, à la ligne 5 je me connecte au tunnel SSH pour accéder au serveur telnet. Une fois connecté (lignes 6 à 15), je vérifie (ligne 16) sur quelle machine je travaille : il s'agit bien de zeus.bertillon.fr.

Résumé

Pour ouvrir un tunnel SSH la syntaxe est :

> ssh -C -f login@serveur -L port_local:serveur:port_distant -N

  • login est votre nom d'utilisateur (pour moi, pc),
  • serveur est le serveur à atteindre (ici zeus.bertillon.fr),
  • port_local est le port que vous allez utiliser, il s'agit d'un nombre entre 1024 et 65535,
  • port_distant est le port que vous voulez atteindre (à suivre),

Retour sur les tunnels SSH

Voici un autre exemple pour lire son courrier :

zeus 15:45:01 ~> ssh -C -f pc@pop -L 20000:pop:110 sleep 1000
zeus 15:50:35 ~> telnet localhost 20000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK
user pc
+OK
pass [mon mot de passe ici]
+OK
stat
+OK 40 50246
quit
+OK
Connection closed by foreign host.
zeus 15:51:00 ~> 

Quand le tunnel est en place, que se passe-t-il ? Toute connexion du port 20000 sur ma machine locale (localhost) part directement vers le port 110 sur la machine pop.domaine.fr. Autrement dit, je dois reconfigurer mon logiciel pour qu'il se connecte à localhost:20000 et non pas à pop.domaine.fr:110 pour lire mon courrier. Quand mon logiciel se connecte au port 20000 de ma machine cliente, le tunnel transmet la communication au serveur POP3 avec lequel il discute alors. C'est absolument transparent pour mon logiciel.

Avec des logiciels spécifiques

Chez vous, vous pouvez installer :

  • sur Windows, nous vous recommandons PuTTY.
  • sur Mac OS, MacSSH ou NiftyTelnet permettent des connexions par r-commandes BSD, telnet(1) et ssh(1).
  • sur Mac OS X, vous disposez d'OpenSSH si vous avez installé les commandes BSD (BSD.pkg sur le CD d'installation).
  • sur Unix, vous avez le choix entre la version commerciale et OpenSSH.

Reportez-vous à la documentation pour ouvrir des tunnels. Essentiellement le principe est toujours le même. Pour plus de détails, lisez l'excellente documentation de Joël MARCHAND.

sysadmin/unix/tunnels.txt · Dernière modification: 2008/09/17 23:41 par raf