Le devis se terminait par `block out log all` avec une seule règle sortante (le relais SMTP). Appliqué tel quel, il coupait la flotte d'Internet : plus d'apt, plus de NTP, plus de récursion DNS. Rien ne le signalait — la ligne la plus lourde de conséquences du devis, posée à la suite des autres. La sortie est déclarée dans le registre, donc dérivée : - `serveur_debian` (socle, 14 hôtes) : 443 et 80 pour les dépôts apt, 123/udp pour l'horloge — une dérive fait échouer step-ca et le SSO des semaines après la cause ; - `client_unbound` : 53 udp et tcp, la récursion depuis la racine qu'implique `client_unbound_transitaires: []`. Le TCP est le repli obligatoire dès qu'une réponse DNSSEC dépasse la taille UDP. Le devis passe de 6 à 11 règles, et sa section 5 énonce le default-deny sortant, le nombre de règles qui l'accompagnent, et où déclarer un besoin oublié — jamais à la main dans le pare-feu. Vérifié : les nftables d'hôte sont inchangés, octet pour octet. Le pair `externe` reste sauté par resoudre_flux. Non déclaré volontairement : le rôle `chrony` n'est référencé par aucun groupe ni playbook — un flux pour lui aurait été une règle morte. Preuves : 24 OK, 0 échec. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| meta | ||
| README.md | ||
serveur_debian
Rôle-catégorie du socle : il ne porte aucune tâche. Son unique contenu est
meta/flux.yml — la déclaration du plan de gestion (SSH) de tout nœud de la flotte.
Pourquoi un rôle sans tâches
Le résolveur de flux (scripts/resoudre_flux.py, make flux) agrège les
roles/<rôle>/meta/flux.yml par nom de groupe. Le groupe serveur_debian est le socle
appliqué à tous les hôtes ; c'est donc ici que se déclare le flux SSH d'administration.
⚠️ Critique : sans cette déclaration, les rulesets nftables générés (
nftables_baseline,policy drop) couperaient l'accès Ansible/SSH à toute la flotte.
Le travail réel
Il est fait par le playbook du groupe, playbooks/groupes/serveur_debian.yml, qui applique
dans l'ordre :
| Rôle | Apport |
|---|---|
common_packages |
Paquets de base |
hosts_statiques |
Plancher de résolution /etc/hosts (indépendant du DNS) |
qemu_guest_agent |
Agent invité Proxmox |
cloud_init |
Cohérence du premier démarrage |
sudo_ansible |
Compte de déploiement |
chrony |
Horloge (fuseau_horaire) |
ssh_baseline |
Base SSH |
systemd_ssh_auto |
Démarrage SSH fiable |
motd |
Bannière |
Le playbook refuse toute cible non-Debian (assertion ansible_facts.distribution).
Place dans l'ordre
Couche socle (docs/couches-deploiement.yml) — la première. Le durcissement
(serveur_durci) vient juste après, tout le reste ensuite.
Notes
- Ajouter un flux réseau du socle (pas d'un service) se fait ici, pas ailleurs.
hosts_statiquesétant appliqué ici, la résolution par nom fonctionne dès le socle, avant que PowerDNS existe — c'est ce qui permet l'ordre de reconstruction from-zero.