Mesure sur forge-01 (par l'agent invite, sans dependre du reseau) : quatre drop-ins SSH coexistent la ou il devrait y en avoir deux. Les roles se sont appeles `chezlepro` avant de porter le nom du moteur ; le renommage a change le fichier DEPOSE sans retirer le precedent. Et les paires divergent : MaxSessions 2 contre 10, MaxStartups 5:30:20 contre 10:30:60. sshd retient la PREMIERE valeur rencontree pour chaque mot-cle et lit les drop-ins dans l'ordre lexical — c'est donc l'ANCIEN fichier qui gagne. Une configuration qu'on croit avoir remplacee reste aux commandes, en silence. ssh_baseline et ssh_hardening retirent chacun le fichier de la nomenclature qu'ils ont abandonnee, AVANT de deposer le leur, et notifient la meme validation. La liste est declarative et ne contient que des noms reellement deposes un jour : supprimer un fichier qu'on n'a jamais ecrit serait effacer la configuration d'un autre. PAS ENCORE EPROUVE : les seules machines portant les anciens fichiers sont celles de patient 0, hors d'atteinte depuis le poste. Ecrit, linte, reste a le voir agir. 42 preuves vertes, ansible-lint profil production. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
40 lines
2.1 KiB
YAML
40 lines
2.1 KiB
YAML
---
|
|
ssh_hardening_port: 22
|
|
ssh_hardening_password_authentication: "no"
|
|
ssh_hardening_permit_root_login: "no"
|
|
ssh_hardening_pubkey_authentication: "yes"
|
|
ssh_hardening_client_alive_interval: 300
|
|
ssh_hardening_client_alive_count_max: 2
|
|
ssh_hardening_max_auth_tries: 3
|
|
ssh_hardening_login_grace_time: "20s"
|
|
|
|
# --- Limites de connexion : VARIABLES, plus ecrites en dur dans le gabarit ---------
|
|
#
|
|
# Elles valaient `5:30:20` et `2`, en dur dans le template du role — donc invisibles a
|
|
# qui lit les `defaults`, et impossibles a ajuster sans modifier un fichier de rendu.
|
|
#
|
|
# Elles ont coupe la voie d'administration : au-dela de 5 connexions NON AUTHENTIFIEES
|
|
# simultanees, sshd en refuse une partie SANS envoyer de banniere, et le client rapporte
|
|
# « Connection timed out during banner exchange » — un message qui accuse le reseau pour
|
|
# un refus applicatif. Deux deploiements interrompus le 2026-08-09, sur des hotes qui
|
|
# n'avaient ni redemarre ni perdu leur reseau.
|
|
#
|
|
# Les valeurs ci-dessous sont plus LARGES, et c'est un arbitrage assume : `MaxStartups`
|
|
# protege d'une inondation de connexions, or le port 22 n'est atteignable que depuis le
|
|
# reseau d'administration (`nftables_admin_ssh`, D-54). Le risque qu'il couvre l'est deja
|
|
# en amont ; celui qu'il creait — perdre la main sur la flotte — ne l'etait pas.
|
|
#
|
|
# Le client, lui, ouvre desormais tres peu de connexions (`pipelining` + `ControlPersist`
|
|
# dans `ansible.cfg`) : ces valeurs sont la marge, pas la contrainte.
|
|
ssh_hardening_max_startups: "10:30:60"
|
|
ssh_hardening_max_sessions: 10
|
|
|
|
# MEME MUE, MEME DETTE : ce role a depose `20-chezlepro-hardening.conf` avant de porter le
|
|
# nom du moteur. L'ancien fichier survit au renommage et, l'ordre lexical le placant
|
|
# devant, c'est LUI que sshd retient pour chaque mot-cle en double. Mesure sur forge-01 :
|
|
# `MaxSessions 2` (ancien) l'emportait sur `MaxSessions 10` (courant).
|
|
#
|
|
# On n'y liste que des noms qu'on a reellement deposes : supprimer un fichier qu'on n'a
|
|
# jamais ecrit serait effacer la configuration d'un autre.
|
|
ssh_hardening_fichiers_perimes:
|
|
- 20-chezlepro-hardening.conf
|