Aller au contenu principal

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

Important

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
Attention

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 bannissement
  • findtime : 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
Conseil

Gardez toujours une session SSH ouverte quand vous modifiez la configuration SSH, pour éviter de vous bloquer en cas d'erreur.