Utilisation avancée de ssh

Présentation du protocole SSH

Le protocole SSH (Secure Shell) offre un service de connexion sécurisée à distance (port 22 en TCP/IP). Il est (souvent) basé sur un serveur (sshd) et un logiciel client (la commande ssh). Ce service remplace les anciens protocoles de connection à distance comme telnet, rsh ou rlogin. Avec ces derniers les informations transitent en clair sur le réseau ce qui permet leur interception.

L'authentification dans SSH peut se faire par mot de passe ou par l'utilisation de clefs asymétriques. A cause de l'utilisation de mot de passe le protocole est sensible aux attaques brutales (tentatives de connexions multiples basées sur des dictionnaires de mots de passe).

Conseil : Le protocole SSH ne doit pas être ouvert sur l'internet sans limitation d'accès. Pour le protéger, vous devez utiliser un logiciel comme DenyHosts (fermeture des accès après trois tentatives) ou mettre en place un service de Port Knocking (ouverture du port SSH à la demande sur la base d'une procédure définie à l'avance, c'est donc un secret partagé entre l'administrateur du serveur et son utilisateur).

Vérification du service SSH

  1. Vérifiez la présence des packages :
    yum list "*openssh*"
    
  2. Démarrez le service sshd :
    systemctl restart sshd
    
  3. Vérifiez le :
    systemctl status sshd
    netstat -tap | grep ssh
    
  4. Testez le :
    ssh -v localhost
    

Redirection du trafic X

Présentation : Un utilisateur connecté de manière distante a souvent besoin d'utiliser des logiciels graphiques. Pour ce faire, il va être amené à mettre en place une liaison client/serveur entre son serveur X (son écran graphique) et son logiciel (le client X). Malheureusement cette liaison n'est pas protégée et son travail peut donc être observé. Pour éviter ce problème, le protocole SSH permet d'encapsuler le trafic X dans le tunnel sécurisé.

Port forwarding avec ssh

Soient trois machines (M1, M2, et M3) la votre étant la première. Nous voulons atteindre, depuis M1 un service de M3 qui n'est ouvert qu'à M2.

Authentification par clé publique/privée

Présentation : Malgré le mécanisme de cryptage, le protocole SSH est sensible à une attaque du type Man In the Middle. Dans cette situation, le client dialogue (sans le savoir) avec un faux serveur qui, lui-même, renvoie les données vers le serveur (qui pense les recevoir du vrai client). Lors de ces échanges le mot de passe envoyé par le client va être capté et enregistré par l'espion.

             +- Espion ------------------------+
             |                                 |
client --------> faux-serveur --> faux-client --------> Serveur
             |                                 |
             +---------------------------------+

Pour éviter que le mot de passe ne transite par le réseau, nous allons mettre en place une authentification basée sur un système de clef publique (installée sur le poste serveur) et de clef privée (installée sur le poste client).

Vous pouvez lire cette page ou chercher d'autres ressources pour comprendre la cryptographie à clé publique.

Authentification par clés

Utilisez l'agent d'authentification

Vérifiez que le démon ssh-agent (ou un autre processus du même type) est bien accessible par tous les processus de votre session en observant les variables d'environnement :

printenv | grep -i SSH

Ajoutez votre identité au cache géré par ssh-agent avec la commande ssh-add. Vérifiez ensuite cette ajout avec « ssh-add -l ». Vous devez maintenant être capable de vous connecter sur le compte de destination sans avoir à donner le mot de passe de votre clé privée.