L'essentiel de SSH
SSH, le couteau suisse des protocoles de communication
SSH est bien plus qu'un simple telnet crypté.
Cet article vous présente comment traverser un firewall, sécuriser vos sauvegardes, monter une partition distante et lancer des applications X depuis Windows.
Installer un serveur SSH
Sous Linux Ubuntu, la procédure d'installation est la suivante :
$ sudo apt-get install openssh-server
Sécuriser la configuration du serveur SSH
Ensuite, les paramètres du serveur doivent être ajustés à votre besoin.
Je vous conseille les modifications suivantes :
- changer le port par défaut. Le port 22 est régulièrement sondé par des robots en vu d'attaque
- désactiver le login d'authentification classique pour n'utiliser que le système clé publique / clé privée
- interdire la connexion administrateur
Éditer le fichier de configuration du serveur sshd :
$ sudo vi /etc/ssh/sshd_config
Veillez à la présence des paramètres suivants :
# Port du serveur ssh : choisissez un numéro de port
Port 12345
# Limiter au protocole 2 plus sûr
Protocol 2
# Privilege Separation is turned on for security
UsePrivilegeSeparation yes
StrictModes yes
# Authentification
LoginGraceTime 120
# Déconnexion au bout de 10 minutes d'inactivité
ClientAliveInterval 600
# Limite l'accès à une liste d'utilisateur
PermitRootLogin no
AllowUsers sshguest paul
# Identification par clé RSA
Authentication yes
PubkeyAuthentication yes
# Interdit la connexion par mot de passe, uniquement par clé
PasswordAuthentication no
# Pour lancer des applications X dans un tunnel
X11Forwarding yes
# Permet de faire du SFTP, FTP crypté
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM no
Testez votre configuration :
# /usr/sbin/sshd -t
Et redémarrez sshd :
$ sudo /etc/init.d/ssh restart
Échanger une clé SSH RSA
Les clients SSH les plus connus sont Putty sous Windows et ssh sous Linux ou CygWin.
Pour que le client puisse se connecter sur un serveur SSH qui n'accepte que les clés, il faut... une paire de clés :) et il faut que la clé publique soit installée sur le serveur.
Pour générer une paire de clés publiques / privées, lancer sur le client la commande :
$ ssh-keygen -t rsa
Saisir une passphrase. Ce mot de passe sera demandé lors de la connexion sur le serveur. La communication de ce mot de passe est cryptée contrairement au login classique sniffable par des outils basiques comme tcpdump.
Pour installer la clé publique du client sur le serveur, il faut l'ajouter à la liste des clés autorisées.
Pour ce faire, transférer la clé publique du client id_rsa.pub et l'ajouter à la fin du fichier ~/.ssh/authorized_keys sur le serveur :
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
Les droits d'accès à ce fichier doivent être rw pour le user et rwx pour le répertoire .ssh
Dès lors, la connexion du client vers le serveur est opérationnelle.
Si le serveur SSH autorise l'identification par login / mot de passe et utilise le port standard 22, vous pouvez ajouter votre clé publique sur le serveur SSH depuis votre machine via la commande ssh-copy-id :
$ ssh-copy-id moi@mon_serveur
moi@mon_serveur's password:
Now try logging into the machine, with "ssh 'moi@mon_serveur'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
Se connecter sur un serveur avec SSH
D'après la configuration précédente, ssh sous Cygwin permet de se connecter via la commande :
$ ssh -p 123456 mon_user@mon_serveur.com
Enter passphrase for key '/cygdrive/c/Documents and Settings/mon_user/.ssh/id_dsa':
Last login: Thu Sep 6 13:31:28 2007 from paris2-fw1.cdn.net
mon_user@mon_serveur:~$
Si vous échouez dans la saisie de la passphrase, il vous sera impossible de vous connecter.
Nous avons donc là un moyen de se connecter sur un serveur distant au travers une communication cryptée et via un système d'authentification robuste.
Tunneling ou comment utiliser SSH comme un proxy-relay au travers un Firewall
En informatique, il existe un moyen de passer outre un firewall un peu sévère ou simplement de s'assurer de la confidentialité des informations échangées : le tunneling.
La connexion est cryptée du poste local au poste distant. Les indiscrets voyent la communication cryptée mais ne peuvent pas lire vos informations commes vos mots de passe de messagerie, contenus de mail, adresses web visitées...
Pour faire du tunneling http, il faut :
- un poste local avec ssh (Linux ou Cygwin sous Windows)
- un poste distant accessible via internet avec un serveur SSH (sshd)
Depuis votre poste client, lancez la commande :
$ ssh -D port-local-ouvert mon-compte@mon-serveur -C -N -f
en remplaçant port-local-ouvert par un port qui n'est pas bloqué par le firewall du réseau local de votre PC, mon-compte@mon-serveur par les informations de connexion sur votre serveur qui est à l'extérieur du réseau.
Passé l'authentification par clés, le tunnel crypté est établi.
Pour utiliser ce tunnel, modifiez les paramètres de connexions réseaux proxy SOCKS de votre client : navigateur web, IM, lecteur mail... avec les paramètres : localhost:port-local-ouvert Par exemple, pour le navigateur Internet Firefox, modifiez le proxy SOCKS dans le panneau Préférences - Avancées - Configuration réseau. Pour le lecteur de courrier Thunderbird, modifiez le proxy dans le panneau Préférences - Avancées - Réseau - Connexion.
Les options C, N et f ne sont pas obligatoires. Elles permettent respectivement de compresser la communication, de ne pas lancer un Shell sur le serveur et de lancer votre connexion en tâche de fond.
Remarque :
- Seule la communication du client au serveur ssh est cryptée, il ne s'agit pas d'un anomyser. Vu d'Internet, la communication proviendra du serveur SSH.
- Vu les possibilités énoncées, il est clair que l'accès à un serveur SSH doit être sécurisé par une configuration adaptée, par exemple un accès limités aux clés installés manuellement par vos soins et un passphrase un minimum compliqué.
Le backup sécurisé facile
Il est simple de synchroniser des répertoires distant via un tunnel SSH et la commande rsync.
Par exemple :
$ rsync -a --verbose --progress --compress --delete -e "ssh -p 12345"\
--exclude "PrintScreen*" --exclude ".bak" * \
mon_user@mon_serveur:documents/archive
rsync établi un tunnel SSH et l'utilise pour synchroniser les fichiers locaux et distants.
Attention, l'option --delete efface les contenus distants qui n'existe plus en local.
Monter une partition distante sécurisée sous Linux
SSH peut également se substituer à NFS ou Samba sous Linux. Votre répertoire va être ajouter comme un disque réseau et les données circuleront via SFTP, le sous-protocole de SSH en toute sécurité.
Pour monter un disque SSH :
$ sshfs moi@mon-serveur:/home/moi/mes-donnees /net
Le répertoire local /net contient le contenu de mon-serveur, répertoire /home/moi/mes-donnees
Pour démonter ce disque :
$ fusermount -u /net
Le fichier /etc/fstab peut être mise à jour pour automatiser le montage au démarrage.
$ sudo vi /etc/fstab
Ajoutez la ligne suivante :
sshfs#moi@mon-serveur:/home/moi/mes-donnees /net fuse user,noatime 0 0
Exécuter des applications X11
Les applications Linux graphiques regorgent de goodies très performants inédit sous Windows.
La virtualisation complète d'un Linux n'est pas nécessaire pour exécuter occasionnellement une application X-Windows.
Pour lancer une application X distante, il faut :
- lancer un serveur X11 sur le client ; sous windows, il existe un serveur X très simple
Xming - se connecter via un client SSH sur le serveur SSH Unix avec le support du forwarding X11
- sur le serveur, lancer l'application désirée
L'application apparait sur votre poste client.
- Ajouter un commentaire
- 5587 lectures

™ 