SSH · trafic d'attaque
1234 tentatives de connexion en 41 heures : qui cogne vraiment sur un port SSH exposé
2026-07-19 · HardStacked · 7 min de lecture
Voici une box que personne n'est censé connaître. Une IP fraîche d'un fournisseur cloud,
pas d'enregistrement DNS, aucun lien qui pointe dessus, rien de publié nulle part. Une de nos
machines de test ordinaires, en ligne depuis quelques jours. On a tiré ses logs SSH le
20 juillet 2026, couvrant environ 41 heures, et on a compté ce qui cognait.
1234 tentatives de connexion, toutes sur des comptes qui n'existent pas. 93 adresses
IP distinctes. 132 noms d'usagers différents. De l'activité à chaque heure de la journée. Ce
n'est pas une étude de honeypot avec un appât : la box s'authentifie par clé seulement,
et nos propres connexions sont exclues de chaque compte ci-dessous. C'est juste le bruit
ambiant d'internet, mesuré.
$ sudo journalctl -u ssh | grep -c 'Invalid user'
1234 ← environ 41 heures en ligne. Chacune sur un compte qui n'existe pas.
1. Personne ne connaissait ce serveur. Ils l'ont trouvé pareil
Les 93 adresses s'étalent sur 61 réseaux /16 distincts, environ 1,5 adresse par
réseau. Cette dispersion est une signature : ce n'est pas un attaquant qui réessaie de
chez lui, c'est un botnet réparti à travers le monde, chaque membre sondant une tranche de
l'espace d'adresses.
La géolocalisation place les adresses derrière les tentatives de connexion dans dix pays
sur quatre continents. La plus insistante, enregistrée en Iran, a cogné
373 fois à elle seule ; la Chine, la Roumanie, les
États-Unis et la Bulgarie complètent le top 5. Et cette carte
montre où sont les machines infectées, pas où se trouve leur opérateur.
Rien n'a « fuité » le serveur. Il n'y avait rien à fuiter. L'espace IPv4 est
assez petit pour être balayé industriellement, et ces gangs le balaient au complet, tout le
temps. Ton adresse est dans l'espace, donc ton adresse est sur la liste. C'est toute la
logique de ciblage.
L'habitude
Traite toute machine avec une IP publique comme découverte. Pas publiée, pas partagée,
pas dans le DNS : rien de ça n'est une défense, parce que ce n'est pas comme ça qu'ils
te trouvent. L'obscurité peut réduire le bruit ; elle ne peut pas être une couche sur
laquelle tu comptes.
2. Le bestiaire des usernames : 132 noms, quatre familles de proies
L'artéfact le plus intéressant des logs, c'est la liste des noms d'usagers essayés.
132 noms distincts en 41 heures, et ça se lit comme un inventaire de tout ce qui se branche
sur internet :
$ sudo journalctl -u ssh | grep -oP 'Invalid user \K\S+' | sort | uniq -c | sort -rn | head
410 admin
229 user
125 user2
118 debian
23 test
22 administrator
16 support
14 guest
12 postgres
12 ansible
Trie la liste complète en familles et la liste d'épicerie du botnet apparaît :
- Serveurs et services :
postgres, mysql,
oracle, apache, ftpuser. Des comptes de service qui
ne devraient jamais accepter une connexion en premier lieu.
- La chaîne DevOps :
ansible, deploy,
dev, developer. Celle-là mérite une pause : un compte
ansible ou deploy est rarement une curiosité, c'est le compte
qui tient les clés de toutes les autres machines. Douze tentatives sur ansible,
dix sur deploy, sur une box qui n'a ni l'un ni l'autre.
- L'équipement d'usine :
ubnt (Ubiquiti),
AdminGPON et telecomadmin (boîtiers fibre),
cusadmin (modems câble), huawei. Ce ne sont pas des comptes de
serveur du tout : ce sont les logins intégrés des routeurs, des terminaux optiques
et des caméras.
- Les ordinateurs mono-carte :
pi, orangepi. On y
revient plus bas.
L'habitude
Lis cette liste comme l'ensemble exact des noms à ne pas être. Le compte que tu exposes
par SSH ne devrait être dans le dictionnaire de personne, et les comptes de service
(postgres, www-data…) ne devraient avoir ni shell utilisable
ni accès SSH du tout. Une ligne AllowUsers dans sshd_config
transforme tout le bestiaire en rejets instantanés.
3. Oui, ils chassent aussi les Raspberry Pi
Sept tentatives sur pi, cinq sur orangepi, six sur
ubnt, cinq sur AdminGPON. Le même gang qui sonde pour des serveurs
PostgreSQL sonde aussi pour ton modem fibre et ton Raspberry Pi, dans la même passe, avec le
même outillage. Ils ne cherchent pas « un serveur Linux » : ils ratissent tout
ce qui a une adresse, avec les noms de comptes par défaut que les appareils ont en sortant de
la boîte.
Pendant des années, le défaut sur un Raspberry Pi, c'était le compte pi avec
un mot de passe bien connu, et chaque dictionnaire de botnet s'en souvient encore. Si un Pi à
la maison est port-forwardé pour que tu le rejoignes à distance, il reçoit exactement ce
trafic, avec une marge de sécurité plus mince qu'un serveur : personne ne surveille les
logs d'un Pi.
L'habitude
Un Pi joignable de l'extérieur suit les règles d'un serveur : pas de compte
pi, auth par clé seulement, mises à jour appliquées. Si tu veux savoir où le
tien se situe, notre audit-pi open
source lit la machine et te le dit, gratuitement, en une passe.
4. Ça n'arrête jamais. Jamais
819 tentatives sur des comptes inexistants le premier jour complet, 402 le suivant. Et
étalées, pas en rafales : chaque heure de la journée a vu de l'activité, l'heure
la plus tranquille loggant encore autour de sept tentatives. Il n'y a pas de fenêtre calme,
pas de fuseau horaire où le botnet dort, pas de motif autour duquel tu pourrais
t'organiser.
Par-dessus les tentatives de connexion, plus d'un millier de connexions se sont ouvertes
et refermées sans jamais essayer un compte. C'est la partie plus silencieuse de la
machinerie : des lectures de bannière et des scans de version, la passe d'inventaire
qui décide quelles portes vaudront la peine d'être poussées plus tard.
L'habitude
Accepte le bruit comme la ligne de fond et surveille l'autre ligne à la place :
$ sudo journalctl -u ssh | grep 'Accepted'
← chaque ligne ici doit être toi. C'est LE grep qui compte.
Mille lignes Invalid user, c'est un mardi ordinaire. Un seul
Accepted que tu ne reconnais pas, c'est un incident.
5. Le plus beau zéro du log
Un compteur est resté à zéro à travers tout ça :
$ sudo journalctl -u ssh | grep -c 'Failed password'
0 ← 1234 tentatives, et pas un seul mot de passe n'a jamais été évalué.
La box roule PasswordAuthentication no. Avec l'auth par clé seulement, sshd
rejette ces clients avant qu'un mot de passe soit même échangé : l'engin de devinette,
les dictionnaires, les réessais, tout ça frappe une porte sans trou de serrure. Les mêmes
41 heures contre une box avec mot de passe activé auraient produit plus de mille lignes
Failed password, chacune une vraie devinette contre ta vraie politique de mots
de passe.
Une limite honnête de ces données : sshd ne loggue jamais quels mots de passe ont été
essayés, peu importe la configuration. Capturer ça demande un vrai honeypot comme Cowrie, ce
qui est une autre expérience, pour un autre article.
L'habitude
PasswordAuthentication no, après avoir testé ta clé depuis un deuxième
terminal avec la session courante encore ouverte. Fait dans le mauvais ordre, c'est le
lock-out classique numéro un ; on a écrit un article complet sur
les cinq lock-outs SSH classiques et les habitudes qui les
rendent survivables.
Quatre habitudes pour un port qui fait face à internet
- Auth par clé seulement, testée avant de fermer la porte. C'est la différence
entre un millier de vraies devinettes de mot de passe et le zéro ci-dessus.
- Aucun nom de dictionnaire exposé. Le bestiaire est la liste de ce qu'il ne
faut pas être.
AllowUsers avec un seul nom de compte non évident rejette
l'inventaire au complet.
- Surveille
Accepted, pas Invalid user. Le bruit est
la ligne de fond ; l'exception est le signal.
- L'obscurité n'est pas une couche. Cette box n'avait pas de DNS, pas de liens,
une IP jamais écrite nulle part. 93 adresses l'ont trouvée quand même.
Ce que ce bruit te dit
Tout ce qui précède est un décompte tiré du journal d'une seule machine, du 18 au
20 juillet 2026. Tes logs vont différer en volume, jamais en nature : le trafic est
automatique, indiscriminé et permanent, parce qu'il ne coûte rien aux opérateurs et qu'il
paie de temps en temps. La question qu'un propriétaire de serveur doit se poser, ce n'est pas
« est-ce que je vais me faire sonder ». Tu te fais sonder en ce moment même. La
question, c'est si la configuration tient la nuit où personne ne regarde les logs.
La leçon de fond
Les défenses qui ont réduit tout ce jeu de données au silence, l'auth par clé seulement,
pas de comptes devinables, un bloc SSH durci, sont exactement les changements qu'on remet à
plus tard, parce que toucher sshd_config sur une box distante, c'est comme
scier la branche sur laquelle on est assis.
Cette peur-là, c'est ce que HardVps enlève : il applique
le bloc de durcissement SSH complet en un seul changement révisé, capture chaque fichier
original d'abord, et vérifie toute restauration à l'octet près par SHA-256. Tu obtiens la
porte qui a produit notre zéro, avec le chemin du retour garanti.
Voir ce que HardVps fait →
Sur un Raspberry Pi ? Commence gratuitement avec
audit-pi, notre audit de sécurité open
source.