Avant de passer à la mise en place et à la configuration de notre tunnel, nous allons d'abord voir ce que c'est, pourquoi vous pourriez en avoir besoin et comment installer les outils indispensables. Nous ferons également une brève explication de ce que sont les ports, notion fondamentale pour la suite.
Le principe
Nous allons d'abord expliquer ce qu'est le protocole SSH, pourquoi nous l'utiliserons et ensuite, rapidement ce qu'est un tunnel et surtout pourquoi vous en auriez besoin.
Le SSH
Le SSH, acronyme de l'anglais secure shell, désigne un ensemble de programmes et de protocoles qui permettent de se connecter sur une machine distante de façon sécurisée, en encryptant les communications.
Tout au long de ce cours, nous utiliserons OpenSSH, une implémentation libre du protocole SSH. C'est un ensemble d'outils qui contient, entre autres, ssh (un remplaçant pour rlogin et telnet); scp (un remplaçant pour rcp); sftp (un remplaçant pour ftp) et sshd, le démon SSH.
Nous utiliserons le protocole SSH car les outils tels que telnet, rlogin et ftp transmettent les communications de façon parfaitement claire (en ce compris les mots de passe) à travers l'Internet. Une simple écoute de réseau permet alors à quiconque de s'approprier les données qui transitent. OpenSSH permet de chiffrer les communications et d'encrypter solidement les données, rendant toute écoute réseau caduque.
L'échange des clés de chiffrement au début de la transaction permet de s'assurer que les trames seront chiffrées pendant la connexion. L'utilisation de SSH permet ainsi d'éviter la libre circulation des mots de passe et impose une authentification renforcée de la machine distante, plus seulement basée sur l'adresse IP ou le nom.
Lorsqu'on décortique l'acronyme SSH, on y retrouve les deux notions essentielles : secure, shell. Le SSH fournit donc un shell à distance sécurisé. Un shell est un logiciel fournissant une interface pour utilisateur, le plus souvent en ligne de commande. Il est donc un interpréteur de commandes et offre la possibilité d'interagir avec le serveur à distance.
En conclusion, SSH nous permet d'exécuter des commandes à distance en toute sécurité; d'échanger des fichiers et même de lancer une session graphique. Toutes ces raisons font que SSH est aujourd'hui très utilisé par beaucoup de monde.
Le tunnel
Le principe des tunnels SSH, également appelés ports forwarding, pour redirection de ports en français, est de permettre d'atteindre des machines auxquelles vous n'avez normalement pas accès. On encapsule donc des données d'un protocole réseau au sein d'un autre, situé dans la même couche du modèle en couches, ou dans une couche du niveau supérieur.
Une application directe de ce concept est les firewalls qui bloquent bien souvent certains ports dont vous pourriez avoir besoin.
Vous voudriez utiliser votre client de messagerie libre, mais les ports POP et IMAP sont bloqués.
Vous voudriez peut-être télécharger l'image .iso de la dernière release de votre distribution préférée par FTP.
Vous voudriez enfin discuter avec vos amis via un logiciel de messagerie instantanée.
Toutes ces opérations sont rendues a priori impossibles à cause d'un éventuel firewall mis en place.
Le principe sera donc de faire transiter toutes ces données au travers d'un port autorisé. Le tunnel encapsulera ces informations et les fera transiter sans soucis vers le serveur distant. Vous allez donc pouvoir utiliser votre tunnel comme porte de sortie du firewall et y faire circuler tout ce qui relève du protocole TCP.
Voila un petit schéma qui illustre ces notions
Un tunnel utilisant le SSH (réutilisé sous license ) - Attribution ©Wikipedia
Notion de ports
On parle de ports depuis tout à l'heure, mais il est probablement utile de clarifier immédiatement ce qu'on entend par là. Voici ce que dit Wikipedia au sujet de cette notion.
Citation : Wikipedia
Correspondant à la couche de transport du modèle OSI, la notion de port logiciel permet, sur un ordinateur donné, de distinguer différents interlocuteurs. Ces interlocuteurs sont des programmes informatiques qui, selon les cas, écoutent ou émettent des informations sur ces ports. Un port est distingué par son numéro.
En clair, un port est l'adresse d'une application sur une machine. Si vous décidez par exemple d'uploader des fichiers sur votre serveur web, pour mettre votre site à jour, au moyen d'un client FTP, ce dernier va interroger le port FTP du serveur distant, le port 21, qui constitue l'adresse de l'application FTP.
Une analogie qui vaut ce qu'elle vaut est de considérer les ports comme des portes d'entrée vers une machine. Comme toute porte d'entrée, un port peut être ouvert ou fermé. Un des principes d'un firewall est justement de fermer certains ports, jugés inutiles d'être laissés ouverts.
Il y a cependant des conventions à respecter. Ainsi, si on s'adresse à une machine via le port 80, elle renverra la demande vers le serveur web. Si on fait une requête via le port 110, la machine comprendra qu'il s'agit d'une requête du type POP3. Voici la liste des adresses/numéros attribués conventionnellement aux différents ports.
Notre tunnel nous permettra d'emprunter d'autres ports qui auront été laissés ouverts. Vous comprenez à présent pourquoi on appelle cette technique de la "redirection de ports".
Des approches différentes
Il existe différentes façons de faire fonctionner ce procédé de ports forwarding. Bien que le concept soit le même, il est utile de différencier ces approches.
Approche locale
Dans ce cas-ci, nous allons rediriger un port distant vers une destination locale. Ce type de redirection permet donc joindre des hôtes derriere un firewall, sur un réseau privé en encapsulant des informations dans une connexion SSH vers un serveur (ce dernier doit avoir la possibilité de joindre l'hôte final).
Approche locale (réutilisé sous license ) - Attribution ©think-underground
Le SSH local permet de transmettre les demandes locales (sur le port "port-local" de localhost) vers le serveur-ssh qui les envoie sur le port "port" de l'adresse "adresse" (l'adresse "adresse" doit donc être accessible par serveur-ssh).
Approche distante
Nous allons rediriger un port local vers une machine distante. Imaginons que vous souhaitiez montrer à un de vos amis votre nouveau site web qui est hébergé sur votre serveur de test qui fait partie de votre réseau local.
Tout ce que vous avez à faire est d'ouvrir un tunnel d'une machine qui peut joindre votre serveur ainsi que le serveur public vers lequel votre ami va se connecter.
Approche distante (réutilisé sous license ) - Attribution ©think-underground
Le SSH distant permet de transmettre les demandes distantes (sur le port "port-distant" de serveur-ssh) vers localhost qui les envoie sur le port "port" de l'adresse "adresse" (l'adresse "adresse" doit donc être accessible par localhost).
Installation
On va maintenant détailler l'installation des outils indispensables, aussi bien du côté du serveur que du côté du client.
Côté serveur
On suppose que vous disposez d'un serveur dédié. Installez donc le paquet openssh-server sur votre serveur, au moyen de votre gestionnaire de paquets préféré. On lancera par exemple, sous Debian
# aptitude install openssh-server
Assurez-vous ensuite qu'il sera lancé à chaque boot de votre machine (même si vous ne devriez pas avoir à booter votre serveur très souvent, étant donné que par définition, il doit être allumé en permanence).
Si on veut démarre le démon SSH, sshd, on fera
# /etc/init.d/sshd start
Côté client
En principe, le client SSH est installé par défaut sur toutes les systèmes GNU/Linux. Il n'y a donc rien à faire.
Si pour une raison ou une autre, ce n'était pas le cas, installez donc le paquet openssh. Ainsi, sous Debian, on fera
# aptitude install openssh
Vous êtes maintenant prêts à passer à la pratique.