Mes passions, le boulots, mes coups de gueule...




Raspberry Pi : Création d’un tunnel TCP/IP via SSH

Catégories : Geek, Informatique, Mac, Raspberry Pi · par 24 Avr 2015

Introduction

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 firewall pourrait bloquer des ports de communication nécessaires à certains services (https, vnc, mail, …).
  • Le proxy pourrait filtrer certaines requêtes ou l’accès à des sites blacklistés (facebook, twitter, youtube, …).
  • Le trafic de données pourrait être « écouté » entre votre ordinateur et le gateway.

Solution

SSH

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

Tunnel

Situation normale

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.

Tunnel-SSH-01

Blocage

Dans certaines situations, un firewall pourrait bloquer certains ports ou filtrer les requêtes vers certains sites.

Tunnel-SSH-02

Ici, on bloque par exemple les requêtes vers http://www.facebook.com

Mise en place

Redirection vers un port local sur le serveur

Principe

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).

Tunnel-SSH-03

Commandes

$ 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é.

Configuration du client

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

Tunnel-SSH-04

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.

Tunnel dynamique

Principe

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.

Tunnel-SSH-05

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.

Commandes du Terminal

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.

Configuration du Proxy

Proxy Navigateur

Pour Firefox : Préférences > Avancé > Réseau > Paramètres…

Tunnel-SSH-06

Dans le champe Hôte SOCKS : localhost et le port défini ici plus haut.

Tunnel-SSH-07

Proxy Général

Sous OS X :  > Configuration réseau > Préférences Réseau > Avancé > Proxys > Cocher : Proxy SOCKS

Tunnel-SSH-08

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.