Bonnes Pratiques de SSH
Attention :
Exposer un ordinateur sur l'internet public n'est pas sans danger. Des scripts tournent en permanence pour scanner les vulnérabilités de toutes les IP existantes. SSH est à ce titre une porte d'entrée privilégié car les configurations par défaut sont les mêmes chez tout le monde. Dans les prochaines parties, nous allons apprendre à nous protéger de 99% de ces attaques.
Arrêter de se Connecter en Root
Pour commencer, c'est une mauvaise idée de laisser root
, le super-administrateur se connecter directement depuis l’extérieur, d'autant plus avec un mot de passe aussi faible. En effet, l'image suivant montre les combinaisons de login/mot-de-passe les plus brut-forcées.
On préférera donc d'abord se connecter avec un utilisateur normal puis se connecter avec le super utilisateur. Pour cela, nous aurons besoin de quatre étapes :
Changer le mot de passe
root
pour quelque chose de plus robutesCréer un utilisateur normal
Désactiver les connexions
root
Apprendre à se rendre temporairement
root
Changement de Mot de Passe
Pour changer le mot de passe du compte courant, on utilisera la commande suivante :
passwd
Création d'un nouvel utilisateur
Pour créer un nouvel utilisateur, nous utiliserons la commande suivante qui vous posera quelques questions (mot de passe, nom complet, etc) :
adduser <VOTRENOM>
Ensuite, prenons un peu d'avance sur le point prochain et ajoutons notre nouvel utilisateur au groupe sudo
, c'est-à-dire ceux capables de se rendre administrateurs :
usermod -aG sudo <VOTRENOM>
Déconnectez vous de cette session et reconnectez vous avec le nouvel utilisateur.
Se rendre root
Rendez-vous désormais root
grâce à la commande suivante :
sudo su
Ce qui aura pour effet de vous connecter en tant que root
. Le mieux est encore de ne se rendre root que quand cela est nécessaire en faisant.
sudo <COMMANDE>
Empêcher les connexions root
Finalement, pour désactiver les connexion root
, il faudra éditer le fichier de configuration du démon SSH avec la commande suivante. Cette fois ci, cherchez par vous même quelle ligne éditer afin de désactiver les connexion root
.
sudoedit /etc/ssh/sshd_config
On pourra ensuite relancer le démon SSH pour prendre en compte cette modification :
sudo systemctl restart sshd
Connexion par Clé
Jusqu'alors, nous nous somme connecté en rentrant notre mot de passe à chaque fois. En plus d'être rapidement fastidieux, la connexion par mot de passe n'est pas le plus sécurisé.
Pour faire d'une pierre deux coups, nous allons mettre en place la connexion par clé, c'est-à-dire que notre authentification se fera désormais à l'aide d'un couple clé privée - clé publique. Le serveur connaîtra notre clé publique qui, étant liée mathématiquement à notre clé privée, nous identifiera de manière sure sans jamais avoir à quitter notre machine.
Pour mettre en place une identification par clé, il suffit de nous créer une paire de clés sur votre machine (et non VPS) avec
ssh-keygen
qui après nous avoir posé quelques questions générera une paire ~/.ssh/id_rsa
et ~/.ssh/id_rsa.pub
. Pour plus de sécurité on peut associer la clé à un mot de passe. La première est la clé privée à ne jamais dévoiler, tandis que la .pub
peut et doit l'être. Pour envoyer notre clé publique sur le VPS :
ssh-copy-id login@host
Il n'y aura, par la suite plus jamais à rentrer de mot de passe pour s'authentifier.
Remarque :
Dans cette API nous n'aurons besoin que d'une seule clé, même pour plusieurs VPS : un seul ssh-keygen
et autant de ssh-copy-id
que nécessaire. D'autres cas d'usage pourraient nécessiter plusieurs clés (une personnelle, professionnelle, associative, etc) mais cela dépasse le cadre de cette API.
Empêcher les Connexions par Mot-de-Passe
Maintenant que nous pouvons nous connecter par clé, on peut désactiver la connexion par mot de passe afin d'empêcher toutes tentatives de brut-force. Pour cela, nous allons modifier la configuration du démon SSH :
sudoedit /etc/ssh/sshd_config
et dé-commenter les lignes
#PubkeyAuthentication yes
#PasswordAuthentication no
Attention :
Ne perdez jamais votre clé ou vous ne pourrez plus vous connecter à cette machine. Vous ne pourrez également vous connecter que depuis une machine ayant le bon jeu de clé. Il existe des options pour autoriser la connexion par mot de passe depuis certaines adresses IP mais nous ne couvrirons pas cet aspect ici.
Changer le Port SSH
Attention :
Cette partie est très importante à faire dans des cas réels, mais le fonctionnement du réseau à l'UTC nous empêche de la réaliser.
La partie n'est donc pas à faire pour cette API, mais tâchez de la garder à l'esprit si vous le refaites dans un autre cadre.
Le port SSH par défaut est 22, et ce sera le principal point d'attaque de la plupart des scripts. En bougeant simplement notre port SSH vert un autre port arbitraire, on se protège de la majorité des attaques automatisées. Pour cela, il faudra changer la configuration du démon SSH et changer la manière dont on se connecte au VPS.
Changement de la Configuration SSH sur le VPS
Nous allons retourner changer la configuration du démon avec :
sudoedit /etc/ssh/sshd_config
et éditer la ligne
#Port 22
avec le port de notre choix (dé préférence > 1000), que l'on dénotera <PORT>
par la suite.
Se Connecter sur le Nouveau Port
Maintenant que le serveur expose SSH sur un autre port, il faudra s'y connecter avec l'option -p
ssh -p <PORT> login@host
Remarque :
Pour se simplifier la vie, on peut se créer un fichier de configuration sur votre machine qui contiendra le login, hôte et port pour un nom donné. Pour cela :
nano ~/.ssh/config
et ajouter les lignes suivantes en remplaçant par les bonnes valeurs
Host <PETITNOM>
HostName <VOTREVPS>
User <LOGIN>
Port <PORT>