Fiche 6 — Lire auth.log : connexions SSH et force brute
Sur un serveur exposé à Internet, le service SSH reçoit des tentatives de connexion automatisées en permanence. Savoir lire le journal d'authentification permet de repérer une attaque par force brute ou une connexion qui n'aurait pas dû avoir lieu.
Où se trouve le journal
| Système | Emplacement |
|---|---|
| Debian, Ubuntu | /var/log/auth.log (si rsyslog est installé) |
| RHEL, Rocky, AlmaLinux, Fedora | /var/log/secure |
| Systèmes avec systemd-journald | journalctl -u ssh (Debian, Ubuntu) ou journalctl -u sshd (RHEL et dérivés) |
Le nom du service (ssh ou sshd) varie selon la distribution.
Anatomie d'une ligne
Nov 3 10:12:41 srv01 sshd[2217]: Failed password for invalid user admin from 203.0.113.45 port 51822 ssh2
- Nov 3 10:12:41 : date et heure locales de l'événement.
- srv01 : nom de la machine.
- sshd[2217] : programme et numéro de processus.
- Failed password for invalid user admin : mot de passe refusé pour un compte
adminqui n'existe pas sur la machine. - from 203.0.113.45 port 51822 : adresse IP source et port source de la connexion.
L'adresse 203.0.113.45 est une adresse réservée à la documentation (RFC 5737) : elle sert ici d'exemple.
Messages à connaître
| Message | Signification |
|---|---|
Accepted password for … | Connexion réussie par mot de passe. |
Accepted publickey for … | Connexion réussie par clé SSH. |
Failed password for … | Mot de passe incorrect pour un compte existant. |
Failed password for invalid user … | Le compte demandé n'existe pas : typique d'un balayage automatisé. |
Invalid user … from … | Tentative avec un nom d'utilisateur inconnu. |
Connection closed by authenticating user … [preauth] | Le client s'est déconnecté avant la fin de l'authentification. |
session opened for user … / session closed | Ouverture et fermeture d'une session (module PAM). |
sudo: … COMMAND=… | Commande exécutée avec les droits administrateur, avec l'utilisateur, le dossier et la commande. |
Le libellé exact peut différer légèrement d'une version d'OpenSSH à l'autre : repérez le sens, pas la phrase mot pour mot.
Commandes d'analyse
# Les 20 derniers échecs
grep "Failed password" /var/log/auth.log | tail -n 20
# Nombre d'échecs par adresse IP source, du plus fréquent au moins fréquent
grep "Failed password" /var/log/auth.log | grep -oE "from [0-9a-fA-F:.]+" | sort | uniq -c | sort -rn | head
# Noms d'utilisateurs essayés (comptes inexistants)
grep "Invalid user" /var/log/auth.log | awk '{print $8}' | sort | uniq -c | sort -rn | head
# Connexions réussies : qui, d'où
grep "Accepted" /var/log/auth.log
# Avec journald, depuis hier
journalctl -u ssh --since yesterday | grep "Failed"
# Dernières connexions et échecs enregistrés (fichiers wtmp et btmp)
last -n 10
sudo lastb -n 10
Dans la deuxième commande, une même adresse avec des centaines d'échecs en quelques minutes est le signe d'une attaque par force brute. Le numéro de colonne de la troisième commande ($8) dépend du format de la ligne : vérifiez-le sur une ligne réelle.
Que faire en cas de force brute
- Vérifier qu'aucune ligne
Acceptedne suit les échecs depuis la même adresse : si c'est le cas, le compte est peut-être compromis, il faut changer ses identifiants et investiguer. - Désactiver l'authentification par mot de passe et n'autoriser que les clés SSH (
PasswordAuthentication nodans/etc/ssh/sshd_config), puis recharger le service. - Interdire la connexion directe de root (
PermitRootLogin no). - Installer un outil qui bloque automatiquement les adresses répétitives, comme Fail2ban, ou limiter l'accès SSH par pare-feu aux adresses connues.
Avant de modifier la configuration SSH d'un serveur distant, gardez une session ouverte et testez la nouvelle connexion dans un second terminal : une erreur peut vous en bloquer l'accès.
À retenir
- Un échec isolé n'est pas une attaque ; une répétition rapide depuis une même source l'est.
Acceptedaprès une série deFailedest la ligne la plus importante à vérifier.- Les clés SSH et un pare-feu réduisent à presque rien le bruit de ce journal.
Voir aussi : Fiche 4 — Commandes Linux essentielles.