Aller au contenu
StealthRDP
Administration de VPS

Sécuriser SSH sur un VPS Linux : la check-list de durcissement

Sécuriser SSH sur un nouveau VPS Ubuntu 24.04 pas à pas : clés SSH, réglages de sshd, UFW et Fail2ban, avec un test à chaque étape pour ne pas perdre l’accès.

Publié le

9 min de lecture

Cette check-list montre comment sécuriser SSH sur un nouveau VPS Ubuntu 24.04 LTS : vous partez de connexions en root par mot de passe pour arriver à des connexions par clé uniquement, réservées à un seul compte nominatif, le tout protégé par un pare-feu et Fail2ban. Chaque étape risquée comporte un test à effectuer sans fermer votre session en cours, et les différences avec Debian 12 sont signalées au fil du texte. Si votre serveur tourne sous Windows, nos conseils pour sécuriser le Bureau à distance abordent les mêmes points pour RDP.

La check-list de sécurisation SSH en un coup d’œil

Le durcissement SSH d’un nouveau serveur se fait en onze étapes, et leur ordre a son importance : assurez-vous que la connexion par clé fonctionne pour un utilisateur sudo avant de désactiver les connexions root et par mot de passe, et autorisez SSH avant d’activer le pare-feu.

Étape Risque de perte d’accès
1. Mises à jour de sécurité automatiques Aucun
2. Un utilisateur sudo Aucun
3-4. Connexion par clé SSH Aucun
5-7. Ni connexion root ni mot de passe Oui : testez une deuxième connexion
8. Un nouveau port SSH (facultatif) Oui
9. Pare-feu UFW Oui
10. Fail2ban Il peut bannir votre propre adresse
11. Services inutilisés désactivés Aucun

Préparer le serveur : mises à jour et utilisateur sudo

Si vous travaillez en root, sudo est facultatif dans les deux premières étapes. Dans tout ce guide, remplacez deploy par votre nom d’utilisateur et 203.0.113.10 par l’adresse IP de votre serveur.

1. Mettre à jour le système et activer les mises à jour de sécurité automatiques

Commencez par installer les mises à jour en attente : apt update actualise les listes de paquets et apt upgrade installe les nouvelles versions. [1]

Mettre à jour le système
sudo apt update
sudo apt upgrade

Sous Ubuntu, les mises à jour de sécurité s’installent automatiquement grâce au paquet unattended-upgrades, installé par défaut, qui s’exécute une fois par jour. Les deux valeurs du fichier /etc/apt/apt.conf.d/20auto-upgrades doivent être à « 1 », et une exécution à blanc indique ce que l’outil installerait. [1]

Vérifier les mises à jour automatiques
cat /etc/apt/apt.conf.d/20auto-upgrades
sudo unattended-upgrade --dry-run -v
Contenu attendu de /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

unattended-upgrades ne redémarre pas le serveur de lui-même, car Unattended-Upgrade::Automatic-Reboot vaut false par défaut : redémarrez donc manuellement quand une mise à jour l’exige. [1] Sous Debian 12, si le paquet ou le fichier est absent, installez unattended-upgrades et créez le fichier avec les deux lignes ci-dessus.

2. Créer un utilisateur sudo autre que root

Effectuez les tâches d’administration avec un compte nominatif et sudo, qui demande le mot de passe de cet utilisateur, et non celui de root. Les membres du groupe sudo obtiennent par ce biais un accès root complet. [2]

Créer l’utilisateur et l’ajouter au groupe sudo
sudo adduser deploy
sudo adduser deploy sudo

adduser demande un mot de passe et quelques informations facultatives. [2] Choisissez un mot de passe long : SSH utilisera des clés, mais sudo continuera de le demander. Vérifiez ensuite le compte : sudo whoami doit afficher root.

Vérifier sudo avec le nouvel utilisateur
su - deploy
sudo whoami

Sous Debian 12, si la commande sudo est absente, installez-la d’abord en root avec apt install sudo.

Configurer la connexion par clé SSH

3. Générer une clé ed25519 sur votre ordinateur

Créez la paire de clés sur votre propre ordinateur, pas sur le serveur. Ubuntu recommande le type ed25519, dont les clés sont plus courtes et moins coûteuses en calcul, et ssh-keygen demande une phrase de passe qui protège la clé privée. [3]

Linux ou macOS
ssh-keygen -t ed25519

Gardez le nom de fichier par défaut. La clé privée est ~/.ssh/id_ed25519 ; la clé publique, celle que vous copiez sur les serveurs, est ~/.ssh/id_ed25519.pub. [3]

Sous Windows, lancez la même commande dans PowerShell ; elle enregistre la paire de clés dans le dossier .ssh de votre profil utilisateur. Microsoft déconseille de laisser la phrase de passe vide et prévient que quiconque obtient la clé privée peut se connecter sous votre identité. [4]

Windows PowerShell
ssh-keygen -t ed25519

4. Copier la clé publique sur le serveur

Sous Linux et macOS, ssh-copy-id ajoute votre clé publique à la fin du fichier ~/.ssh/authorized_keys de l’utilisateur sur le serveur. [3]

Linux ou macOS
ssh-copy-id deploy@203.0.113.10

Le guide de Microsoft, lui, copie les clés avec PowerShell ou scp. [4] Pour un serveur Linux, cette ligne ajoute votre clé et rend le dossier et le fichier modifiables par vous seul :

Windows PowerShell
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | ssh deploy@203.0.113.10 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Le service sshd vérifie ces droits avant d’accepter une connexion, grâce à l’option StrictModes, activée par défaut. [5] Lancez ensuite ssh deploy@203.0.113.10 dans un nouveau terminal : vous devriez vous connecter sans saisir le mot de passe du compte. Sinon, suivez le journal SSH du serveur pendant que vous réessayez : [3]

Sur le serveur
sudo journalctl -fu ssh.service

Verrouiller sshd : connexion root, mots de passe et utilisateurs

Les étapes suivantes désactivent les connexions root et par mot de passe. Ne commencez que lorsque la connexion par clé fonctionne avec le nouvel utilisateur, et gardez cette session ouverte jusqu’à ce qu’une deuxième connexion réussisse.

5. Placer vos réglages dans un fichier dédié

Sous Ubuntu, /etc/ssh/sshd_config commence par Include /etc/ssh/sshd_config.d/*.conf, et OpenSSH retient la première valeur qu’il lit pour la plupart des paramètres : les fichiers de ce dossier l’emportent donc sur le fichier principal. [3] Les fichiers inclus sont lus dans l’ordre lexicographique et, pour chaque mot-clé, c’est la première valeur obtenue par sshd qui s’applique [5] : nommez donc le vôtre 00-hardening.conf.

/etc/ssh/sshd_config.d/00-hardening.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
AllowUsers deploy

D’après la page de manuel de sshd_config :

  • PermitRootLogin no empêche root de se connecter en SSH. La valeur par défaut, prohibit-password, refuse les mots de passe pour root mais accepte toujours les clés. [5]
  • PasswordAuthentication no désactive les connexions par mot de passe, autorisées par défaut. [5]
  • KbdInteractiveAuthentication no désactive l’authentification interactive au clavier (keyboard-interactive), une méthode distincte, elle aussi active par défaut ; l’option s’appelait auparavant ChallengeResponseAuthentication. [5]
  • AllowUsers deploy (facultatif) ne laisse se connecter que les utilisateurs indiqués. Contrairement à la plupart des mots-clés, chaque ligne AllowUsers s’ajoute à la liste. [5] Vérifiez bien l’orthographe du nom, sinon personne ne pourra se connecter.

Désormais, protégez le compte sudo avec le même soin que root : les notes du paquet openssh d’Ubuntu considèrent tout compte qui permet de passer root comme équivalent à root face aux attaques extérieures. [6] Sous Debian 12, vérifiez d’abord la présence de la ligne Include avec grep -n Include /etc/ssh/sshd_config.

6. Rechercher les fichiers qui réactivent les mots de passe

Comme la première valeur l’emporte, tout fichier qui précède le vôtre dans l’ordre de tri a la priorité sur lui. Examinez le dossier :

Trouver tous les fichiers qui définissent ces options
ls /etc/ssh/sshd_config.d/
sudo grep -riE 'passwordauthentication|kbdinteractive|permitrootlogin|allowusers' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/

Sur les images cloud, cloud-init écrit les paramètres SSH qu’il gère dans /etc/ssh/sshd_config.d/50-cloud-init.conf dès lors que sshd_config inclut ce dossier. [7] Si ce fichier contient PasswordAuthentication yes, il l’emporte sur tous les fichiers classés après lui : c’est pourquoi le nom du vôtre commence par 00. Remplacez-y aussi la valeur par no, pour que les fichiers concordent.

7. Tester la configuration et redémarrer SSH

Testez les fichiers avant de redémarrer : un paramètre erroné peut empêcher sshd de démarrer, et SSH est peut-être votre seule porte d’entrée. [3]

Tester, puis redémarrer
sudo sshd -t
sudo systemctl restart ssh.service

Corrigez d’abord tout ce que signale sshd -t. Après le redémarrage, gardez votre session ouverte et testez depuis un deuxième terminal :

Depuis votre ordinateur, dans un nouveau terminal
ssh deploy@203.0.113.10
ssh root@203.0.113.10

La première connexion doit réussir et la seconde doit être refusée. Si votre connexion échoue, annulez la modification dans la session restée ouverte et consultez le journal SSH vu à l’étape 4. [3]

Faut-il changer le port SSH ?

Seulement si vous voulez moins de bruit dans vos journaux. Avec un nouveau port, SSH quitte le port par défaut, le 22 [5] : les bots qui ne testent que le port 22 passent alors à côté, mais un scan de tous les ports trouve quand même SSH. Ce sont les clés et la désactivation des mots de passe qui assurent l’essentiel de la protection.

8. Changer le port sous Ubuntu 24.04 (facultatif)

Si UFW ou un autre pare-feu est déjà actif, autorisez d’abord le nouveau port. Gardez votre session ouverte jusqu’à ce qu’une connexion sur le nouveau port fonctionne.

Sous Ubuntu 24.04, c’est ssh.socket qui écoute sur le port 22, grâce à l’activation par socket de systemd. Un générateur convertit les lignes Port de sshd_config et de ses fichiers inclus en paramètres du socket : après un changement de port, il faut donc recharger systemd et redémarrer ssh.socket. [6]

Comme sshd accepte plusieurs lignes Port, [5] gardez le 22 le temps de tester le nouveau port :

À ajouter dans /etc/ssh/sshd_config.d/00-hardening.conf
Port 22
Port 2222
Appliquer le changement de port sous Ubuntu 24.04
sudo sshd -t
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket

Testez le nouveau port depuis un deuxième terminal. Supprimez ensuite Port 22, relancez les trois commandes et utilisez le port 2222 aux étapes 9 et 10.

Depuis votre ordinateur, dans un nouveau terminal
ssh -p 2222 deploy@203.0.113.10

Sous Debian 12, vérifiez d’abord si le socket est utilisé. S’il est inactif, il suffit de redémarrer le service pour appliquer la modification.

Debian 12
systemctl is-active ssh.socket
sudo systemctl restart ssh.service

Pare-feu, Fail2ban et ports ouverts

9. Autoriser SSH dans UFW, puis l’activer

L’activation d’UFW peut couper votre session SSH, et UFW bloque ensuite tous les ports que vous n’avez pas autorisés. Ajoutez la règle SSH avant de lancer ufw enable.

UFW est installé mais désactivé et, une fois activé, il refuse par défaut le trafic entrant. Sa page de manuel prévient que ufw enable peut couper les connexions SSH : ajoutez donc d’abord la règle SSH. [8]

Pour SSH, utilisez limit plutôt que allow. Une règle limit autorise bien les connexions, mais refuse celles d’une adresse qui tente d’en ouvrir 6 ou plus en 30 secondes. N’ajoutez pas les deux règles, car UFW applique la première règle qui correspond. [8]

Limiter la fréquence des connexions SSH, puis activer UFW
sudo ufw limit 22/tcp
sudo ufw enable
sudo ufw status verbose

UFW demande une confirmation quand vous l’activez depuis une session SSH. [8] Si vous avez changé le port SSH, limitez plutôt 2222/tcp. Sous Debian 12, installez d’abord UFW si la commande est absente. Pour ne plus exposer SSH du tout sur Internet, n’y accédez que par un réseau privé WireGuard. Pour une protection plus en amont, consultez notre check-list de protection DDoS pour l’hébergement VPS.

10. Ajouter Fail2ban et sa jail sshd

Fail2ban peut bannir votre propre adresse IP après plusieurs échecs de connexion. Si vous avez une adresse IP fixe, ajoutez-la à ignoreip, et gardez votre session ouverte pendant vos tests.

Sous Ubuntu 24.04, le paquet fournit /etc/fail2ban/jail.d/defaults-debian.conf, qui active la jail sshd, définit backend = systemd et bannit via nftables. [9] Le backend systemd lit le journal de systemd : la jail n’a donc besoin d’aucun fichier journal distinct. [10]

Installer Fail2ban et lire les réglages par défaut du paquet
sudo apt install fail2ban
cat /etc/fail2ban/jail.d/defaults-debian.conf

Le jail.conf d’origine de Fail2ban bannit une adresse pendant 10 minutes dès qu’elle cumule 5 échecs en 10 minutes, et vous demande de ne pas modifier ce fichier : placez vos changements dans jail.local. [10]

/etc/fail2ban/jail.local
[sshd]
enabled = true
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
ignoreip = 127.0.0.1/8 ::1 198.51.100.7

Remplacez 198.51.100.7 par votre propre adresse fixe, ou supprimez-la. La jail par défaut utilise port = ssh : ajoutez donc port = 2222 si vous avez changé le port SSH. [10] Sous Debian 12, gardez ici backend = systemd et installez python3-systemd, la bibliothèque Python de systemd qu’utilise ce backend. [10] Redémarrez ensuite Fail2ban et vérifiez qu’il fonctionne :

Appliquer les réglages
sudo systemctl restart fail2ban
sudo systemctl status fail2ban

11. Vérifier les autres services à l’écoute

Chaque port ouvert est une porte d’entrée de plus. La liste des ports en écoute fournie par UFW indique chaque port TCP en écoute et chaque port UDP ouvert, avec son adresse (* signifie toutes les interfaces), le programme associé et les règles qui s’appliquent. [8]

Lister les ports en écoute et leurs règles
sudo ufw show listening

Un service qui écoute sur 127.0.0.1 n’est joignable que depuis le serveur lui-même. Désactivez les services exposés dont vous n’avez pas besoin avec systemctl disable --now, comme le font les notes openssh d’Ubuntu pour ssh.socket. [6]

Désactiver un service inutile
sudo systemctl disable --now SERVICE_NAME

Si vous perdez l’accès

La plupart du temps, on perd l’accès pour avoir fermé trop tôt la dernière session qui fonctionnait. Si cela vous arrive malgré tout :

  • Utilisez une session encore ouverte pour annuler la dernière modification, lancez sshd -t et redémarrez SSH.
  • Patientez si UFW vous a bloqué : sa règle limit compte les tentatives sur 30 secondes. [8]
  • Attendez la fin d’un bannissement Fail2ban, dont la durée est fixée par bantime, soit une heure avec le jail.local ci-dessus, [10] ou connectez-vous depuis un autre réseau, par exemple le partage de connexion de votre téléphone.
  • En dernier recours, réinstallez le serveur. Chez StealthRDP, le Centre d’aide explique comment réinstaller un serveur depuis l’espace client : choisissez le système d’exploitation, comptez 3 à 5 minutes et connectez-vous en SSH. Une réinstallation repart d’un système vierge : vous devrez donc restaurer vos données depuis une sauvegarde ; notre guide des sauvegardes automatiques de VPS vous aide à en prévoir une avant d’en avoir besoin.

Un doute ? Le support StealthRDP est disponible 24/7 sur Telegram, par ticket depuis l’espace client et à l’adresse info@stealthrdp.com.

Questions fréquentes

Qu’est-ce que le durcissement SSH ?

Le durcissement SSH consiste à modifier les réglages du serveur SSH pour réduire le nombre de comptes et de méthodes de connexion qui permettent d’entrer : des clés au lieu des mots de passe, pas de connexion root et, éventuellement, une liste d’utilisateurs autorisés. Par défaut, OpenSSH accepte les connexions par mot de passe et l’authentification interactive au clavier : c’est donc par là qu’il faut commencer. [5]

Pourquoi PasswordAuthentication no ne fonctionne-t-il pas sous Ubuntu ?

Un autre fichier le définit sans doute avant le vôtre. Le sshd_config d’Ubuntu inclut /etc/ssh/sshd_config.d/ tout en haut du fichier, et OpenSSH garde la première valeur qu’il trouve. [3] Sur les images cloud, vérifiez le fichier 50-cloud-init.conf de ce dossier, dans lequel cloud-init écrit ses réglages SSH. [7]

Changer le port SSH améliore-t-il la sécurité ?

Un peu seulement. Sur un autre port que le 22 par défaut, SSH échappe aux bots qui ne testent que ce port, mais un scan complet des ports détecte quand même le service. [5] Les clés et la désactivation des mots de passe sont bien plus efficaces.

Faut-il désactiver la connexion root en SSH ?

Oui, dès qu’un utilisateur sudo peut se connecter avec une clé. PermitRootLogin no refuse toute connexion de root, alors que la valeur par défaut, prohibit-password, accepte encore les connexions de root par clé. [5] Les notes openssh d’Ubuntu ajoutent que votre compte sudo mérite la même vigilance que root. [6]

Fail2ban est-il nécessaire si SSH n’accepte que les clés ?

Fail2ban est facultatif, mais utile : il bannit les adresses qui multiplient les échecs de connexion, par défaut après 5 échecs en 10 minutes. [10] Sous Ubuntu 24.04, le paquet active sa jail sshd par défaut. [9]

UFW est-il activé par défaut sous Ubuntu ?

Non. UFW est installé mais désactivé et, une fois activé, il refuse les connexions entrantes qu’aucune règle n’autorise. [8] Ajoutez une règle pour SSH avant de lancer ufw enable.

Sources et références
  1. Automatic updates — Ubuntu Server documentation (consulté le 2026-11-03)
  2. User management — Ubuntu Server documentation (consulté le 2026-11-03)
  3. OpenSSH server — Ubuntu Server documentation (consulté le 2026-11-03)
  4. Key-based authentication in OpenSSH for Windows — Microsoft Learn (consulté le 2026-11-03)
  5. sshd_config(5): OpenSSH daemon configuration file — OpenBSD manual pages (consulté le 2026-11-03)
  6. openssh: debian/README.Debian (ubuntu/noble-updates) — Ubuntu (Launchpad) (consulté le 2026-11-03)
  7. cloudinit/ssh_util.py — GitHub (canonical/cloud-init) (consulté le 2026-11-03)
  8. ufw - program for managing a netfilter firewall — Ubuntu Manpages (consulté le 2026-11-03)
  9. fail2ban: debian/debian-files/jail.d_defaults-debian.conf (ubuntu/noble-updates) — Ubuntu (Launchpad) (consulté le 2026-11-03)
  10. fail2ban 1.0.2: config/jail.conf — GitHub (fail2ban/fail2ban) (consulté le 2026-11-03)

À lire aussi