Sécuriser l’accès SSH à un serveur Linux avec une clé ED25519

Introduction

Il y a plusieurs façons de s’authentifier via une connexion SSH auprès d’un serveur Linux, les 2 principales sont :

  • par mot de passe
  • par l’échange de clés publique et privée

Pour peu que vous utilisiez régulièrement le même mot de passe et qu’il soit piraté ou cracké par brute force, le mot de passe n’est clairement pas ce qu’il y a de mieux pour sécuriser l’accès à un serveur.

L’accès via des clés est clairement préférable mais encore faut-il choisir le bon type de clé et que le serveur SSH soit correctement sécurisé.

Pour vérifier la sécurité de votre serveur SSH, vous pouvez utiliser le site ssh-audit. Voici ce que ca donne avec une installation par défaut :

Création et mise en place d’une clé ssh ED25519

Commençons par créer une paire de clé privée/publique ED25519. Connectez-vous à votre serveur SSH en non-root et tapez la commande suivante :

Il vous sera demandé d’entrer une passphrase, c’est le mot de passe qui permettra de déchiffrer votre clé privée donc ne la perdez pas.

Explication des options utilisées :
-C : permet d’ajouter un commentaire à la clé. Je mets le type de clé et la date
-t : spécifie le type de clé
-o : sauvegarde la clé dans le nouveau format openssh au lieu de l’ancien format PEM
-a : plus le nombre est élevé et plus la vérification de la passphrase sera lente et donc résistante aux attaques par brut-force.
-f : précise le répertoire de sortie de la clé
-b : spécifie le nombre de bits de la clé. Avec un type RSA un minimum de 4096 bits est conseillé. Avec l’ed25519 une clé 521 bits est suffisamment costaud.

Dans votre dossier personnel un dossier .ssh/ a été créé et doit contenir 3 fichiers :

Si besoin, modifiez les permissions :

Si vous comptez vous connecter à ce serveur depuis votre poste client, ajoutez la clé publique dans le fichier autorized_keys.

Pour copier la clé publique sur un serveur cible, 2 solutions :

Ou bien copier le contenu du fichier id_ed25519.pub dans le fichier autorized_keys du ou des serveurs distants. Voici un exemple de contenu du fichier en question après avoir copié la clé :

Sécurisation du serveur openSSH

Commençons par faire une sauvegarde du fichier /etc/ssh/sshd_config et du fichier /etc/ssh/sshd_config.d/ubuntu.conf puisque dans mon cas le fichier de configuration se trouve dans /etc/ssh/sshd_config.d/ubuntu.conf.

Vérifier que la plupart des lignes du fichier /etc/ssh/sshd_config sont bien commentées et

Collez le contenu suivant dans le fichier /etc/ssh/sshd_config.d/ubuntu.conf :

Quelques explications des variables :

PermitRootLogin :: Refuser les login depuis le root.
PasswordAuthentication :: Refuser l’identification par mot de passe.
PubkeyAuthentication :: N’accepter QUE l’authentification par clé.
Port :: Changer le port par défaut du SSH.
LogLevel :: Augmentation du niveau de log.
Protocol :: On force l’usage du protocol niveau 2.
On retire le support ECDSA & RSA.
AllowUsers :: Déclaration des utilisateurs systèmes pouvant se connecter.
Prise en compte de l’IPv4 & IPv6.

ATTENTION : Vous pouvez redémarrer le service SSHD et ouvrir de nouvelles sessions pour vérfier l’accès mais surtout ne quittez pas votre session SSH actuelle avant d’être sûr que tout est bien paramétré, sous peine de perdre toute possibilité de connexion.

Une fois le fichier enregistré, relancez le service openssh.

Pour vous connecter en SSH, pensez à préciser le nouveau port avec l’option -p :

Améliorer la sécurité des échanges

3 éléments doivent encore être pris en compte pour sécuriser les échanges :

  • Ciphers : Le chiffrement utilisé.
  • KexAlgorithms : Les algorithmes utilisés pour l’échange de clé.
  • MACs : Message Authentication code, c’est le code qui accompagnent les données échangées dans le but d’assurer leur intégrité pour être certain qu’elles n’ont subies aucune altération pendant/après la transmission.

Commençons par régénérer la clé ed25519 du serveur :

Poursuivons avec le retrait des moduli Diffie-Hellman faibles :

Restriction des ciphers, clés d’échange et codes d’authentification :

Redémarrez le service

Tester le serveur

Vous pouvez maintenant relancer un test du serveur en allant sur le site ssh-audit. Voici ce que ce la devrait donner :

test securisation serveur SSH

Configuration pour un accès distant via Putty

Si comme moi vous utilisez Putty pour vous connecter au serveur, vous allez devoir convertir la clé privée avant de pouvoir vous connecter.

Commencez par récupérer les clés publique et privée sur votre ordinateur (ex dans Mes Documents/keys)

Téléchargez et lancez ensuite l’application Putty Key Generator (puttygen.exe)

Ouvrez votre clé privée et tapez ensuite le passphrase.

Un message vous indiquera que vous devez la convertir pour Putty en cliquant sur Save private key. Choisissez un nouveau nom (ex: ed25519-key-2020-08-22_priv_putty.ppk).

 

Configurer Putty

Lancez Putty et charger la session, modifiez le port si besoin puis allez dans Connection / SSH / Auth et sélectionnez votre clé privée.

Sauvegardez et lancez la session

Ressources

sshd-commands

wdt_ID Command Exemple Commentaire
1 sshd -T sshd -T Permet de tester la configuration du serveur SSH
2 ssh -Q cipher ssh -Q cipher Liste les ciphers disponibles sur le serveur
3 ssh -Q cipher-auth ssh -Q cipher-auth Liste les ciphers d’authentification
4 ssh -Q mac ssh -Q mac Liste les MAC
5 ssh -Q kex ssh -Q kex Liste les algorithmes
6 ssh -Q key ssh -Q key Liste les clés
Command Exemple Commentaire

Foire aux problèmes

Vous aimerez aussi...