Aller au contenu

Durcir un accès SSH

Objectif : réduire la surface d’attaque d’un serveur Linux accessible par SSH depuis Internet — c’est la première cible de tout scan automatisé.

Installation Indifférent — serveur physique, VM (VMware, Proxmox, Hyper-V…) ou VPS cloud : seul l’OS et l’accès sudo comptent ici.
Système d’exploitation Testé sur Debian/Ubuntu (apt) ; transposable à RHEL/Fedora (dnf, package fail2ban identique) ou Arch (pacman). Non applicable tel quel à Windows Server (OpenSSH Server y existe mais se configure différemment) ni macOS (rarement utilisé comme serveur SSH exposé).
Côté client ssh-keygen est natif sous Linux et macOS ; sous Windows 10/11, le client OpenSSH est intégré (ssh, ssh-keygen disponibles nativement dans PowerShell/CMD), sinon via WSL.
Prérequis matériels Négligeables : fail2ban et sshd tournent confortablement sur 1 vCPU / 512 Mo de RAM, même partagés avec d’autres services. Aucun disque dédié requis (quelques Mo de logs).

1. Désactiver l’authentification par mot de passe

Section intitulée « 1. Désactiver l’authentification par mot de passe »

L’authentification par clé publique élimine le risque de bruteforce de mot de passe.

Fenêtre de terminal
# Sur le poste client, générer une paire de clés (si pas déjà fait)
ssh-keygen -t ed25519 -C "identification-de-la-cle"
# Copier la clé publique sur le serveur
ssh-copy-id utilisateur@serveur

Puis sur le serveur, dans /etc/ssh/sshd_config :

PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin no

2. Changer le port par défaut (mesure de réduction de bruit)

Section intitulée « 2. Changer le port par défaut (mesure de réduction de bruit) »
Port 2222

Ça ne stoppe pas un attaquant déterminé (un scan de ports le retrouve), mais élimine l’écrasante majorité des bots qui ne scannent que le port 22 — moins de bruit dans les logs, moins de charge.

Fenêtre de terminal
sudo apt install fail2ban

Configuration minimale dans /etc/fail2ban/jail.local :

[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 1h
findtime = 10m

Une IP qui échoue 3 fois en 10 minutes est bannie une heure.

Si les IP sources sont connues à l’avance (accès depuis un siège fixe, un VPN d’entreprise…), autoriser uniquement ces plages plutôt que tout Internet — voir Pare-feu.

Fenêtre de terminal
nft add rule inet filter input tcp dport 2222 ip saddr 203.0.113.0/24 accept
  • Un utilisateur nominatif par personne, jamais de compte partagé.
  • sudo avec mot de passe pour les actions sensibles plutôt qu’un accès root direct.
  • Clés SSH avec passphrase, et une clé différente par machine cliente (facilite la révocation ciblée en cas de perte).
  • Authentification par clé uniquement (PasswordAuthentication no)
  • PermitRootLogin no
  • Port non standard (mesure secondaire, pas une vraie protection)
  • fail2ban actif sur le service SSH
  • Accès filtré par pare-feu si les sources sont connues
  • Un compte nominatif par utilisateur