Communiquer par un tunnel crypté SSH avec votre serveur comme relai (depuis Linux)

tunnelierLorsque vous êtes en déplacement, connecté en wifi à une borne gérée par on ne sait qui, il est délicat d’accéder à vos comptes bancaires ou votre messagerie en ayant l’esprit tranquille.

En effet, rien n’empêche le propriétaire du point d’accès de surveiller tous les échanges sur cette borne, ou un pirate de sniffer les communications.

Il est possible d’utiliser votre serveur qui tourne à la maison, (voire même un serveur kimsufi, dédibox, ou autre), comme relai pour vos communication, à la fois pour la navigation web et pour les mails. L’important étant que vous ayez confiance dans la machine qui va vous servir d’intermédiaire et du réseau sur lequel elle est connectée.

L’avantage, c’est que c’est rapide et simple à mettre en place, même au dernier moment.

Précisions

Un tunnel ssh ne permet de passer que des protocoles basés sur TCP, au contraire d’un VPN qui permet de transporter tout type de trame IP et non IP en plus d’apporter un routage complet. Ce n’est donc pas un VPN au sens réel du terme, mais cela va vous permettre d’utiliser la sécurité du SSH sur la partie du réseau qui n’est pas fiable.

Creusons le tunnel

Votre ordinateur relai devra, bien évidemment, avoir un serveur SSH accessible depuis l’extérieur. L’idéal étant de pouvoir s’y connecter par clef plutôt que par mot de passe, ce qui vous permettra de fermer l’authentification par clef et de limiter les attaques. Mais les deux fonctionnent.

Je vous laisser lire la documentation pour mettre en place un serveur ssh si vous ne savez pas encore le faire.

Nous allons donc lancer une connexion vers notre serveur, et « binder » (lier) cette connexion à un port local afin que tout ce qui arrive sur le port local soit transféré sur la connexion SSH (et vice versa). Dans un terminal, qu’il faudra laisser ouvert tout le temps de la session, entrez ceci:

ssh -D 1234 utilisateur@serveur_relai

Un man ssh vous donnera plus de détails sur le fait que l’option -D fait que SSH se comporte comme un serveur SOCKS et vous rappellera que seul root peut utiliser les ports privilégiés. Nous utilisons arbitrairement le port 1234, mais vous pouvez utiliser n’importe quel port local supérieur à 1024 (lancé par un utilisateur non root) à condition qu’un service ne tourne pas déjà sur ce port.

Si votre serveur ssh ne tournait pas sur le port par défaut, vous pourrez alors utiliser cette commande en précisant le port de votre serveur:

ssh -D 1234:port_ssh utilisateur@serveur_relai

par exemple

ssh -D 1234:443 utilisateur@serveur_relai

ou

ssh -D 1234 -p 443 utilisateur@serveur_relai

Si vous fermez le terminal dans lequel vous avez ouvert le tunnel, la communication serait fermée et vos logiciels ne pourraient plus sortir. Il faudra donc ne pas le fermer tout le temps de la session.

Hey Ho, Hey Ho, on rentre … dans le tunnel

Maintenant que nous avons créé notre tunnel, il faut indiquer aux logiciels de l’utiliser.

Par exemple, pour firefox:

menu Édition > Préférences > Avancé > Réseau > Paramètres

Utilisez un proxy SOCKS qui est donc votre ordinateur (point de départ de la connexion SSH) sur le port indiqué (1234 dans ce cas) tel que ci dessous

Paramétrage pour Firefox

Pour vous convaincre que vous passez par votre serveur et non par la connexion wifi en cours, allez visiter un site comme http://www.monip.org/ qui vous montrera votre adresse IP externe. Si votre serveur a une IP fixe, vous reconnaitrez facilement votre IP. Sinon, visitez le site, un coup sans proxy, un coup avec, et vous verrez que l’ip n’est pas la même.

Par exemple, pour thunderbird:

Les avantages de cette solution, pour envoyer du mail, sont:

  • vous n’aurez pas à modifier le serveur SMTP d’envoi à chaque fois, même si des extentions existent pour compenser ce problème.
  • pas d’interception de vos mails par un éventuel proxy ou sniffer sur le réseau
  • l’adresse IP d’expédition est celle de votre serveur, pas celle de votre emplacement actuel (vie privée respectée)

Rendez vous à menu Édition > Préférences > Avancé > Réseau et espace disque > Paramètres et paramétrez tel que sur l’image suivante:

Paramétrages de mozilla thunderbird

Lorsque vous enverrez un mail, il passera par le tunnel et sera donc réellement envoyé par votre serveur relai vers votre propre fournisseur d’accès, indépendamment du FAI depuis lequel vous êtes actuellement connecté.

Pour les autres logiciels:

Le principe du paramétrage est identique aux exemples ci dessus. Cherchez dans leur configuration comment utiliser un proxy socks.

Ça peut aussi ne pas fonctionner!

En effet, si un proxy est paramétré sur votre réseau (pas chez vous, là où vous êtes connecté) et qu’il ne laisse pas passer le ssh, vous êtes bloqué. Mais il existe parfois des solutions:

  • Si le blocage du ssh est dû aux ports qui sont autorisés, il vous faudra mettre votre serveur ssh (chez vous) en écoute sur un de ceux ci. Il y a de fortes chances pour que le http et le https soient autorisés (sinon le proxy ne servirait à rien, autant débrancher le câble…).
  • Si le blocage est dû à l’analyse des flux par le proxy et que le ssh est refusé, il faudra passer par un tunnel http dans lequel vous ferez passer un tunnel ssh (ou ce que vous voudrez). Vous pouvez utiliser l’excellent http-tunnel qui vous sortira de l’impasse.
  • Si le proxy utilise un filtrage applicatif en plus du reste… c’est que l’admin est un acharné et que vous n’arriverez pas à sortir par cette voie.

Notez qu’il est possible de faire la même chose avec putty et Windows mais je vous laisser faire ça seuls, n’ayant plus de licence depuis longtemps, et encore moins l’envie de me salir les mains avec ça.

A lire aussi:

Articles en relation:

  1. 15 juin 2010 à 22:38:42 | #1

    J’ai fais aussi un post sur ce sujet à cette adresse : http://keldan.phamily.fr/wp/2009/12/31/tunnel-ssh-a-travers-un-proxy-http/

  2. 16 juin 2010 à 07:56:27 | #2

    Je n’ai peut être pas tout compris, mais tu ne dis jamais a ssh de passer par un proxy, hors si dans ton contexte tu passe par le proxy d’un presta tiers (hotel, fast-food, …) il va falloir lui dire. non ?
    Cette commande ne fonctionnera que si ton poste a un accès direct vers le Net.

  3. 16 juin 2010 à 09:04:15 | #3

    Tu as raison. Je voulais en parler, puis ça m’est sorti de l’esprit vu que je n’en ai pas le besoin pour mon usage.
    Ton article vient compléter et approfondir le mien, donc c’est parfait.

  4. 17 juin 2010 à 07:57:09 | #4

    …articles intéressants (Manu + Keldan) ; ça me donne vraiment envie de m’installer vite fait bien fait un serveur chez moi et de tester tout ça !
    😉

  5. Marco
    17 juin 2010 à 14:46:50 | #5

    Très bien fait cet article.
    Par contre autant ça fonctionne avec Firefox, mais pas moyen avec Thunderbird pour moi. Est-ce que c’est parce que j’utilise un smtp avec authentification ?

  6. nyquist
    24 juin 2010 à 13:09:26 | #6

    J’aime cette solution ssh (associé ou non a corkscrew pour passer un proxy d’entreprise).

    personnellement j’ai mis en place un squid comme proxy relais pour passer le proxy ce qui est finalement assez lourd au niveau ressources et reste transparent pour l’admin réseau.

  7. mbmk92
    23 novembre 2013 à 21:34:32 | #7

    Cet article es super pour mon projet tutoré! Mais je n’arrive pas à accéder a ton article keldan? puis je avoir une autre source ou liens?

  1. Pas encore de trackbacks

Anti-Spam Quiz:

antibot * Time limit is exhausted. Please reload the CAPTCHA.

3.80.85.76