par Alexandre Alapetite le 2012-07-01 ; mise-à-jour 2012-07-06

Tunnel SSH pour HTTP(S)

Utiliser un tunnel SSH pour HTTP(S) au lieu d’un VPN ou proxy, pour changer d’IP, avoir IPv6, sécuriser sa connexion Web, ou comprimer les données
English

Introduction

Pas de VPN

J’ai migré mon serveur Linux personnel (surtout Web) sur une machine virtuelle OpenVZ dont les fonctions VPN sont désactivées par mon hébergeur (OVH Virtual KS).
De plus, je n’avais pas réussi à obtenir convenablement l’IPv6 par VPN avec mon précédent serveur. Le VPN n’est pas une option donc.
Les proxys HTTP classiques ne sont pas une option non plus car ils ne prennent pas en charge les requêtes DNS, ni toujours HTTPS.

Besoin de changer d’IP pour le Web

Mais étant au moment d’écrire ses lignes au Danemark, qui ne propose pas IPv6 aux particuliers actuellement, j’ai besoin d’un tunnel quelconque quand il me faut IPv6, et aussi d’une IP française comme requise par certains services en ligne non-neutres. Cela permet aussi de d’éviter les filtres et de gagner en confidentialité dans certaines situations.

Solution en SSH

La solution présentée dans cet article a l’objectif d’être aussi simple que possible, tout en restant basée entièrement sur des logiciels libres très courants. Cela repose sur les standards SSH, et SOCKS version 5 (afin de prendre en charge UDP pour les requêtes DNS et IPv6). Il faut :

  1. Un serveur (Linux) avec un accès SSH
  2. Un client SSH pour faire un tunnel (disponible sur Linux, Windows, Android…)
  3. Un navigateur Web supportant SOCKS 5, tel Firefox

Sommaire


Configurer le serveur SSH

Tout commence par une machine physique ou virtuelle à laquelle vous avez un accès administrateur et/ou SSH. Cette machine doit disposer d’un accès Internet qui est mieux que de l’autre bout du tunnel (par exemple en termes de confidentialité, de localité géographique de l’adresse IPv4 ou IPv6, d’accès IPv6, ou d’accès à certains réseaux privés).

Il faut noter votre nom d’utilisateur, ainsi que l’adresse de ce serveur, afin de pouvoir fournir ces informations aux étapes suivantes au format vous@votre.serveur.example.

Serveur SSH pour Linux avec OpenSSH

Une majorité de serveurs Web bon-marché à louer tournent sous Linux, et la majorité des distributions Linux (Debian, Ubuntu, Gentoo, Red Hat, Mandriva…) incluent de base un serveur OpenSSH, auquel cas tout est prêt, et peu ou pas de configuration supplémentaire est nécessaire :

/etc/ssh/sshd_config

# C’est aussi la valeur par défaut
AllowTcpForwarding	yes

Testé sur Ubuntu 12.04.

Sommaire

Configurer le client SSH

Il faut ensuite établir une liaison SSH avec tunnel sur votre client. Je présente ci-dessous une approche simple pour 3 différentes plateformes (Linux, Windows, Android), et il suffit de suivre celle d’entre elles qui vous concerne.
J’utilise le port local 8081, mais vous pouvez le changer pour une autre valeur entre 1024 et 65535, en évitant les ports trop utilisés.

Pour fermer une session SSH, taper dans le client [Ctrl]+[D], ou bien :

exit

Client SSH pour Linux avec OpenSSH

Pour ceux sur Linux, utiliser OpenSSH (qui est préinstallé dans la majorité des cas) avec la commande suivante :

ssh -D 8081 vous@votre.serveur.example

Approprié pour les connexions lentes uniquement, il est possible d’activer la compression des données :

ssh -D 8081 -C vous@votre.serveur.example

D’autres options permettent d’optimiser l’usage du tunnel (f, n, N, q, T). Voir la documentation :

man ssh

Testé sur Ubuntu 12.04.


Sommaire

Client SSH pour Windows avec PuTTY

Pour ceux sur Microsoft Windows, PuTTY est le logiciel de choix.

Dans la partie “Session”, inscrire l’adresse de votre serveur. Puis dans “Connection / SSH / Tunnels”, ajouter le port 8081 en mode dynamique.
Approprié pour les connexions lentes, il est possible d’activer la compression des données dans “Connection / SSH”.

[PuTTY session] [PuTTY tunnel] [PuTTY compression]

Et puis connectez-vous en cliquant sur le bouton “Open”.
Testé avec PuTTY 0.62 sur Windows 7 et Windows 8.


Sommaire

Client SSH pour Android avec ConnectBot

Pour ceux sur Google Android, ConnectBot – qui est disponible sur Android Market / Google Play – est l’application qu’il faut.

Au lancement, ajoutez un serveur SSH au format vous@votre.serveur.example, et puis déconnectez-vous. Avec un clic prolongé sur la nouvelle ligne représentant votre serveur, sélectionnez “Éditez les redirections de port”, puis la touche menu, puis “Ajouter une redirection de port”.

Renseigner le formulaire comme visible sur la capture d’écran ci-dessous, avec un nom quelconque dans “Pseudo”, “Type” Dynamique (SOCKS), “Port source” 8081, “Destination” vide.

[ConnectBot redirection port]

Il est possible d’activer la compression des données avec un clic prolongé sur la ligne représentant votre serveur, puis “Éditer le serveur / Compression”.

Et puis connectez-vous à nouveau, et laissez ConnectBot tourner en arrière-plan et appuyant sur votre touche maison.
Pensez à fermer votre connexion puis quitter ConnectBot lorsque vous n’en n’avez plus besoin.

Testé avec ConnectBot 1.7.1 sur Android 4.0.3.

Sommaire

Configurer le navigateur Web

J’ai sélectionné Mozilla Firefox comme navigateur Web pour cette configuration, car il est le seul à supporter SOCKS 5 et à fournir les réglages nécessaires par défaut, sans extension nécessaire. De plus, cette manœuvre fonctionne à la fois avec Firefox pour ordinateur de bureau (Windows, Linux), et avec Firefox Mobile (Android).

Aller dans les paramètres avancés via about:config, chercher network.proxy, et mettre les valeurs suivantes :

network.proxy.socks (Addresse du tunnel qui est local)
127.0.0.1
network.proxy.socks_port (Port du tunnel local)
8081
network.proxy.socks_remote_dns (Utilisation du tunnel aussi pour les requêtes DNS)
true
network.proxy.type (Configuration manuelle. Mettre à 0 pour repasser en automatique et désactiver le proxy)
1

Exemple pour Firefox Mobile sur Android :
[Firefox Proxy Android]

Afin de ne pas avoir à changer les réglages manuellement et pour garder des cookies cohérents, j’utilise un navigateur exclusivement pour cette configuration avec tunnel, et un autre navigateur pour la navigation normale. Sur Android, j’utilise Firefox Mobile beta pour jouer ce rôle.

Sommaire

Conclusion

Et voilà !
Vous pouvez maintenant accéder au Web avec l’IP de votre serveur, et avec une liaison sécurisée entre votre client et votre serveur.

Pour la navigation Web (HTTP), les tunnels SSH sont une alternative légère, facile, et efficace face aux VPN (plus lourds et pas toujours possibles) et proxy HTTP (qui ne font pas le DNS et pas forcément HTTPS), en particulier comme solution temporaire d’appoint pour un utilisateur.
Cette solution peut être utilisée sans droits administrateur sur la machine client, et les logiciels requis existent en version clef USB si nécessaire.

Sommaire

Commentaires

Si vous attendez une réponse ou afin de rapporter un problème, contactez-moi plutôt par courriel.

object : voir les commentaires

http://alexandre.alapetite.fr

Retour