Travailler depuis chez vous avec UNIX

Pour des raisons de sécurité, certains services ne sont pas accessibles depuis internet. Il est donc nécessaire de se trouver sur le réseau de l'université pour y accéder. Si vous souhaitez travailler depuis chez vous il est possible de faire un tunnel SSH.
Dans cette documentation on utilisera un tunnel SSH pour atteindre le service cloud-info.univ-lyon1.fr.
ssh -L 40443:cloud-info.univ-lyon1.fr:443 p1234567@linuxetu.univ-lyon1.fr
Rapidement:
  • ssh: la commande SSH
  • -L [numéro de port sur sa propre machine]:[nom de la machine inaccessible]:[port du service sur la machine inaccessible]
  • [login]@[nom de la machine accessible sur internet]
Vérification:
curl -k "https://localhost:40443/horizon/auth/login/?next=/horizon/"

Un tunnel? Kézako?

Pour répondre à cette question, on peut utiliser les véritables tunnels. Dans le monde réel un tunnel est une route entre 2 points qui facilite grandement le trajet. On peut faire un tunnel pour traverser une montagne ce qui nous permettra d'éviter de la gravir.

Une situation problématique

Une situation résolue

Le tunnel est donc un moyen de s'affranchir de certaines contraintes physiques, il permet de traverser des obstacles de manière transparente. Le souci des tunnels c'est qu'ils ont un coût, il est nécessaire d'avoir les outils afin de pouvoir traverser la montagne...
Revenons sur le monde informatique, la voiture serait votre ordinateur, le drapeau serait le service Openstack cloud-info.univ-lyon1.fr, la montagne symbolise les nombreux fire-walls qui peuvent vous empêcher d'accéder à des services quand vous n'êtes pas sur le campus.

Le même schéma avec des représentations "informatiques".

Pour atteindre le service souhaité, il faut donc trouver un moyen de traverser le fire-wall. Une fois ce moyen trouvé, on pourra établir notre tunnel pour atteindre l'Openstack cloud-info.univ-lyon1.fr. Il est tout trouvé, il s'agit de la machine linuxetu.univ-lyon1.fr, qui est une passerelle SSH, elle est accessible depuis internet et surtout le fire-wall nous autorisera à l'atteindre. On peut actualiser le schéma de la manière suivante:

Il est donc maintenant possible de monter un tunnel entre notre machine et linuxetu. Quand on tentera de se connecter à l'Openstack de l'université, on commencera donc par se connecter en SSH à linuxetu pour passer le firewall, puis on indiquera à notre machine de toujours passer par linuxetu pour atteindre le service Openstack.

Un peu de technique

Maintenant qu'on a compris la théorie, il faut l'appliquer. Pour réaliser la connexion vers linuxetu, on utilisera la commande ssh. En plus de la connexion, elle permet de réaliser le transfert de port local. Cette fonctionnalité permet de dire que toutes les connexions qui utiliseront le port local choisi seront transférées vers un autre port d'une machine distante choisie.
Il est donc nécessaire d'identifier 3 informations:

  • La machine accessible pour monter le tunnel et faire office de rebond
  • Le port qu'on souhaite atteindre sur la machine inaccessible
  • Un port libre qu'on peut utiliser, si non root au dessus de 1023

Explications:

  • -L, le moins grand l indique à la commande ssh qu'on veut utiliser un transfert de port local. La machine qui initie la connexion aura un port attribué en écoute.
  • En jaune, j'ai choisi le port 40443, toutes les requêtes que je vais envoyer sur ce port iront dans le tunnel.
  • En rouge, la machine que je souhaite atteindre mais inaccessible normalement.
  • En gris, le port que je veux atteindre sur la machine inaccessible. Je ne le choisis pas il est généralement imposé par le service que je veux atteindre.
  • En vert, ma machine accessible sur internet, celle que j'utilise pour monter le tunnel qui fera office de rebond.
On peut donc lire -L 40443:cloud-info.univ-lyon1.fr:443 de la manière suivante:
Je veux ouvrir le port 40443 sur ma machine et toutes les connexions qui arriveront sur ce port iront sur le port 443 de la machine cloud-info.univ-lyon1.fr.
Le premier principe à comprendre est que ce qui suit -L est un paramètre qu'on donne à notre commande ssh qui se connectera sur linuxetu.univ-lyon1.fr. Avec ou sans le -L on se connecte quoi qu'il arrive sur linuxetu.univ-lyon1.fr. C'est une information en plus qu'on indique quand on joint linuxetu.
Le second principe, c'est qu'il faut envoyer le traffic souhaité sur son port local et non plus sur l'adresse classique. On utilisera donc son adresse de bouclage 127.0.0.1 ou localhost avec le numéro de port choisi (en jaune). Deux exemples sur comment atteindre cloud-info suite à la connnexion SSH:
  • localhost:40443
  • 127.0.0.1:40443

Démonstration

Vous pouvez tenter de vous rendre sur l'openstack vous devriez avoir un timeout. Dans un terminal vous allez taper la commande suivante (pensez à changer votre login vers linuxetu):

ssh -L 40443:cloud-info.univ-lyon1.fr:443 p1234567@linuxetu.univ-lyon1.fr
Une fois sur linuxetu, vous allez établir une connexion sur votre interface de bouclage sur le port que nous avons choisi pour réaliser la redirection de port(40443).
Si vous avez suivi le tuto, vous pouvez suivre le lien suivant pour vous connecter à Openstack. Vous pouvez observer dans la barre d'URL que l'adresse du site est 127.0.0.1:40443, cela correspond à votre machine et le port choisi plus tôt.
Il est important de garder la connexion SSH active (ne pas fermer le terminal) car le traffic passe par cette liaison. Si on la clôture, le tunnel va se couper et il ne sera plus possible d'atteindre le service distant.

Quelques soucis possibles

Lors de cette manipulation, il est possible de rencontrer 2 soucis:

  • Pour les sites en HTTPS, vous allez avoir un erreur sur le certificat, dans cette situation c'est normal. Le nom du certificat doit correspondre à ce qui est tapé dans la barre d'URL. localhost étant différent de cloud-info, le certificat n'est pas valide. Ici vous pouvez exceptionnellement ajouter le certificat.
  • Si le site web réalise des redirections il se peut qu'il y ait quelques soucis. Il faut donc taper l'URL compléte directement ou bien respécifier le protocole s'il a disparu. Typiquement le https: peut disparaitre lors de la redirection sur le site cloud-info. Il faut donc le remettre à la main.