Passer au contenu principal

Réseau (Linux)

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écifique

Authentification 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.pub

Pré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 serveur

Manuellement :

cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Fichier ~/.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_ed25519

Ensuite, 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 ssh

Paramè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 2

Dé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 fail2ban

Configuration : 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)s
systemctl reload fail2ban

Vé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 jails

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