| Auteurs | : | Nelly Lacroix |
| Date de parution | : | 14 septembre 2008 |
| Dernière modification | : | 31 octobre 2008 |
Les élèves de Université Joseph Fourier de Grenoble peuvent accéder à leur compte à l’aide d’un accès SSH.
Ce compte leur permet d’accéder à leur fichier et/ou de lancer des programmes sur le serveur.
Il se trouve que pour travailler, ils ont aussi besoin d’accéder à l’intranet de l’UJF qui n’est accessible en HTTP que depuis le réseau de l’UJF (depuis le serveur accessible en SSH par exemple).
Le but de cette article est de proposer une solution afin de pouvoir accéder à l’intranet de l’UJF en utilisant l’accès SSH à disposition de chaque étudiant.
SSH est un outil très riche en possibilités. Il nous permet d’ouvrir un shell pour lancer des commandes à distance mais permet aussi de faire des tunnels afin de rediriger de flux réseau à travers la connexion SSH.
Bonus ultime, il permet de créer un proxy SOCKS local qui ressort à l’autre bout du tunnel SSH. En gros, il démarre un proxy SOCKS sur le serveur en SSH et redirige un port local vers le proxy SOCKS distant.
On ne va pas rentrer dans l’explication de ce qu’est un proxy SOCKS mais ce qu’il faut savoir ce qu’une application comme FireFox (le navigateur Internet) peut utiliser un proxy SOCKS. Dans cette configuration, FireFox ne va pas chercher les pages web directement sur Internet mais demande au proxy de le faire à sa place. Si ce proxy se trouve sur le réseau de l’UFR, c’est comme si FireFox était lancé à UFR.
C’est ce que nous allons utiliser. Lancer le proxy SOCKS avec SSH et configurer notre navigateur web FireFox pour passer par ce proxy.
Comment utiliser ce principe sous Linux (ici Ubuntu mais c’est pareil sous les autres systèmes Linux).
Cette phase est optionnel mais peut être pratique. En effet, pour ce connecter en SSH à l’UJF, il suffit de lancer la commande suivante dans un Terminal :
user@pc:~$ ssh utilisateur@mandelbrot.e.ujf-grenoble.fr
Password:
Linux mandelbrot 2.6.20.1 #1 SMP Thu Feb 22 12:31:07 CET 2007 i686
Last login: Sun Sep 12 10:00:00 2008 from myadslip.myprovider.com
mandelbrot:~> Evidemment, il faut remplacer utilisateur par votre compte utilisateur. On remarque ensuite que le serveur SSH demande votre mot de passe de l’UJF qu’il faut renseigner.
Comme tout bon informaticien qui se respecte est un flémard, cette étape va consister à mettre en place une solution pour ne pas avoir à taper son mot de passe en permanence.
Pour cela, on peut utiliser l’authentification par clef publique et clef privé.
En gros, vous devez posséder une paire de clef (une secrète et une publique). Vous placer votre clef publique sur votre compte à l’UJF dans la liste de personne autoriser à ce connecter sur votre compte et lorsque vous aller vous connecter en SSH, votre client SSH va utiliser la clef privé pour signer quelque chose que le serveur SSH de l’UJF va déchiffer avec votre clef publique afin de vous identifier.
On passera sur le détail ici mais voici ce qu’il faut faire si vous voulez utiliser cette technique.
Générer une clef publique et une clef privé pour votre compte utilisateur Linux. Pour cela, il faut ouvrir un terminal et taper la commande suivante :
user@pc:~$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_dsa): /home/user/.ssh/id_dsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_dsa.
Your public key has been saved in /home/user/.ssh/id_dsa.pub.
The key fingerprint is:
00:11:22:33:44:55:66:77:88:99:00:aa:bb:cc:dd:ee user@pcLa passphrase est un mot de passe pour protéger votre clef privée. En effet, si on vous vole le fichier id_dsa, on peut alors usurper votre identité. Si vous utiliser une passphrase alors elle sera chiffrée. Mais vous aurez besoin de taper ce mot de passe quand vous voudrez utiliser votre clef privée.
Pour ne pas avoir à taper de mot de passe, laisser le champ vide. Je vous conseille quand même de mettre un mot de passe, on ne sait jamais.
Il faut maintenant mettre votre clef publique sur le serveur de l’UJF dans le fichier .ssh/authorized_keys2, ce que vous pouvez faire à l’aide des commandes suivantes :
user@pc:~$ cd .ssh
user@pc:~/.ssh$ scp id_dsa.pub utilisateur@mandelbrot.e.ujf-grenoble.fr:~
Password:
id_dsa.pub 100% 601 0.6KB/s 00:00
user@pc:~/.ssh$ ssh utilisateur@mandelbrot.e.ujf-grenoble.fr
Password:
Linux mandelbrot 2.6.20.1 #1 SMP Thu Feb 22 12:31:07 CET 2007 i686
Last login: Sun Sep 12 10:00:00 2008 myip.myprovider.com
mandelbrot:~> mkdir .ssh
mandelbrot:~> mv id_dsa.pub .ssh/authorized_keys2
mandelbrot:~> chmod 700 .ssh
mandelbrot:~> chmod 600 .ssh/authorized_keysMaintenant, vous pouvez vous connecter en SSH à l’UJF sans avoir à taper votre mot de passe de l’UJF (en effet, si vous avez mis une passphrase, il faudra la taper).
Passons maintenant aux choses sérieuses. La mise en place du tunnel SOCKS vers l’UJF.
Pour cela, rien de très compliqué, il suffit de lancer la commande suivante dans un terminal :
ssh -D 1080 utilisateur@mandelbrot.e.ujf-grenoble.frJe vous propose de créer un lanceur dans votre barre de menu Gnome car il faudra lancer cette commande (et ne pas la quitter) à chaque fois que vous voudrez accéder à l’UJF.
Voici ce que cela peut donner avec un lanceur :

Une fois la commande SSH lancée, vous avez un service SOCKS disponible sur votre machine et accessible sur le port 1080 (peut être changé à votre convenance dans la commande SSH).
Il n’y a plus qu’à configurer FireFox pour l’utiliser. Pour cela vous devez accéder à la configuration du proxy en passant par :
Edition > Préférences > Avancé > Réseau > Paramètres...
Ce qui doit vous amener sur la boîte de dialogue suivante :

L’important est d’utiliser une configuration manuelle du proxy et de renseigner l’Hôte SOCKS avec 127.0.0.1 et le port 1080.
Cela devrait fonctionner mais pour ne pas avoir de problème, il faut aussi que la résolution DNS se fasse côté UJF.
Pour cela, vous devez taper about:config dans la barre d’adresse, faire une recherche sur dns et passer la valeur de network.proxy.socks_remote_dns à true pour obtenir quelque chose comme cela :

Normalement, vous devez pouvoir accéder sans problème à l’adresse http://www-ufrima.imag.fr/ et à l’intranet.
Par contre, lorsque vous utilisez le proxy SOCKS sous FireFox, vous ne pouvez plus surfer tranquillement chez vous.
Pour revenir comme avant, il faut alors désactiver le proxy dans FireFox.
Comme cette tâche peut devenir pénible, je vous conseille d’installer l’extension QuickProxy qui permet avec un simple clic, d’activer ou de désactiver le proxy. Pour cela, passer par le gestionnaire d’extensions de FireFox :

Utilisateur de Windows ne pleurez pas. Il y a aussi une solution pour vous. Elle s’appelle Putty.
Télécharger putty, exécutez le et renseignez les champs comme ci-dessus :

Paramétrer le tunnel et SOCKS en allant dans Connection > SSH > Tunnels pour renseigner Source port avec la valeur 1080, la Destination avec Dynamic et cliquer sur Add pour obtenir :

N’oubliez pas d’enregistrer votre session en lui donnant un nom pour ne pas recommencer à chaque fois.
Si vous avez besoin du déport X11, vous pouvez aussi modifier l’option correspondante.
Pour la configuration de FireFox, faite la même chose que pour Linux. Vous pouvez aussi utiliser les clefs publiques et privés pour ne pas avoir de mot de passe, mais pour cela débrouiller vous tout seul.
Pourquoi fonctionner comme cela ? En effet, il était préconisé de se connecter en SSH sur le serveur de l’UJF et de lancer FireFox avec un déport X11.
Le problème dans ce type de configuration, c’est que cela consomme beaucoup de ressource sur le serveur pour faire fonctionner toutes les instances de FireFox, mais cela consomme aussi énormément de bande passante réseau pour faire passer les ordres de dessin X11.
Résultat, c’est lent et cela fait ramer tout le monde. Je vous déconseille donc d’utiliser cette méthode pour le bien de tous.