Aller au contenu principal

Sécuriser SSH — Hardening

Guide Complet : Hardening SSH

Introduction​

Sécuriser votre serveur SSH est essentiel pour protéger votre VPS contre les attentats par brute-force et les accès non autorisés. Ce guide détaille toutes les étapes pour durcir votre configuration SSH de manière optimale.

1. Sauvegarde et Préparation​

Avant toute modification, sauvegardez votre configuration SSH actuelle :

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup

2. Configuration SSH Renforcée​

Étape 1 : Modification du Port SSH​

Éditez la configuration SSH :

sudo nano /etc/ssh/sshd_config

Modifiez ou ajoutez ces lignes dans /etc/ssh/sshd_config :

# Port personnalisé (éviter les ports communs 22, 2222, etc.)
Port 2847

# Désactiver SSH version 1 (obsolète)
Protocol 2

# Interface d'écoute (optionnel - spécifier l'IP)
#ListenAddress YOUR_SERVER_IP

Étape 2 : Authentification et Accès​

Ajoutez ces lignes de sécurité dans /etc/ssh/sshd_config :

# Désactiver l'accès root direct
PermitRootLogin no

# Authentification par mot de passe désactivée
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

# Authentification par clé uniquement
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# Utilisateurs autorisés seulement (remplacer 'votreutilisateur')
AllowUsers votreutilisateur

# Limiter les tentatives de connexion
MaxAuthTries 3
MaxStartups 3:30:10
LoginGraceTime 30

Étape 3 : Désactiver les Fonctionnalités Inutiles​

# Désactiver le forwarding X11
X11Forwarding no
X11DisplayOffset 10

# Désactiver le forwarding de ports
AllowTcpForwarding no
GatewayPorts no

# Désactiver l'agent forwarding
AllowAgentForwarding no

# Désactiver les connexions vides
PermitEmptyPasswords no

# Messages de connexion
PrintMotd no
PrintLastLog yes

# Désactiver les informations de version
DebianBanner no

3. Génération et Déploiement des Clés SSH​

Sur votre machine locale :​

# Générer une paire de clés ED25519 (plus sécurisée)
ssh-keygen -t ed25519 -b 4096 -C "votre-email@example.com"

# Ou RSA 4096 si ED25519 non supporté
ssh-keygen -t rsa -b 4096 -C "votre-email@example.com"

Déploiement sur le serveur :​

# Copier la clé publique (remplacer par votre utilisateur et IP)
ssh-copy-id -p 2847 votreutilisateur@YOUR_SERVER_IP

# Ou manuellement :
mkdir -p ~/.ssh
echo "votre_clé_publique_ici" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

4. Configuration Fail2Ban Avancée​

Installation de Fail2Ban :​

sudo apt update
sudo apt install fail2ban -y

Configuration personnalisée dans /etc/fail2ban/jail.local :​

sudo nano /etc/fail2ban/jail.local
[DEFAULT]
# Durée de ban en secondes (24 heures)
bantime = 86400
# Période d'observation (10 minutes)
findtime = 600
# Nombre de tentatives avant ban
maxretry = 3
# IPs à ignorer (votre IP fixe)
ignoreip = 127.0.0.1/8 ::1 YOUR_LOCAL_IP

[sshd]
enabled = true
port = 2847
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 86400
findtime = 600

[sshd-ddos]
enabled = true
port = 2847
filter = sshd-ddos
logpath = /var/log/auth.log
maxretry = 2
bantime = 172800
findtime = 300

Démarrage et activation :​

sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo fail2ban-client status sshd

5. Configuration du Firewall​

Avec UFW (Ubuntu/Debian) :​

# Activer UFW
sudo ufw enable

# Autoriser le nouveau port SSH
sudo ufw allow 2847/tcp

# Bloquer l'ancien port 22
sudo ufw deny 22/tcp

# Vérifier les règles
sudo ufw status verbose

Avec iptables :​

# Autoriser le nouveau port SSH
sudo iptables -A INPUT -p tcp --dport 2847 -j ACCEPT

# Bloquer le port 22
sudo iptables -A INPUT -p tcp --dport 22 -j DROP

# Sauvegarder les règles
sudo iptables-save > /etc/iptables/rules.v4

6. Application et Vérification​

Redémarrage SSH :​

# Vérifier la configuration avant redémarrage
sudo sshd -t

# Redémarrer SSH
sudo systemctl restart ssh

# Vérifier le statut
sudo systemctl status ssh
Attention

Gardez une session SSH ouverte et testez la connexion avec une nouvelle session avant de fermer l'ancienne !

Test de connexion :​

# Depuis votre machine locale
ssh -p 2847 votreutilisateur@YOUR_SERVER_IP

7. Checklist Finale de Sécurité​

Vérifications SSH :​

  • Port SSH changé (différent de 22, 2222)
  • PermitRootLogin no activé
  • PasswordAuthentication no activé
  • Authentification par clé uniquement configurée
  • AllowUsers configuré avec votre utilisateur
  • X11Forwarding no activé
  • MaxAuthTries limité à 3

Vérifications Fail2Ban :​

  • Fail2Ban installé et démarré
  • Jail SSH configuré avec le bon port
  • Temps de ban configuré (24h minimum)
  • Votre IP locale en whitelist

Vérifications système :​

# Vérifier les connexions SSH actives
sudo ss -tulpn | grep :2847

# Vérifier les logs SSH
sudo tail -f /var/log/auth.log

# Statut Fail2Ban
sudo fail2ban-client status
Conseil Pro

Configurez un accès de secours via la console RedHeberg accessible depuis votre espace client en cas de problème de connexion SSH.

Surveillance Continue​

Monitoring des connexions :​

# Voir les tentatives de connexion échouées
sudo grep "Failed password" /var/log/auth.log | tail -10

# Vérifier les IPs bannies par Fail2Ban
sudo fail2ban-client status sshd

Cette configuration garantit une sécurité SSH optimale pour vos VPS RedHeberg, que ce soit sur nos datacenters de Paris (PAR3) ou New York (NYC1).