Pour continuer notre série je vous propose aujourd’hui un petit guide permettant de mieux sécuriser un serveur SSH avec une authentification par clés. Une authentification par mot de passe peut se révéler compromise si une personne venait a connaitre votre mot de passe ou si votre mot de passe n’était pas assez fort.
Nous allons donc commencer par générer un jeu de clés : une clé publique et une clé privée. La clé publique devra être présente sur tous les serveurs sur lesquels vous souhaiterez utiliser une authentification par clés, la clé privée quant à elle devra être présente sur tous les clients depuis lesquels vous vous connecterez. Afin de rajouter une couche de sécurité nous utiliserons une passphrase, une sorte de mot de passe assigné à votre clé privée.
Sécuriser un serveur SSH avec une authentification par clé : Génération des clés SSH
Sur un client windows
Sous Windows pour pouvoir générer un jeu de clés SSH il faut commencer par télécharger PuTTY Gen. Lancez le programme et sélectionnez le type de clés que vous souhaitez utiliser. L’utilisation de clés “SSH-1 (RSA)” est à proscrire, il vous faudra donc choisir entre “SSH-2 RSA” et “SSH-2 DSA”. Vous pouvez également choisir le nombre de bits pour vos clés SSH (ne pas descendre sous les 2048 bits). Une fois votre choix fait, vous pouvez cliquer sur « Generate »
Puis vous devrez bouger votre souris afin de générer de l’entropie et cela jusqu’à ce que la barre de chargement soit totalement remplie
Une fois ce processus terminé vos clés SSH sont générées. Avant de les enregistrer nous allons ajouter une couche de sécurité en configurant une passphrase. Vous pouvez aussi si vous le souhaitez ajouter un commentaire.
Copiez et collez dans un fichier texte toutes les lignes sous « Public key for pasting into OpenSSH authorized_key file » : c’est votre clé publique. Si vous deviez effacer ou tout simplement perdre ce fichier, il est tout a fait possible de récupérer votre clé publique avec l’aide de votre clé privée via PuTTY Gen : File > Load private key.
Sauvegardez votre clé privée en cliquant sur Save Private Key. Cette clé doit restée secrète !
Sur un client debian / ubuntu
Ouvrez un terminal et lancez la commande
ssh-keygen -t rsa -N "votre passphrase"
Le paramètre -t nous permet de spécifier le type de clés SSHque nous souhaitons générer. -t rsa permet de générer un jeu de clés SSH utilisant le protocole SSH-2 RSA tandis que -t dsa utilisera le protocole SSH-2 DSA. Le paramètre -N permet de définir directement une passphrase. Voici un exemple de génération de clés SSH:
noobunbox@ubuntu-serveur:~$ ssh-keygen -t rsa -N "ma_passphrase" Generating public/private rsa key pair. Enter file in which to save the key (/home/noobunbox/.ssh/id_rsa): Your identification has been saved in /home/noobunbox/.ssh/id_rsa. Your public key has been saved in /home/noobunbox/.ssh/id_rsa.pub. The key fingerprint is: 44:eb:19:0f:7f:eb:ff:c3:ef:82:36:9e:7b:61:23:f3 noobunbox@ubuntu-serveur The key's randomart image is: +--[ RSA 2048]----+ | . | | . . | | = | | o * | | S o . | | .o.+ | | .*.o | | .+.Eo | | o==.+*| +-----------------+
Ce résultat nous indique ou sont stockées nos clés SSH
Your identification has been saved in /home/noobunbox/.ssh/id_rsa. Your public key has been saved in /home/noobunbox/.ssh/id_rsa.pub.
Sécuriser un serveur SSH avec une authentification par clé : Envoi de la clé publique sur le serveur
Sur un client windows
Connectez vous sur votre serveur via PuTTY et modifions / créons le fichier authorized_keys
nano ~/.ssh/authorized_keys
Collez dans ce fichier votre clé publique que vous aviez sauvegardée. Enregistrez et fermez le fichier. Modifiez ensuite les permissions.
chmod 600 ~/.ssh/authorized_keys
Sur un client debian / ubuntu
La manipulation est bien plus pratique depuis ce type de client grâce a la commande ssh-copy-id. Bien entendu vous devrez remplacer <username> par votre nom d’utilisateur et ipadress par l’adresse de votre serveur.
ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<ipaddress>
Si vous avez modifiez le port d’écoute de votre serveur SSH (c’est bien :)) il faudra utiliser la commande suivante, en remplaçant <num_port> par le port qui convient
ssh-copy-id -i ~/.ssh/id_rsa.pub "<username>@<ipaddress> -p <num_port>"
Sécuriser un serveur SSH avec une authentification par clé : Forcer l’authentification par clé
Pour cela rien de plus simple, commençons par modifier le fichier de configuration du serveur SSH
sudo nano /etc/ssh/sshd_config
Modifiez la variable PasswordAuthentification, celle-ci doit être configurée sur no et dé-commentée
PasswordAuthentification no
Sauvegardez et fermez le fichier, relancez le serveur SSH
sudo service ssh reload
Ouvrez une seconde connexion sur votre serveur (ne fermez pas la première, elle pourrait vous sauvez la vie en cas de mauvaise manip dans votre fichier de configuration) et vérifiez que tout fonctionne.