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).