Installer, configurer et sécuriser le serveur SSH : clés, port personnalisé, désactivation du root et fail2ban.
La première chose à faire est d'installer le logiciel serveur SSH sur votre machine Linux. C'est lui qui va écouter les connexions entrantes et permettre aux utilisateurs de se connecter à distance.
# On met d'abord à jour la liste des paquets disponibles (apt update)
# puis on met à jour les paquets déjà installés (apt upgrade)
# Le -y permet de répondre "oui" automatiquement aux questions
sudo apt update && sudo apt upgrade -y
# On installe le serveur SSH (le paquet s'appelle "openssh-server")
# C'est le logiciel qui va tourner en arrière-plan et attendre les connexions
sudo apt install openssh-server -y
# On vérifie que le service SSH est bien lancé et fonctionne
# "systemctl" est l'outil qui gère les services sous Linux
sudo systemctl status ssh
Le service doit afficher active (running) en vert. Si ce n'est pas le cas, lancez-le avec sudo systemctl start ssh.
Qu'est-ce qui s'est passé ? Votre serveur écoute maintenant sur le port 22 (le port par défaut de SSH). N'importe qui connaissant l'adresse IP de votre serveur peut tenter de s'y connecter — c'est pourquoi on va le sécuriser dans les étapes suivantes.
Au lieu de se connecter avec un mot de passe (facile à deviner par un pirate), on va utiliser un système de clés cryptographiques. Le principe est simple :
Sur votre machine locale (celle depuis laquelle vous vous connectez, pas le serveur) :
# On génère une paire de clés avec l'algorithme ED25519
# ED25519 est plus moderne et plus sécurisé que l'ancien RSA
# L'option -C ajoute un commentaire pour identifier la clé (optionnel)
ssh-keygen -t ed25519 -C "[email protected]"
Le terminal va vous demander :
~/.ssh/id_ed25519)Maintenant, il faut envoyer votre clé publique (le "cadenas") sur le serveur :
# Méthode la plus simple : ssh-copy-id fait tout automatiquement
# Il va se connecter au serveur (avec le mot de passe, une dernière fois)
# et copier votre clé publique dans le bon fichier
ssh-copy-id [email protected]
# Si ssh-copy-id n'est pas disponible, on peut le faire manuellement :
# 1. On lit le contenu de la clé publique (cat)
# 2. On l'envoie au serveur via SSH (ssh)
# 3. On l'ajoute au fichier authorized_keys (le fichier qui liste les clés autorisées)
cat ~/.ssh/id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
# On se connecte au serveur — cette fois, pas de mot de passe demandé !
# (juste la passphrase de votre clé si vous en avez défini une)
ssh [email protected]
Si ça fonctionne, félicitations ! Votre connexion par clé est en place. C'est beaucoup plus sécurisé qu'un mot de passe car une clé ED25519 est quasiment impossible à deviner.
Par défaut, SSH est configuré de manière "ouverte" pour être facile à utiliser. Mais en production (sur un vrai serveur), il faut le verrouiller. On va modifier le fichier de configuration principal :
# On ouvre le fichier de configuration du serveur SSH avec l'éditeur nano
# Ce fichier contrôle TOUT le comportement du serveur SSH
sudo nano /etc/ssh/sshd_config
Cherchez et modifiez les lignes suivantes (ou ajoutez-les si elles n'existent pas). Voici ce que fait chaque réglage :
# ─── CHANGER LE PORT ───
# Par défaut SSH écoute sur le port 22. Les pirates le savent et scannent
# ce port en permanence. En le changeant, on évite 99% des attaques automatiques.
Port 2222
# ─── DÉSACTIVER LA CONNEXION ROOT ───
# Le compte "root" a TOUS les droits sur le serveur. Si un pirate trouve
# le mot de passe root, c'est game over. On l'empêche de se connecter en SSH.
PermitRootLogin no
# ─── DÉSACTIVER L'AUTHENTIFICATION PAR MOT DE PASSE ───
# Les mots de passe peuvent être devinés par "brute force" (essayer des millions
# de combinaisons). Avec cette option désactivée, seules les clés SSH fonctionnent.
PasswordAuthentication no
# ─── ACTIVER L'AUTHENTIFICATION PAR CLÉ ───
# On s'assure que l'authentification par clé (qu'on a configurée à l'étape 2)
# est bien activée. C'est la seule méthode qu'on veut autoriser.
PubkeyAuthentication yes
# ─── LIMITER LES UTILISATEURS ───
# Seuls les utilisateurs listés ici pourront se connecter en SSH.
# Tous les autres seront refusés, même s'ils ont le bon mot de passe/clé.
AllowUsers admin deploy
# ─── TIMEOUT D'INACTIVITÉ ───
# Si quelqu'un se connecte et ne fait rien pendant 5 minutes (300 secondes),
# la connexion est coupée automatiquement. Sécurité + libération de ressources.
ClientAliveInterval 300
ClientAliveCountMax 0
# ─── LIMITER LES TENTATIVES ───
# Après 3 tentatives échouées, la connexion est coupée.
# Ça ralentit les attaques par brute force.
MaxAuthTries 3
Une fois les modifications faites, sauvegardez (Ctrl+O, Entrée, Ctrl+X dans nano) puis redémarrez le service pour appliquer les changements :
# On redémarre le service SSH pour que les nouveaux réglages prennent effet
# IMPORTANT : faites ça depuis une session déjà connectée, au cas où
sudo systemctl restart ssh
PasswordAuthentication, vérifiez que votre clé SSH fonctionne ! Ouvrez une deuxième session SSH (gardez la première ouverte) et testez la connexion par clé. Si ça ne marche pas, vous pourrez corriger depuis la première session.
C'est quoi fail2ban ? C'est un logiciel de sécurité qui surveille les logs de votre serveur. Si quelqu'un essaie de se connecter et échoue trop de fois (par exemple un pirate qui teste des mots de passe), fail2ban bloque automatiquement son adresse IP pendant un certain temps. C'est comme un vigile qui met les intrus à la porte.
# On installe fail2ban
sudo apt install fail2ban -y
# fail2ban utilise un fichier de config principal (jail.conf)
# Mais on ne modifie JAMAIS le fichier original (il serait écrasé lors d'une mise à jour)
# À la place, on crée une copie locale (.local) qui a priorité
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# On ouvre notre copie pour la configurer
sudo nano /etc/fail2ban/jail.local
Cherchez la section [sshd] dans le fichier et remplacez-la par cette configuration :
[sshd]
enabled = true # Active la protection SSH (true = activé)
port = 2222 # Le port SSH qu'on utilise (on l'a changé à l'étape 3)
filter = sshd # Utilise le filtre SSH pour détecter les échecs de connexion
logpath = /var/log/auth.log # Le fichier de log que fail2ban va surveiller
maxretry = 3 # Nombre de tentatives échouées avant de bannir l'IP
bantime = 3600 # Durée du bannissement : 3600 secondes = 1 heure
findtime = 600 # Fenêtre de temps : 3 échecs en 10 minutes (600 sec) = ban
En résumé : si quelqu'un échoue 3 fois en 10 minutes, son IP est bannie pendant 1 heure. Voici un récapitulatif :
| Paramètre | Valeur | Ce que ça veut dire |
|---|---|---|
maxretry | 3 | 3 tentatives ratées = bannissement |
bantime | 3600 | L'IP est bannie pendant 1 heure (en secondes) |
findtime | 600 | Les 3 tentatives doivent avoir lieu dans une fenêtre de 10 minutes |
# On redémarre fail2ban pour appliquer la configuration
sudo systemctl restart fail2ban
# On active fail2ban au démarrage (comme ça il redémarre automatiquement si le serveur reboot)
sudo systemctl enable fail2ban
Maintenant que tout est configuré, on vérifie que chaque élément fonctionne correctement :
# Vérifie que SSH écoute bien sur le port 2222 (et plus sur le 22)
# ss = outil qui affiche les connexions réseau
# -t = TCP, -l = en écoute, -n = numéros de port, -p = processus
sudo ss -tlnp | grep ssh
# Vérifie le statut de fail2ban pour SSH
# On doit voir "Currently banned: 0" (ou plus si des IP sont bloquées)
sudo fail2ban-client status sshd
# Affiche les IP actuellement bannies
sudo fail2ban-client status sshd | grep "Banned IP"
# Teste la connexion avec le nouveau port (2222 au lieu de 22)
# L'option -p spécifie le port à utiliser
ssh -p 2222 [email protected]
Taper ssh -p 2222 [email protected] à chaque fois, c'est long. On peut créer un raccourci dans le fichier ~/.ssh/config (sur votre machine locale) :
# Créez ou éditez le fichier ~/.ssh/config sur votre machine locale
Host serveur-labo # Le nom du raccourci (vous choisissez)
HostName 10.0.10.50 # L'adresse IP (ou nom DNS) du serveur
User admin # L'utilisateur avec lequel se connecter
Port 2222 # Le port SSH personnalisé
IdentityFile ~/.ssh/id_ed25519 # Le chemin vers votre clé privée
Ensuite, il suffit de taper ssh serveur-labo et c'est tout !