Set-OPS-Public/roles/ssh_hardening/defaults/main.yml
Daniel Allaire 0b6c036f8c ssh : retirer les drop-ins d'une nomenclature abandonnee
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>
2026-08-25 03:40:24 -04:00

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