Le web de Dominique Guebey – Bazar informatique

Page : http://www.dg77.net/tekno/securite/sshvnc.htm


   D o m i n i q u e   G u e b e y    J u n g l e      Bazar informatique

A propos de sécurité informatique

Connexion VNC et tunnel sécurisé par OpenSSH

Intérêt de la chose

Avec SSH, on obtient une console, on peut a priori tout administrer et lancer sur le poste distant. Mais il y a des maniaques de la souris, sans parler de ceux qui ont une envie subite de créer un tableau Excel avec liaisons croisées dynamiques. La solution est VNC : la version gratuite est privée du cryptage fort, mais combinée avec OpenSSH, le problème de la sécurité réseau est résolu sans mal.

Quid de VNC ?

VNC est un protocole public, basé sur RFB ("Remote framebuffer"), qui sert à transmettre les interfaces graphiques, indépendamment de la plate-forme système sous-jacente. VNC (Virtual Network Computing) permet de visionner et d'agir sur l'interface d'un ordinateur à partir d'un autre. VNC est "cross-platform", il permet le contrôle à distance entre types différents de machines (i.e. Windows-Unix, Gnu/Linux-Windows…). VNC dispose même d'un visualiseur Java, de telle sorte qu'on peut prendre le contrôle d'un PC au travers d'un navigateur sans avoir à installer de logiciel.

VNC permet non seulement l'administration systême ou le support utilisateur mais aussi l'utilisation sur unités mobiles, ce qui permet l'accès distant "au bord de la route". On a droit à plusieurs connexions sur le même poste. VNC est disponible en version Open Source depuis 1998, son implantation en entreprise sur des milliers de postes de travail est chose commune.

Installation de VNC sur poste Win32

Il faut un serveur VNC sur chaque poste qu'on veut contrôler, VncViewer est utilisé sur le poste qui contrôle. Cet exemple utilise RealVNC version 4 [http://www.realvnc.com/] , logiciel sous licence GnuGPL. Noter que le port utilisé par VNC serveur est le 5900. Les suivants (5901, 5902…) sont affectés aux terminaux ouverts sous VNC. Le visualiseur java fonctionne sur le port 5800.

Installation
Vnc Viewer est toujours installé. Le serveur ne l'est que si on le spécifie ("installation complete"), il peut être enregistré sur le système en tant que service, ce qui est généralement la bonne formule.
Paramètrage
"Authentication" : cocher "no authentication or Encryption"
Il est conseillé de choisir l'accès VNC avec mot-de-passe.
Controle d'accès : on peut cocher "Only accept connections from the local machine". De cette façon, seules les connexions de type localhost seront acceptées, ce qui limitera les possibilités d'accès au seules liaisons SSH (voir les exemples). Ce peut être un bon choix pour le serveur SSH lui-même. Sinon des utilisateurs inconnus de SSH pourraient prendre le contrôle de la machine en connaissant simplement le mot-de-passe VNC, ce qui va à l'encontre du but recherché.
RealVNC 4 permet de choisir d'autres ports que 5900 et 5800, ce qui peut suffire à dérouter certains curieux.

Principe de la connexion VNC à travers SSH

On établit une connexion VNC non pas directement vers le système éloigné, mais vers une connexion SSH qui prend en charge le trafic sur le port concerné (5901…) et le dirige vers le destinataire désigné. La connexion se fait donc en deux temps : définition de la liaison SSH avec redirection via un port correspondant à celui de VNC, puis lancement de VNC vers le client SSH.

Etablissement d'une connexion

But de la manoeuvre
Cette liaison ne mettra en jeu que deux machines : un client SSH sur lequel sera lancé VncViewer, et le serveur SSH dont on prendra le contrôle.
1ère phase, connexion SSH
 ssh  -L  5901:127.0.0.1:5900  [utilisateur]@[serveur SSH]
Explications : l'option -L permet de "forwarder" (rediriger plus loin) le flux vers un port donné. "127.0.0.1" désigne le serveur VNC, en l'occurence le poste local (local du point de vue du serveur SSH !). 5901 sera le port alloué au terminal client, 5900 est le port du serveur VNC.
2e phase, lancement du visualiseur VNC sur le client SSH
Lancer "VncViewer" en spécifiant 127.0.0.1:1 dans la fenêtre "serveur". :1 désigne le terminal et correspond au port 5901 utilisé par la liaison SSH.
La connexion sera créée sur le port 5901 de "localhost", et donc prise en charge par le lien SSH précédemment établi.
Entrer le mot de passe s'il a été défini dans VNC sur le poste destinataire. L'écran du poste distant s'affiche alors.
Options supplémentaires :
 ssh  -T -L  5901:127.0.0.1:5900  -C -N [utilisateur]@[ordinateur distant]
-T n'alloue pas de terminal ("tty"), c'est superflu puisqu'on ne veut qu'établir une liaison. -N ne permet d'exécuter aucune commande distante, -C comprime les données, ce qui est utile notamment pour accélérer quelque-peu les transmissions par modem.
Remarque complémentaire sur les options de port forwarding
Il existe une option -R, symétrique de -L. Sur le système HOTE2,  ssh  -R  5901:HOTE3:5900  [utilisateur]@HOTE1  ouvre la même liaison que, sur le système HOTE1, la commande :  ssh  -L  5901:HOTE3:5900  [utilisateur]@HOTE2 

Utilisation avancée 

La connexion VNC peut être réalisée à partir d'un poste distinct du client SSH, et concerner la prise-en-main d'une machine distincte du serveur SSH auquel on est relié. La transmission entre celui-ci et le poste dont on prend le contrôle ne sera pas cryptée, mais l'intérêt est d'avoir une liaison SSH sur une portion du réseau considérée comme peu sûre.

Exemple : notre bureau d'étude de Viuz-en-Salaz et la plate-forme logistique de Montpezat-de-Quercy sont deux entités considérées comme sûres. Mais les transmissions entre les deux passent par un réseau aux fréquentations douteuses (Internet, service informatique…).

MonPC a déjà une connexion VNC en cours sur le terminal 1, on va utiliser le numéro 2 (d'où le port 5902). Cet exemple utilise les adresses IP, mais souvent le nom de systême (par exemple "MonPC" au lieu de 10.100.73.27) pourra ètre utilisé.

Viuz en Salaz :
MonPC 10.100.73.27, utilisant VNC Viewer.
Frontal73 10.100.73.248, utilisé comme client SSH
Montpezat-de-Quercy :
Frontal82 10.100.82.248, serveur SSH
Franky 10.100.82.11, serveur VNC
Connexion SSH, lancée sur Frontal73 (adresse IP 10.100.73.248)
 ssh -g -L 5902:10.100.82.11:5900 [utilisateur]@10.100.82.248 
L'option -g déclare le serveur distant 10.100.82.248 comme passerelle
Connexion VNC depuis MonPC (10.100.73.27)
Entrer 10.100.73.248:2 (l'adresse du client SSH local Frontal73 suivi du numéro de terminal alloué). VNC traîte la communication sur le port 5902
Frontal73 relaie cette communication vers le port 5900 de 10.100.82.11 via le serveur Frontal82.
5900 est le port VNC : l'écran du PC s'affiche, on est sur Franky.

VNC en ligne de commande

Liste des options, à toutes fins utiles

-run
Lancement normal, ignore la suite de la ligne de commande
-install
Installe le service et prend en compte la suite de la ligne
-reinstall
Désinstalle, réinstalle et traite la suite
-remove
Supprime le service VNC et traite la suite
-settings
Affiche les propriétés de VNC
-defaultsettings
Affiche les propriétés par défaut
-connect [host]
Lance une connexion sortant vers un visualiseur, correspond à l'option "Add New Client". Peut être lancé plusieurs fois.
-kill
Interrompt VNC
-about
Affiche la fenêtre "Au sujet de"