Mettre en place un tunnel HTTP

29 avril 2009 par Alexandre VIOT Laisser une réponse »

Dans cet article, nous allons mettre en place un tunnel HTTP entre un client et un serveur Linux grâce au service SSH afin de sécuriser nos transactions à travers un pare-feu ou autre.

Avant de commencer toute partie technique, je vais essayer de vous expliquer le fonctionnement du Port Forwarding et pourquoi le mettre en place.

Pour bien comprendre cette notion, un petit rappel sur le mode de communication entre les ordinateurs est peut être nécessaire:

Afin de s’échanger des informations, les ordinateurs ont besoin d’une adresse IP ainsi que d’un numéro de port.  Le numéro de port est très important car c’est grâce à lui que la communication va pouvoir se faire. Le client et le serveur doivent communiquer sur le même numéro de port pour s’entendre.

Prenons  un exemple de la vie quotidienne : si vous décidez de rendre visite à une personne dans un immeuble, vous avez son adresse postale (Adresse IP) et son numéro d’appartement (Port). Si vous vous trompez de numéro d’appartement, la communication ne pourra pas se faire.

Déchiffrons maintenant le terme de Port Forwarding ou Redirection de Port en français. Le Port Forwarding consiste à rediriger les informations envoyées sur un port  d’un ordinateur vers un port différent de l’ordinateur distant.

Une image pour mieux comprendre cette redirection :

translation2

Dans cet exemple, le port 6000 du client sera encapsulé sur le port 22. Lorsque la requête arrivera sur le serveur via le port 22, elle sera décapsulée et envoyées sur le port 80.

Pour simplifier, le port Forwarding consiste à échanger le port de communication via un autre port.

Pourquoi le mettre en place

On peut se poser la question de pourquoi le mettre en place. Le Port Forwading avec SSH est utile lorsque vous voulez une sécuriser communication entre deux ordinateurs.

Vous avez peut être dans votre entreprise un pare-feu qui n’autorise que le port 22 et vous devez accédez au serveur FTP interne de la société. Ou  tout simplement un filtrage de vos requêtes HTTP (Websense, SurfControl) et vous voulez le contourner, mais esquiver ce contrôle reste sous votre entière responsabilité.

Comment communiquent les informations, avec et sans Port Forwarding ?

schemahttptunneling1

Explication,

Le chemin bleu (1) est la communication en temps normal. Lorsque vous demandez une page, votre requête est filtrée par le pare-feu puis redirigé vers internet. Si le site est dans la blacklist, alors l’accès vous sera refusé.

Le chemin rouge (2) est la communication par la redirection de port. Votre demande internet est encapsulée dans un tunnel  complètement sécurisé puis est envoyée sur votre serveur distant.

Le fait de chiffrer la transaction entre votre pc et le serveur signifie que le firewall ne pourra pas filtrer votre demande.

Une fois que le serveur distant a reçu votre requête,  il va aller à votre place chercher sur internet la page web et vous la renvoyer en connexion sécurisée.

Résultat :D es échanges sécurisés entre les deux hôtes, impossible de lire le contenu.

Comment mettre en place

J’ai utilisé pour rédiger cet article une distribution Debian, mais cette solution a également été testée sous une distribution Mandriva.

Voici les équipements nécessaires :

- Un serveur Linux

- Un client sous Microsoft Windows

- L’utilitaire Putty

La configuration du serveur se décompose en 4 étapes :

  1. Installation d’OpenSSH
  2. Génération des certificats pour SSH
  3. Configuration du fichier
  4. Création d’un utilisateur

Et la configuration du client en 2 étapes.

  1. Configuration de l’utilitaire Putty
  2. Configuration du navigateur Internet

Configuration du serveur

Installation d’OpenSSH

La redirection de port étant basée sur le protocole SSH, la première chose à faire est d’installer l’utilitaire Openssh.

apt-get install openssh-server

Note : N’oubliez pas mettre à jour vos dépôts avec la commande :

apt-get update
Génération des certificats pour SSH

Une fois le service installé, il est nécessaire d’avoir des certificats pour la connexion soit valide.

Un certificat contient une clef privée et une clef publique qui vont vous permettre de chiffrer vos communications.

Lors de l’installation, il est possible que la génération des certificats se soient fait automatiquement. Mais pour plus de sécurité nous allons en recréer.

Nous allons générer deux types de certificats, un DSA et un RSA, qui sont deux algorithmes de chiffrement. Ils seront générés grâce à l’utilitaire ssh-keygen.

Pour créer les certificats :

ssh-keygen -t dsa -b 1024
ssh-keygen -t rsa -b 1024

Le système vous demande ensuite de préciser le chemin et le nom pour les certificats. Je vous conseille de les mettre dans /etc/ssh

Configuration du fichier SSH

Maintenant que le service est installé et que les certificats sont créés, il faut modifier le fichier de configuration de ssh pour accepter les tunnels et modifier le chemin des certificats.

Il ne faut pas oublier que notre serveur peut également se connecter sur une machine distante en SSH. Il sera donc client à son tour.

C’est pour cela qu’il existe deux fichiers de configurations pour SSH : un fichier nommé ssh_config pour la connexion cliente et un fichier sshd_config qui va nous permettre de configurer notre serveur SSH.

Nous modifions donc le fichier sshd_config

vi /etc/ssh/sshd_config

Dans un premier temps, nous allons spécifier les nouveaux certificats que nous venons de créer.

Pour cela modifier les lignes qui contiennent HostKey en précisant vos certificats.

# HostKeys for protocol version 2
HostKey /etc/ssh/certifLaboIT
HostKey /etc/ssh/certifLaboITdsa

Pour autoriser SSH à faire du Tunneling, rajouter cette commande à la fin du fichier :

#Permit Tunnel
PermitTunnel yes

Il est également possible de changer le port d’écoute du serveur. Au cas où le port 22 serait bloqué par un pare-feu.

Il faut pour cela modifier la ligne contenant le mot :

#What ports, IPs and protocols we listen
Port 22

Quittez l’éditeur Vim en n’oubliant pas de sauvegarder vos modifications.

La configuration de SSH est désormais terminée.

Il ne reste plus qu’à redémarrer le service avec  la commande:

/etc/init.d/ssh restart
Création d’un utilisateur

Pour éviter de se connecter avec le compte root sur le serveur, nous allons créer un autre utilisateur.

useradd LaboIT
passwd LaboIT

La configuration du serveur est désormais terminée. Nous pouvons maintenant passer à celle du client.

Configuration du Client

Il faut bien comprendre ce que nous allons faire par la suite.

Dans un premier temps, nous allons configurer Putty pour qu’il écoute sur un port non utilisé (par exemple le 9999) puis nous allons ouvrir une connexion SSH vers le serveur. Cela va créer le port Forwarding.

Dans un second temps, nous spécifierons à notre navigateur web d’envoyer toutes nos requêtes vers ce nouveau port.

Toutes les requêtes du client seront donc encapsulées dans un tunnel par Putty dynamiquement pour passer par le chemin rouge (2) vu plus haut.

Configuration de l’utilitaire Putty

Vous pouvez télécharger Putty à cette adresse : http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

La configuration de l’exécutable Putty se fera en 2 étapes :

  1. Renseignement de l’adresse IP du serveur et de son port d’écoute.
  2. Création sur le client d’un nouveau port dynamique.

Pour la première étape, nous allons renseigner les informations de connexion :

putty1

Spécifiez dans la case rouge l’adresse IP ou le FQDN du serveur. Puis dans la case jaune, indiquez le port qui se trouve dans votre fichier de configuration sshd_config

Deuxième étape, Création du nouveau port :

putty2

Pour créer un port dynamique, vérifiez que l’option Dynamic soit sélectionnée puis dans le champ Source port indiquez 9999. Une fois ceci fait, cliquez sur Add pour l’ajouter dans les Forwarded Ports.

Pour ouvrir la connexion au serveur distant,  cliquez sur le bouton Open.

Bien sur, vous devez spécifier un couple utilisateur/password valide lors de la connexion au serveur.

Configuration du navigateur Internet

Voici la dernière étape, qui de plus, est la plus facile.

Vous devez indiquer à votre navigateur web préféré par où il doit sortir. En effet, il ne doit plus utiliser  le chemin bleu (1) mais le rouge (2).

Il faut que l’on change l’adresse de Hote SOCKS. Cette information est généralement dans les paramètres de connexion.

Pour l’adresse de connexion hôte, spécifiez 127.0.0.1, c’est votre PC. Et en port, vous devez indiquez 9999, celui qu’on a renseigné plus haut.

proxyconfig

Vous n’avez plus qu’à valider les changements et de vous rendre sur vos sites favoris.

N’oubliez pas que si votre entreprise a mis en place un filtrage, c’est pour une bonne raison. Donc n’en abusez pas. Vous êtes le seul responsable de vos actes

Publicité

Laisser un commentaire