Sécuriser SSH
Ce guide vous explique comment sécuriser l'accès SSH à votre VPS Linux avec des clés et fail2ban.
Authentification par clé SSH
Les clés SSH sont plus sécurisées que les mots de passe car elles ne peuvent pas être devinées par force brute.
Générer une paire de clés
Sur votre ordinateur local (pas sur le VPS) :
# Windows (PowerShell) / macOS / Linux
ssh-keygen -t ed25519 -C "votre@email.com"
Appuyez sur Entrée pour accepter l'emplacement par défaut. Ajoutez une passphrase pour plus de sécurité.
Deux fichiers sont créés :
~/.ssh/id_ed25519(clé privée - ne jamais partager)~/.ssh/id_ed25519.pub(clé publique - à copier sur le VPS)
Copier la clé sur le VPS
Méthode simple :
ssh-copy-id root@VOTRE_IP
Méthode manuelle :
# Sur votre ordinateur, affichez la clé publique
cat ~/.ssh/id_ed25519.pub
# Sur le VPS, ajoutez la clé
mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys
# Collez la clé publique et sauvegardez
# Permissions correctes
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Tester la connexion
ssh root@VOTRE_IP
Vous devriez vous connecter sans mot de passe (ou avec la passphrase de la clé).
Désactiver l'authentification par mot de passe
Testez d'abord que la connexion par clé fonctionne avant de désactiver les mots de passe !
sudo nano /etc/ssh/sshd_config
Modifiez ces lignes :
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
Redémarrez SSH :
sudo systemctl restart sshd
Changer le port SSH
Changer le port par défaut (22) réduit les attaques automatisées.
sudo nano /etc/ssh/sshd_config
Port 2222
Avant de redémarrer SSH, autorisez le nouveau port dans le firewall :
sudo ufw allow 2222/tcp
sudo systemctl restart sshd
Connexion avec le nouveau port :
ssh -p 2222 root@VOTRE_IP
Fail2ban - Protection contre les attaques
Fail2ban bloque automatiquement les IP qui tentent trop de connexions échouées.
Installation
sudo apt update
sudo apt install fail2ban
Configuration
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Modifiez la section [sshd] :
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
findtime = 600
bantime = 3600
Paramètres :
maxretry: Nombre de tentatives avant bannissementfindtime: Période d'observation (secondes)bantime: Durée du bannissement (secondes), -1 = permanent
Configuration avancée
Pour un port SSH personnalisé :
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
Démarrer fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Commandes utiles
# Statut de fail2ban
sudo fail2ban-client status
# Statut de la jail SSH
sudo fail2ban-client status sshd
# Voir les IP bannies
sudo fail2ban-client status sshd | grep "Banned IP"
# Débannir une IP
sudo fail2ban-client set sshd unbanip 192.168.1.100
# Voir les logs
sudo tail -f /var/log/fail2ban.log
Autres bonnes pratiques
Limiter les utilisateurs autorisés
sudo nano /etc/ssh/sshd_config
AllowUsers admin deployer
# ou
AllowGroups ssh-users
Désactiver les connexions root directes
Créez d'abord un utilisateur avec sudo :
adduser admin
usermod -aG sudo admin
Puis désactivez root :
PermitRootLogin no
Timeout d'inactivité
ClientAliveInterval 300
ClientAliveCountMax 2
Désactiver les fonctionnalités inutiles
X11Forwarding no
AllowTcpForwarding no
AllowAgentForwarding no
Configuration SSH complète recommandée
# /etc/ssh/sshd_config
Port 2222
PermitRootLogin prohibit-password
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding no
AllowTcpForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
MaxAuthTries 3
MaxSessions 3
Checklist de sécurité SSH
- Clés SSH configurées
- Authentification par mot de passe désactivée
- Port SSH modifié
- Fail2ban installé et configuré
- Connexion root limitée ou désactivée
- Firewall configuré avec le bon port
Gardez toujours une session SSH ouverte quand vous modifiez la configuration SSH, pour éviter de vous bloquer en cas d'erreur.