Tunnel SSH: Sécurité sur un réseau douteux

Cet article touche le principe des tunnels SSH pour protéger les données transférées sur un réseau insécure et présente comme exemple pratique la configuration de Firefox et Pidgin avec un tunnel SSH. Vous devrez avoir accès à un serveur SSH pour utiliser les techniques présentées. Cet article est aussi plus utile si vous vous trouvez parfois avec un portable sur un réseau non sécurisé. Par contre, à la fin de cet article, vous trouverez un lien vers des versions compactes de Firefox et Pidgin que vous pouvez sécuriser et faire fonctionner d'une clée USB sur tout autre ordinateur Windows.

Screencast Configuration de Tunnel avec PuTTY, Firefox, Pidgin (Video Flash, environ 4 megs)


Qu’est-ce qu’un tunnel SSH et pourquoi s'en servir?

Un tunnel SSH permet d’ouvrir une connexion distante et sécurisée vers une autre machine et de s’en servir comme relais de données. Cette technique est particulièrement indispensable pour sécuriser les échanges de données passant sur un réseau non sécurisé. Par exemple, un tunnel SSH est très utile lorsqu'on veut accéder à un service de courriel Web à partir d'un réseau qui pourrait être sous écoute, comme un café internet.

Exemples d’application

Communément, on fait passer les données Web (HTTP) par des tunnels pour encrypter le contenu des pages Web (très utile si vous aimez regarder votre web-mail dans un café). D’autres applications passant par des tunnels peuvent inclure les clients POP/SMTP et les agents de messagerie instantanée (MSN, Pidgin). Non seulement le tunneling permet de sécuriser les données envoyées et reçues, le tunneling permet aussi de passer à travers certains firewalls.

Principe général

Attention, pour se servir du tunneling, vous devez avoir accès à un serveur SSH, préférablement étant connecté sur un réseau que vous jugez de confiance. Pour illustrer le principe, nous allons désigner le serveur SSH sur un réseau sécurisé Serveur et le portable sur un réseau non sécurisé comme étant le Client.

Le lien rouge est la connexion sans tunnel. Toutes les transmissions passent par le réseau non sécurisé. Par contre, il est possible d'établir une session encryptée entre le Client et le Serveur SSH. Nous pouvons utiliser cette session comme un tunnel, c'est la ligne en vert. En se servant de la ligne verte pour rejoindre le serveur SSH, et en s'en servant comme proxy pour notre connexion, nous pouvons accéder aux services sur internet par la ligne bleue. Cependant, notons que la ligne bleue n'est pas nécéssairement sécurisée; il s'agit de la connexion entre le serveur SSH et internet.

En bref, il nous faut établir une connexion avec notre serveur SSH distant et lui donner des instructions de rediriger certains ports.
Par exemple, l’instruction
ssh –L 1234:serveurcourriel:110 serveurSSH

nous permettrait de faire passer toute requête locale sur le port 1234 au serveur de courriel sur le port 110 (POP3) et ce, en passant par serveurSSH. Une autre façon de faire pour sécuriser plusieurs services en même temps, est d’utiliser SSH pour créer un serveur Proxy SOCKS. Sans rentrer dans ce que c’est exactement, il s’agit simplement de faire passer par une seule connexion SSH les services du Client qui sont compatibles avec les Proxy SOCKS5. C’est d’ailleurs ce que nous allons faire pour sécuriser Firefox et Pidgin dans notre exemple.


Création du tunnel sur le Client (PuTTY et Linux)

On doit d’abord contacter notre Serveur SSH et lui dire d’agir comme un Proxy pour nos connexions. Voici les façons de faire. Pour notre exemple, nous allons arbitrairement choisir le port 7373, le nom d’utilisateur pour votre Serveur SSH nomUtilisateur et votre adresse de Serveur SSH serveurSSH.com.

Sous Linux :
ssh –D 7373 nomUtilisateur@serveurSSH.com

Sous Windows :
Nous utiliserons le client SSH gratuit et portable PuTTY.
Commencez par créer une nouvelle session et entrez l’adresse et le port de votre Serveur, (serveurSSH.com , 22 par exemple).

Notons qu'il est aussi utile de sauvegarder votre session SSH pour ensuite pouvoir établir le tunnel avec un simple double-clique.

Dans le menu de gauche, allez dans Connection, SSH, Tunnels. Dans Source Port, entrez 7373 et cochez Auto et Dynamic. Cliquez ensuite sur Add. Vous devriez voir D 7373 dans la case de Forwarded ports.

Ceci nous permet d’ouvrir une connexion sur notre Serveur SSH et d’envoyer toutes les requêtes locales sur notre Client au port 7373 vers le tunnel.


Configuration de Firefox

Aller dans Edit et Preferences(Linux) ou bien Tools et Options (Windows), dans la section Advanced et l’onglet Network, Cliquer sur Settings.
Sélectionner Manual Proxy Configuration.
Laissez tous les proxys vides, sauf le SOCKS Host, entrez localhost et le port 7373. Sélectionnez SOCKS v5 et faites ok.

Petit détail : Les requêtes DNS ne sont pas par défaut envoyées par le proxy. Pour ajouter les requêtes DNS (un sniffer ne pourrait ainsi pas savoir quels sites vous visitez), écrivez about :config dans votre barre d’adresse et trouvez network.proxy.socks_remote_dns. Mettez le à true pour faire passer vos requêtes par le proxy SOCKS .

Configuration de Pidgin

Pour Pidgin, vous devez aller dans Tools, Preferences, onglet Network.
Dans Proxy server, sélectionnez le proxy type SOCKS 5, host : localhost port :7373 , aucun utilisateur ou mot de passe.


Exemple de données Interceptées

Sans Tunnel
Pidgin (on envoie un message)

Firefox (on visite Slashdot)

Encrypte

Versions Portables

Pas de laptop? Vous pouvez mettre un Firefox préconfiguré sur une clée USB, avec Pidgin et PuTTY. Vous pourrez ainsi exécuter ces applications à partir de votre clée USB en passant par une connexion sécurisée vers votre serveur SSH.
http://portableapps.com/
Personellement, j'ai installé PuTTY, Pidgin, Firefox, NotePad++ et WinSCP, ce qui prend environ 36 megs.