🎯 Objectif de cet article
Nous allons remplacer l’authentification par mot de passe (peu sûre) par une clé SSH et déplacer le service sur un port non standard. Enfin, nous appliquerons des règles de pare-feu pour limiter les tentatives de connexion.
⏱️ Durée estimée : 30 minutes
📋 Prérequis
- Un VPS sous Debian/Ubuntu avec un accès SSH initial (mot de passe)
- Un utilisateur non-root disposant des droits
sudo - Un pare-feu UFW installé (
sudo apt install ufw)
1️⃣ Changer le port SSH par défaut
Le port 22 est scanné en permanence par les robots. Nous allons utiliser un port élevé (ex. 31457) pour réduire le bruit.
🔧 Modification de la configuration
sudo nano /etc/ssh/sshd_configAjoutez (ou décommentez) les lignes suivantes :
Port 22
Port 31457On garde temporairement le port 22 pour éviter de perdre l’accès.
🛡️ Ouverture du nouveau port dans le pare-feu
sudo ufw allow 31457/tcp
sudo ufw status🔄 Redémarrage du service SSH
sudo systemctl restart sshd🧪 Test dans un nouveau terminal
ssh -p 31457 votre_utilisateur@adresse_ipSi la connexion réussit, supprimez le port 22 de la configuration et du pare-feu.
sudo nano /etc/ssh/sshd_config # ne garder que "Port 31457"
sudo systemctl restart sshd
sudo ufw delete allow 22/tcpPour une protection supplémentaire, passez le nouveau port en mode LIMIT (blocage après 6 tentatives en 30 secondes) :
sudo ufw limit 31457/tcp2️⃣ Remplacer le mot de passe par une clé SSH
Une clé SSH offre une sécurité bien supérieure : la clé privée ne quitte jamais votre ordinateur.
🔑 Génération de la clé (sur votre machine locale)
ssh-keygen -t ed25519 -C "commentaire" -f ~/.ssh/id_ed25519_vps- -t ed25519 : algorithme moderne et sécurisé
- -f : chemin personnalisé (vous pouvez aussi laisser le défaut)
Lors de la création, mettez une passphrase forte (elle protège la clé privée en cas de vol).
📤 Copie de la clé publique sur le VPS
ssh-copy-id -p 31457 -i ~/.ssh/id_ed25519_vps.pub votre_utilisateur@adresse_ipCette commande ajoute automatiquement la clé publique dans ~/.ssh/authorized_keys du serveur. Vous devrez saisir le mot de passe une dernière fois.
🧪 Test de la connexion par clé
ssh -i ~/.ssh/id_ed25519_vps -p 31457 votre_utilisateur@adresse_ipSi vous avez défini une passphrase, elle vous sera demandée (une fois par session si vous utilisez un agent SSH).
3️⃣ Simplifier la connexion avec le fichier ~/.ssh/config
Sur votre machine locale, créez ou modifiez le fichier ~/.ssh/config :
Host mon-vps
HostName adresse_ip
User votre_utilisateur
Port 31457
IdentityFile ~/.ssh/id_ed25519_vpsEnsuite, connectez-vous simplement avec :
ssh mon-vpsPour retenir la passphrase en mémoire pendant toute la session, ajoutez dans la section Host * :
AddKeysToAgent yes4️⃣ Durcir la configuration SSH (optionnel)
Une fois que la clé fonctionne, vous pouvez désactiver l’authentification par mot de passe pour éliminer tout risque de brute-force.
sudo nano /etc/ssh/sshd_config
# Modifier ou ajouter :
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM nosudo systemctl restart sshd5️⃣ Protéger avec Fail2ban
Fail2ban bannit les IP qui multiplient les échecs de connexion.
sudo apt install fail2ban
sudo systemctl enable --now fail2banCréez un fichier de configuration local pour SSH :
sudo nano /etc/fail2ban/jail.local[sshd]
enabled = true
port = 31457
maxretry = 3
bantime = 1hsudo systemctl restart fail2ban✅ Résultat final
| Mesure | Avant | Après |
|---|---|---|
| Port | 22 (tout le monde scanne) | 31457 (caché aux bots) |
| Authentification | Mot de passe | Clé SSH avec passphrase |
| Pare-feu | UFW sur le port 22 | LIMIT sur 31457 (6 essais max / 30s) |
| Anti-bruteforce | Aucun | Fail2ban avec 3 essais puis bannissement 1h |
| Connexion root | Permise | Désactivée (via utilisateur + sudo) |