Indispensables pour administrer les serveurs *Linux, le protocole SSH et son implémentation via OpenSSH permettent également bien d'autre chose que la connexion sécurisée à votre "shell" favori. Trop peu connue, la possibilité d'établir des tunnels au travers de votre connexion est une des choses les plus utiles de l'administration systèmes.

Pourquoi ?

Dans quel cas utilisez cette fonctionnalité ? Il existe de nombreux cas ou celle-ci peut se revéler très utile. Limitons nous à deux cas concrets :

  • Sécuriser un protocole non chiffré.
  • Sortir d'un réseau où le filtrage web est trop restrictif.

Bien évidemment et dans tous les cas, la présence d'un serveur SSH et de votre client favori seront nécessaires.

Sécuriser un protocole via un tunnel SSH

Mettons nous en situation ... :

apple

Je me retrouve ce soir sur un WiFi publique et j'ai besoin d'accéder à un serveur TSE ( connexion non chiffrée ) sur mon réseau d'entreprise. Mon VPN ne fonctionne pas ( pas de chance ... ). Aucun problème car mon serveur SSH lui est toujours opérationel ;) !

Heureusement donc , j'ai accès à un serveur SSH et le protocole passe ! On peut résumer la situation par le schéma suivant :

ssh_cas_12

Je vais donc "passer" par mon serveur SSH afin d'attendre le serveur RDP. Tout ceci peut se faire via une simple commande SSH ... :

ssh -L 1234:IP_OU_DNS_DU_SERVEUR_RDP:3389 monuser@monserveurssh 

Explication de l'option L

Cette option va initier le tunnel, vous aurez compris que celle-ci prend un argument de la forme suivante : "port local:cible du tunnel:port cible".

Cette commande va donc créer sur votre machine une connexion sur le port 1234. Qui sera directement renvoyée au travers de la connexion SSH sur la machine "cible" dans notre commande "IP_OU_DNS_DU_SERVEUR_RDP" et sur le port 3389.

Vous pouvez tester cela, soit avec votre client RDP ou avec un telnet :

telnet 127.0.0.1 1234

Le tunnel dynamique

Dans cet exemple, je me retrouve tout simplement sur un réseau dont le filtrage web trop restrictif ( uniquement par whitelist par exemple ) ne me permet pas de me connecter à l'administration de mon blog avec mon navigateur.

Aucun soucis, encore une fois avec mon serveur SSH je vais m'en sortir... Par contre dans ce cas je vais créer une connexion dynamique pour l'utiliser via Firefox par exemple ( c'est la même chose sous chrome, safari ou IE ! ).

ssh -D 1664 monuser@monserveurssh 

Explication de l'option D

Cette option va également initier un tunnel, mais avec une redirection de port locale "Dynamique" au niveau de l'application. Elle va allouer une socket sur votre port local, ici 1664. Et à chaque fois qu'une connexion sera établie sur celui-ci, la connexion sera transmise à votre terminaison SSH. Mais cette fois, votre serveur SSH joura le rôle de proxy SOCKS et traitera la requête et vous enverra les retours.

Dans mon cas, il me suffira de paramétrer dans mon navigateur, l'utilisation du proxy socks en question :

firefox_socks


Votre serveur SSH et son client renferment encore bien quelques secrets, le X11 forwarding par exemple, mais nous aborderons cela dans un prochain article !

N'hésitez pas à faire vos commentaires ou à suivre les publications sur Twitter !