Bureau distant sécurisé : Sécurité des accès à un service OpenERP ou Tryton distant
Par SISalp le samedi 29 octobre 2011, - Hébergement des serveurs - Lien permanent
Le bureau distant sécurisé est une option disponible sur les hébergements OpenERP_OnLine-VDS et Dédié et Tryton-OnLine-VDS et Dédié de SISalp. La communication avec les services OpenERP et Tryton est préconfigurée par le script xkey dont nous détaillons le fonctionnement dans cet article. Nous gérerons des tunnels ssh pour accéder des services OpenERP ou Tryton distants sans les exposer à internet. Vous pouvez reproduire ce type de paramétrage sur vos postes de travail Ubuntu ou Debian quand vous souhaitez accéder à un service distant en toute sécurité.
Cet article concerne les utilisateurs de postes de travail Debian ou Ubuntu utilisant des services VDS et Dédiés proposés pas SISalp. Il prend en exemple la façon dont est pré-paramétrée l'option "bureau sécurisé" sur la base d'un VDS SISalp.
Les solutions de sécurité proposées ici ne sont pas accessibles aux autres hébergements disponibles sur le marché, en particulier les abonnements Saas de l'éditeur OpenERP ou autres. Ces solutions ont donc le défaut d'exposer votre interface ERP à la face du web. Il faut noter que ni le recours à https ni à xml-rpc/secure n'empêchent quiconque de tenter de se connecter par essai de mots de passe ni d'utiliser une faille du produit sur les différents protocoles de communication (xml-rpc, net-rpc, ftp, webdav, etc). L'actualité récente a montré qu'OpenERP n'a pas de garantie de résistance. En ce qui concerne les hébergements OpenERP-Online gratuits de SISalp, les modules qui nécessitent l'ouverture de ports de communication non indispensables ne sont pas opérationnels par défaut.
Vous pouvez utiliser xkey aussi si vous disposez de votre propre installation d'OpenERP ou de Tryton. Les utilisateurs de postes de travail sous Windows peuvent s'inspirer de ce fonctionnement mais doivent le transposer. Pour mémoire, l'option "bureau sécurisé" est fondée sur le déport d'un bureau Ubuntu, mais il est utilisable directement depuis Windows, Mac et bien sûr Linux.
Dans cet article la syntaxe sudo indique que la commande peut être éxécutée soit par l'utilisateur root, soit par un utilisateur autorisé disposant de la commande sudo.
Pré-requis
installation de xkey
xkey est une commande shell qui utilise open-ssh. xkey crée des commandes dans /usr/local/bin qui simplifient la syntaxe des connexions ssh. xkey dispose d'un fichier de configuration afin d'automatiser la mise en oeuvre des actions décrites dans cet article. xkey utilise une commande "expect" qui n'est pas installée par défaut :
sudo apt-get install expect
pour installer xkey, il faut le télécharger et le rendre exécutable :
cd /usr/local/bin sudo wget http://download.sisalp.net/xkey sudo chmod 755 xkey
la commande suivante permet d'obtenir de la documentation intégrée de xkey :
xkey --help
ssh
Secure Shell (SSH) est à la fois un programme informatique et un protocole de communication sécurisé. Le protocole de connexion impose un échange de clés de chiffrement en début de connexion. Par la suite toutes les trames sont chiffrées. Il devient donc impossible d'utiliser un sniffer pour voir ce que fait l'utilisateur.
Plus d'information sur wikipedia
première connexion à un serveur
la première fois que vous vous connectez à un serveur distant, ssh vous prévient :
The authenticity of host '[xxxx]:yy ' can't be established. Are you sure you want to continue connecting (yes/no)? yes
répondre "yes" en toutes lettres.
Utilisation manuelle de la commande xkey
créer manuellement une commande de connexion ssh
xkey vous permet de créer une commande pour vous connecter sans avoir à fournir de paramètres
xkey --command You must have root priviledge for --command, trying sudo
si vous avez les privilèges pour la commande sudo, le programme se poursuit.
répondre alors aux questions suivantes
Remote user : myuserid Remote host name : remotehost.domain.com Connection port, default is <22> : 22
ces informations de connection ssh se trouvent dans votre message d'identifiants,
pour les questions suivantes, vous pouvez souvent vous contenter de réponses vides
IP address for a host on the local network, else dns resolution, default is <-> :
si vous ne passez pas par un serveur de nom, tapez l'adresse ip du serveur distant
IP address for a host on the local network, else dns resolution is set to default value -
nous ne l'avons pas fait car nous utilisons une résolution DNS dans cet exemple
Command name, default is <remotehost> :
là aussi nous ne répondons rien car ce nom de commande nous convient
Command name is set to default value remotehost
la nouvelle commande vient d'être créée, et xkey nous imprime sa documentation :
remotehost version samedi 29 octobre 2011, 16:34:38 (UTC+0200) on ionyx generated by xkey version 29 oct 2011-rev 0 Syntax of remotehost command remotehost -h|help|--help Print this documentation remotehost Connect to ssh myuserid@remotehost.domain.com -p 22 remotehost -k|--keys Exchange keys for password-less connection remotehost -r|--root Connect to ssh root@remotehost.domain.com -p 22 remotehost -t|--tunnel|tunnel [local_port [remote_port [remote_ip]]] Create a tunnel from port local_port to remote_ip:remote_port on connection myuserid@remotehost.domain.com port 22 remotehost -v|--version|version Print version of remotehost command moi@ici:~$
échange des clés
pour ne plus avoir à taper de mots de passe, nous allons échanger les clés en utilisant une fonction intégrée à la commande qui vient d'être créée :
remotehost --keys myuserid@remotehost.domain.com s password :
ce mot de passe de connection ssh se trouve dans votre message d'identifiants,
You can connect now to myuserid@remotehost.domain.com without password
ce que nous vérifions immédiatement par la commande
remotehost
nous sommes maintenant connectes sur le serveur distant, nous mettons fin à cette connexion par la commande
exit
créer manuellement une commande de création d'un tunnel ssh
le principe de fonctionnement est similaire, xkey va créer une commande qui établit un tunnel.
la commande est la suivante :
xkey --tunnel
et les questions posées sont alors :
Remote user Remote host name Connection port
qui ont la même signification que précédemment
Local port
le port d'entrée du tunnel, celui qui est utilisé en local
Remote port
le port de sortie du tunnel, celui sur lequel le serveur est en attente de traffic
Remote ip
habituellement la valeur par défaut localhost vous conviendra, sauf si le serveur distant est sur un réseau local distant
IP address for a host on the local network, else dns resolution
comme précédemment, en renseignant cette adresse, vous n'aurez pas besoin de résolution de nom
Command name
c'est le nom de la commande qui établit le tunnel, par exemple tremotehost
Pour obtenir la documentation de la commande tremotehost, on utilise
tremotehost --help
Une fois la commande créée, nous pouvons la tester en la tapant dans un terminal :
tremotehost
le tunnel est établi. En utilisant localement le port d'entrée du tunnel, on utilse le serveur qui répond sur le port de sortie du tunnel. pour fermer ce tunnel, il suffit de mettre fin à la connexion en tapant la commande suivante dans ce terminal :
exit
Configuration pour une utilisation automatique de xkey
automatiser la création des commandes
xkey permet d'automatiser les créations de commandes effectuées aux étapes précédentes, en utilisant un fichier de description dont la syntaxe est précisée par la commande
xkey --help
On remarquera que les créations manuelles précédentes ont déjà créé et peuplé ce fichier de configuration avec les données utilisées. Si on n'a pas effectué de créations manuelles, on crée le fichier de configuration à l'emplacement suivant :
sudo mkdir /usr/local/etc sudo mkdir /usr/local/etc/xkey sudo nano /usr/local/etc/xkey/xkey.conf
dans ce fichier, chaque ligne décrit une commande
instruction de création d'une commande de connexion :
server:name: ssh_user ssh_ip_address ssh_port remote_host_fqdn
où server: est un mot clé, name le nom de la commande et du serveur distant par exemple
server:myremoteserver: sshuser 10.0.0.100 22 test.exemple.com
créera une commande myremoteserver pour se connecter sur sshuser@test.exemple.com par le port 22
Instruction de création d'une commande de création de tunnel
tunnel:name: ssh_user remote_host_ssh_ip|- ssh_port remote_host_fqdn local_port remote_port remote_ip|localhost
où tunnel: est un mot clé et où les autres paramètres ont la signification donnée précédemment
Une fois cette configuration enregistrée, la commande
xkey --auto
crée l'ensemble des commandes décrites dans /usr/local/bin
On obtient le détail des commandes créées par
xkey --list
création des raccourcis sur le bureau
sur un ordinateur de type poste de travail, on peut créer des raccourcis au lieu de taper les commandes
On peut ajouter des définitions pour créer des raccourcis sur le bureau, soit dans le fichier de configuration décrit plus haut, auquel cas, tous les utilisateurs pourront créer ces raccourcis
sudo gedit /usr/local/etc/xkey/xkey.conf
soit dans un fichier de configuration propre à l'utilisateur, et dans ce cas les raccourcis ne seront créées que pour cet utilisateur.
gedit ~/.xkey.conf
La syntaxe est alors la suivante
shortcut:name: /shortcut_directory|- /path_to_icon|- command_and_parameters
où shortcut: est un mot clé
On pourra tester l'exemple suivant
shortcut:mapomme: Bureau /usr/share/pixmaps/apple-red.png tremotehost tremoteftp xoe --client -start production
dans lequel le client openerp ou tryton appelé production est démarré par la commande xoe des hébergements SISalp après ouverture des tunnels sécurisés tremotehost et tremoteftp. Le raccourci est sur le Bureau et ressemble à une pomme rouge.
Vous remplacerez xoe --client -start production par la commande de démarrage du client openerp ou tryton correspondant à votre installation.
A noter qu'on peut lister là plusieurs tunnels par la syntaxe tunnel1 tunnel2 commande
La création du reccourci est effectuée par la commande
xkey --shortcuts
Fermeture des accès par internet
Quand cet accès sécurisé est maîtrisé, les abonnés des services SISalp peuvent sur simple demande, faire fermer tous les accès directs depuis le web : http, xml-rpc, net-rpc