{"id":28,"date":"2004-05-06T23:36:41","date_gmt":"2004-05-06T22:36:41","guid":{"rendered":"https:\/\/arliguy.net\/2004\/05\/06\/tunneling-ssh\/"},"modified":"2014-06-03T08:22:21","modified_gmt":"2014-06-03T07:22:21","slug":"tunneling-ssh","status":"publish","type":"post","link":"https:\/\/arliguy.net\/2004\/05\/06\/tunneling-ssh\/","title":{"rendered":"Tunneling SSH – transfert de ports"},"content":{"rendered":"

Le but de ce document est d’expliquer les tunnels SSH. C’est \u00e0 dire comment utiliser SSH pour faire passer diff\u00e9rents protocoles, ce qui permet de s\u00e9curiser la communication (une sorte de VPN software). Si vous souhaitez plus de d\u00e9tails sur les diff\u00e9rentes possibilit\u00e9s, cet article de\u00a0Buddhika Chamith vous \u00e9clairera : SSH Tunneling Explained<\/a>.<\/p>\n

Quand on se connecte \u00e0 Internet depuis un lieu public et si ce lieu de connexion ne permet pas d\u2019acc\u00e9der \u00e0 des ports particuliers d\u2019un serveur (r\u00e8gles de firewall<\/em> restrictives), il est possible d\u2019utiliser un serveur interm\u00e9diaire sur lequel on a un compte utilisateur et qui fait tourner un serveur ssh<\/em>. C\u2019est ce serveur qui se connectera au serveur d\u00e9sir\u00e9. Cette solution va aussi permettre de chiffrer la communication entre le point d\u2019acc\u00e8s et le serveur interm\u00e9diaire.<\/p>\n

Pour r\u00e9aliser cela, on va utiliser un tunnel SSH<\/strong>. Il faut donc que l\u2019on ai acc\u00e8s au port 22 du serveur interm\u00e9diaire, mais dans 90% des cas les firewalls<\/em> laissent sortir le trafic sur ce port.<\/p>\n

Le principe<\/h3>\n

Il faut cr\u00e9er une connexion ssh entre le pc client et le serveur interm\u00e9diaire. Cette connexion (le tunnel<\/em> donc) connectera un port du pc client au serveur interm\u00e9diaire. Celui-ci va lire tout ce qu\u2019il re\u00e7oit depuis cette connexion et re-exp\u00e9dier le tout vers le serveur destinataire.<\/p>\n

attention\u00a0:<\/strong> sous Linux, on ne peut pas connecter le tunnel sur un port local privil\u00e9gi\u00e9 si on n\u2019est pas root<\/em>. Il faut donc prendre un port au dessus de 2000.<\/p>\n

Exemple<\/h3>\n

Je veux lire mes mails par un acc\u00e9s imap<\/em>. Mon serveur imap<\/em> est imap.mail.com<\/tt> et je l\u2019interroge sur le port 143 (le porte par d\u00e9faut IMAP).\u00a0 Mais le firewall<\/em> ne laisse pas sortir les connexions vers le port 143.<\/p>\n

Je vais donc \u00e9tablir un tunnel SSH<\/em> entre le pc que j\u2019utilise et un serveur sur lequel j\u2019ai un acc\u00e9s ssh. Ce serveur s\u2019appelle monserveurssh.com<\/tt> et j\u2019ai un compte utilisateur de login moncompte<\/tt>. Je vais connecter le tunnel<\/em> sur le port 2000 de mon pc client, comme suit\u00a0:<\/p>\n

ssh -2NfC -L2000:imap.mail.com:143 moncompte@monserveurssh.com<\/tt><\/span><\/p>\n

Cette commande ne me connecte pas sur le serveur interm\u00e9diaire, mais me rend la main de suite gr\u00e2ce a l\u2019option -f<\/tt> combin\u00e9e avec l\u2019option -N<\/tt>. L\u2019option -2<\/tt> c\u2019est pour demander \u00e0 ssh<\/em> d\u2019utiliser le protocole v2 et l\u2019option -C<\/tt> c\u2019est pour demander de compresser le tunnel.<\/p>\n

Il ne me reste plus qu\u2019\u00e0 brancher mon client mail sur le port 2000 de localhost<\/tt>, et je pourrai lire mes mails, comme si j\u2019\u00e9tais connect\u00e9 directement au serveur de mails.<\/p>\n

Un d\u00e9tail s\u00e9curit\u00e9<\/h3>\n

Quand je cr\u00e9\u00e9 des comptes utilisateurs sur mon serveur juste pour permettre du port forwarding<\/em> je ne donne pas le droit de connexion au serveur. Pour cela, dans le fichier \/etc\/passwd<\/tt> je remplace le shell<\/em> du compte par \/sbin\/nologin<\/tt>. Ainsi la personne qui a ce compte peut cr\u00e9er des tunnels SSH<\/em> mais elle ne peut pas se connecter au serveur.<\/p>\n

Sous Windows<\/h3>\n

En utilisant Cygwin<\/a> et le client ssh<\/em> fourni avec, cela fonctionne tr\u00e8s bien. Putty<\/a> permet aussi d\u2019\u00e9tablir des tunnels<\/em> pour ceux qui sont r\u00e9fractaires \u00e0 la ligne de commande.<\/p>\n

Quelques liens sur le sujet<\/h3>\n