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é.
Environnement
Section intitulée « Environnement »| 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.
# 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 serveurssh-copy-id utilisateur@serveurPuis sur le serveur, dans /etc/ssh/sshd_config :
PasswordAuthentication noPubkeyAuthentication yesPermitRootLogin no2. 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.
3. Limiter les tentatives avec fail2ban
Section intitulée « 3. Limiter les tentatives avec fail2ban »sudo apt install fail2banConfiguration minimale dans /etc/fail2ban/jail.local :
[sshd]enabled = trueport = 2222maxretry = 3bantime = 1hfindtime = 10mUne IP qui échoue 3 fois en 10 minutes est bannie une heure.
4. Restreindre par pare-feu
Section intitulée « 4. Restreindre par pare-feu »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.
nft add rule inet filter input tcp dport 2222 ip saddr 203.0.113.0/24 accept5. Appliquer le principe du moindre privilège
Section intitulée « 5. Appliquer le principe du moindre privilège »- Un utilisateur nominatif par personne, jamais de compte partagé.
sudoavec 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).
Checklist finale
Section intitulée « Checklist finale »- Authentification par clé uniquement (
PasswordAuthentication no) -
PermitRootLogin no - Port non standard (mesure secondaire, pas une vraie protection)
-
fail2banactif sur le service SSH - Accès filtré par pare-feu si les sources sont connues
- Un compte nominatif par utilisateur