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
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.
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.
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 :
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.
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.
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
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.
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”.
Et puis connectez-vous en cliquant sur le bouton “Open”.
Testé avec PuTTY 0.62 sur Windows 7 et Windows 8.
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.
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.
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 :
Exemple pour Firefox Mobile sur 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.
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.
Si vous attendez une réponse ou afin de rapporter un problème, contactez-moi plutôt par courriel.