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 :

  1. Changer le mot de passe root pour quelque chose de plus robutes

  2. Créer un utilisateur normal

  3. Désactiver les connexions root

  4. Apprendre à se rendre temporairement root

Changement de Mot de Passe

Pour changer le mot de passe du compte courant, on utilisera la commande suivante :

1
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) :

1
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 :

1
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 :

1
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.

1
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.

1
sudoedit /etc/ssh/sshd_config

On pourra ensuite relancer le démon SSH pour prendre en compte cette modification :

1
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

1
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 :

1
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 :

1
sudoedit /etc/ssh/sshd_config

et dé-commenter les lignes

1
#PubkeyAuthentication yes
2
#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 :

1
sudoedit /etc/ssh/sshd_config

et éditer la ligne

1
#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

1
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 :

1
nano ~/.ssh/config

et ajouter les lignes suivantes en remplaçant par les bonnes valeurs

1
Host <PETITNOM>
2
    HostName <VOTREVPS>
3
    User <LOGIN>
4
    Port <PORT>

Emprisoner