Lorsque nous nous connectons à internet, la plus part du temps, nous le faisons par l’intermédiaire d’un réseau local. Notre ordinateur n’y est donc pas directement relié. C’est le réseau local qui est connecté à internet par l’intermédiaire d’un gateway (passerelle) qui accomplira probablement aussi des tâches de router, proxy, firewall, …
« Gateway firewall » par Harald Mühlböck — Sous licence CC BY-SA 3.0 via Wikimedia Commons.
Dans certaines situations, il est possible que nous n’ayons pas la main sur la configuration de ces derniers périphériques.
Le SSH (Secure Shell) est un ensemble de programmes et de protocoles qui permettent d’effectuer des connexions sécurisées (chiffrées) entre un client et un serveur.
Par défaut, le SSH est implémenté dans la distribution Raspbian pour le Raspberry Pi.
Il communique sur le port 22 et permet de prendre le contrôle du mini-ordinateur en mode console.
$ ssh login@IP_ou_URL_du_serveur
$ ssh pi@mondomaine.com
Dans un cas idéal, vous êtes connecté sur votre réseau local, vous le savez sécurisé, tous les ports nécessaires sont ouverts et les communications ne sont pas filtrées.
Dans certaines situations, un firewall pourrait bloquer certains ports ou filtrer les requêtes vers certains sites.
Ici, on bloque par exemple les requêtes vers http://www.facebook.com
Il peut-être utile de sécuriser une connexion vers votre serveur. Par exemple pour vous connecter en VNC.
Articles connexes :
En effet, le protocole VNC n’est pas crypté et les informations sont donc échangées en clair.
Pour remédier au problème, nous allons créer un tunnel SSH entre la machine client (port 22) et le serveur (port 22) dans lequel nous allons faire transiter les données VNC (port 5900).
$ ssh -L port-local:HOSTNAME:port-distant login@mondomaine.com
login
étant le nom d’un utilisateur sur le serveur et mondomaine.com
étant l’adresse de l’hôte (IP ou URL).
On aura alors quelque chose comme ceci :
$ ssh -L 5900:localhost:5900 pi@mondomaine.com
Dans ce cas, SSH va écouter le port 5900 sur la machine client, puis va encapsuler et crypter les donnée et les envoyer vers le serveur sur lequel le processus inverse sera opéré.
Une fois la commande validée dans le terminal, on va entrer l’adresse suivante dans la fenêtre de connexion du client : vnc://localhost:5900
Pour refermer/reboucher le tunnel, il suffira de se déconnecter du terminal.
Pour que tout fonctionne correctement, assurez-vous que le Loopback soit activé sur le serveur et que les ports nécessaires soient ouverts dans le firewall.
La solution que nous venons de voir est intéressante pour la confidentialité, mais ne permet la connexion qu’a un seul serveur.
Si nous voulons débloquer le bridage de l’accès à certains sites, nous allons utiliser un tunnel dynamique.
Comme précédemment, nous allons « capturer » les données du navigateur web, les encapsuler avec SSH et les envoyer au Raspberry Pi qui sera ici notre serveur.
Une fois reçues, les données seront désencapsulées par le Rapberry Pi qui transmettra alors les requêtes au serveur web.
Exemple :
Si facebook.com est filtré sur le port 80 du gateway, on encapsule les données en SSH sur le client à partir d’un port à définir et on les fait transiter de manière cryptée par le port 22 jusqu’au RPi. Celui-ci se chargera de les décrypter et d’adresser lui même la requête au serveur de facebook.com . La réponse fera ensuite le chemin inverse.
Dans le Terminal, on utilisera la commande suivante :
$ ssh -D port-local login@mondomaine.com
Soit :
$ ssh -D 1080 pi@mondomaine.com
Le trafic web va être dirigé vers le port 1080 en local grâce à un proxy SOCKS, puis encapsulé par SSH et envoyé vers le RPi.
Pour Firefox : Préférences > Avancé > Réseau > Paramètres…
Dans le champe Hôte SOCKS : localhost et le port défini ici plus haut.
Sous OS X : > Configuration réseau > Préférences Réseau > Avancé > Proxys > Cocher : Proxy SOCKS