Mini-PC : Gnu/Linux : SSH : Tunnelliser une connexion VNC par

Transcription

Mini-PC : Gnu/Linux : SSH : Tunnelliser une connexion VNC par
Mini-PC : Gnu/Linux : SSH : Tunnelliser une connexion VNC par SSH
Par X. HINAULT – Novembre 2014 – www.mon-club-elec.fr
Ce qu'on va faire ici...
Si l'on souhaite sécuriser l'accès au bureau distant du mini-PC , il va être possible de rendre « invisible » de l'extérieur les échanges client VNC/serveur VNC en
tunellisant la connexion VNC au sein de la connexion SSH : la technique utilisée s'appelle le « port forwarding »
Dans quelles situations cette procédure est-elle utile ?
La procédure présentée ici sera utile à chaque fois que l'on souhaite sécuriser l'accès VNC au mini-PC. Ceci au prix d'une réduction potentielle de la fluidité.
Pré-requis
On présuppose ici que le serveur et le client SSH sont opérationnels et configurés correctement. Voir la procédure détaillée dans le document dédié séparé.
Remarque :
Si l'on souhaite totalement sécuriser l'accès VNC, il faudra également fermer le port 5900 pour un accès extérieur, grâce à IPTABLES.
Mini-PC : Gnu/Linux : SSH : Tunnelliser une connexion VNC par SSH - Par X. HINAULT – Octobre 2014 – www.mon-club-elec.fr – p. 1 / 7
Le réseau utilisé
Mini-PC : Gnu/Linux : SSH : Tunnelliser une connexion VNC par SSH - Par X. HINAULT – Octobre 2014 – www.mon-club-elec.fr – p. 2 / 7
Pour comprendre
SSH est un mode de connexion réseau client-serveur qui permet de « tunneliser », c'est à dire de rendre invisible de l'extérieur, les échanges entre le serveur SSH et
le client SSH. Il s'agit donc d'un outil de sécurisation puissant.
Dans sa forme la plus simple, l'utilisation de SSH permet d'obtenir sur le poste client, au sein d'un terminal, la ligne de commande du poste distant (=le poste
serveur SSH distant). C'est une façon de contrôler, dépanner, prendre la main sur le poste serveur de façon distante et en toute sécurité.
Mais SSH, permet bien plus que cela : il est en effet possible de tunnelliser au sein de la communication SSH tout autre service de son choix, notamment l'accès au
bureau distant par VNC, serveur HTTP, etc... Ceci au prix d'une augmentation de la bande passante, mais avec un gain en sécurisation significatif.
Mini-PC : Gnu/Linux : SSH : Tunnelliser une connexion VNC par SSH - Par X. HINAULT – Octobre 2014 – www.mon-club-elec.fr – p. 3 / 7
Le « port forwarding » en 2 mots :
Qu'est-ce que c'est ?
Le principe est le suivant : on va faire correspondre un port local de son choix du client à un port sur le serveur distant, via la connexion SSH. Au final, se
connecter localement sur le port défini aboutira à une connexion sur le poste distant et sur le port distant, tout en étant au sein d'un tunnel ssh :
Noter que ce système de sécurisation fonctionnera que si le serveur distant utilise l'adresse ip 127.0.0.1 (localhost) sur le serveur. Dans le cas contraire, le serveur
sera également accessible publiquement.
Comment fait-on cela ?
Pour obtenir cela, on va utiliser une commande ssh ayant la structure suivante :
ssh -L port_local:hostname:port_host user@server_ip
où :
-L : indique que l'on va faire un transfert d'un port local du client (l'autre option étant un transfert de port distant, avec option -R pour Remote)
port_local : le port local qui est transféré, sous entendu 127.0.0.1:port_local ou localhost:port_local
hostname : le nom du serveur cible dont on veut atteindre le port. Ce serveur doit être atteignable depuis le serveur SSH Remarque : si hostname s'appelle
localhost, c'est localhost côté serveur !
port_host : le numéro de port du serveur cible qui sera le port de sortie.
user@server_ip : l'utilisateur et l'adresse du serveur SSH à utiliser pour réaliser le « port forwarding »
Mini-PC : Gnu/Linux : SSH : Tunnelliser une connexion VNC par SSH - Par X. HINAULT – Octobre 2014 – www.mon-club-elec.fr – p. 4 / 7
Configuration du port forwarding
Ce que l'on va faire ici...
Nous allons lancer la connexion du client SSH en configurant le « port forwarding » du port 2012 local vers le port 8080 distant
Ligne de commande
Pour réaliser cela on utilisera une commande de la forme
ssh -L port_local:hostname:port_host user@server_ip
Dans notre cas, cela donne par exemple :
ssh -L 2012:localhost:5900 [email protected]
Noter que ici, localhost représente le localhost sur le serveur SSH : la connexion se fera sur localhost:5900 côté serveur.
Côté client, le port 2012 est sous entendu localhost:2012 côté client.
Le port 5900 est le port VNC par défaut avec vino côté mini-pc.
Mini-PC : Gnu/Linux : SSH : Tunnelliser une connexion VNC par SSH - Par X. HINAULT – Octobre 2014 – www.mon-club-elec.fr – p. 5 / 7
Utilisation de la connexion HTTP tunnelisée par SSH
Ce que l'on va faire ici...
A présent, nous allons utiliser cette connexion tunellisée.
Pré-requis
On suppose ici qu'un serveur http est en exécution sur 127.0.0.1:8080 côté serveur SSH : un simple serveur Bottle ou Pyduino fera l'affaire.
Connexion
Côté client, lancer le client VNC en se connectant sur 127.0.0.1:2012
xtightvncviewer 127.0.0.1:2012
Résultat obtenu
On obtient alors logiquement le bureau du mini-PC, mais cette fois en accès sécurisé SSH :
Mini-PC : Gnu/Linux : SSH : Tunnelliser une connexion VNC par SSH - Par X. HINAULT – Octobre 2014 – www.mon-club-elec.fr – p. 6 / 7
Truc utile
Si on souhaite éviter l'ouverture d'une console SSH côté client, on pourra utiliser le paramètre ssh -nNT en plus du reste.
ssh -nNT -L port_local:hostname:port_host user@server_ip
Conclusion
Une solution efficace et sécurisée pour accéder à un serveur VNC distant sécurisé, idéalement accessible uniquement par SSH.
Ressources utiles
http://blog.trackets.com/2014/05/17/ssh-tunnel-local-and-remote-port-forwarding-explained-with-examples.html
http://www.linux-france.org/prj/edu/archinet/systeme/ch13s04.html
https://help.ubuntu.com/community/SSH/OpenSSH/PortForwarding
Mini-PC : Gnu/Linux : SSH : Tunnelliser une connexion VNC par SSH - Par X. HINAULT – Octobre 2014 – www.mon-club-elec.fr – p. 7 / 7