SSH en profondeur
SSH est le protocole d'administration à distance de référence sur les systèmes Linux. La quasi-totalité du travail sur serveur passe par lui. Bien le configurer, sécuriser le démon et gérer les clés correctement est une priorité dès la mise en service d'une machine.
Connexion de base
ssh user@serveur # connexion standard
ssh user@serveur -p 2222 # port personnalisé
ssh -i ~/.ssh/ma_cle user@serveur # clé spécifiqueAuthentification par clé
L'authentification par mot de passe est vulnérable aux attaques par force brute. L'authentification par clé asymétrique est la norme sur tout serveur exposé.
Générer une paire de clés
ssh-keygen -t ed25519 -C "commentaire"
# Clé privée : ~/.ssh/id_ed25519
# Clé publique : ~/.ssh/id_ed25519.pubPréférer ed25519 à RSA : plus court, plus rapide, aussi solide. Une passphrase protège la clé privée en cas de vol du fichier.
Déployer la clé sur le serveur
ssh-copy-id user@serveur
# Ajoute la clé publique dans ~/.ssh/authorized_keys sur le serveurManuellement :
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keysFichier ~/.ssh/config (côté client)
Évite de saisir les options à chaque connexion :
Host monserveur
HostName 192.168.1.10
User romain
Port 2222
IdentityFile ~/.ssh/id_ed25519Ensuite, ssh monserveur suffit.
Configurer sshd : /etc/ssh/sshd_config
Sur Debian, le service SSH s'appelle ssh (pas sshd). Après chaque modification de sshd_config :
systemctl reload sshParamètres de sécurité essentiels
Port 2222 # changer le port par défaut (22)
PermitRootLogin no # interdire la connexion directe en root
PasswordAuthentication no # désactiver les mots de passe
PubkeyAuthentication yes # n'autoriser que les clés
AllowUsers romain # whitelist d'utilisateurs autorisés
MaxAuthTries 3 # limiter les tentatives d'authentification
ClientAliveInterval 300 # déconnecter les sessions inactives (5 min)
ClientAliveCountMax 2Désactiver PasswordAuthentication seulement après avoir vérifié que la connexion par clé fonctionne. Dans le cas contraire, le serveur devient inaccessible à distance.
Fail2ban : bloquer les attaques par force brute
fail2ban surveille les logs système et bannit les IP qui dépassent un seuil d'échecs d'authentification.
Installation
apt install fail2ban
systemctl enable fail2ban
systemctl start fail2banConfiguration : jail.local
Ne jamais modifier jail.conf directement (écrasé lors des mises à jour). Créer /etc/fail2ban/jail.local :
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 192.168.1.0/24
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)ssystemctl reload fail2banVérifier les bans
fail2ban-client status sshd # IPs bannies sur la jail sshd
fail2ban-client unban 1.2.3.4 # débannir une IP
fail2ban-client status # état global de toutes les jailsEn pratique
Séquence de mise en sécurité d'un nouveau serveur SSH : générer une clé ed25519, la déployer avec ssh-copy-id, vérifier que la connexion par clé fonctionne, puis désactiver PasswordAuthentication dans sshd_config. Recharger avec systemctl reload ssh. Installer fail2ban directement après, sans attendre. Sur un serveur exposé sur internet, les scans de masse commencent en moins d'une heure après l'ouverture du port 22 : les logs le confirment (journalctl -u ssh --since "1 hour ago").