Set-OPS-Public/roles/serveur_debian/meta/flux.yml
Daniel Allaire ee0e33d452 flux : plus aucune sortie vers Internet sans un role qui le dise
La sortie 80/443 que le socle donnait a toute machine ne servait plus a apt
(tout passe par le cache du site) mais a de la telemetrie et a des sorties
non declarees. Elle devient conditionnelle (seulement_si artefacts_amorcage
vide) ; la telemetrie de Grafana, Loki, Alloy et la verification de version
de Collabora sont coupees a la source ; rspamd et la sonde du genome
declarent leur sortie. Le devis du site evalue enfin seulement_si, ce qui
retire aussi le 465/587 vers un Postfix du site qui n'ecoute que sur 25.
Garde : test_conditions_site.py. Journal (125).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 23:11:13 -04:00

142 lines
7.1 KiB
YAML

---
# Flux réseau du socle Debian : le plan de gestion (SSH). Voir docs/flux-conception.md.
# CRITIQUE : sans cette règle, les nftables générés couperaient l'accès Ansible/SSH.
flux:
- sens: ingress
port: 22
protocole: tcp
pair: [flotte, externe]
chiffrement: ssh
raison: "Plan de gestion : administration et déploiement Ansible par SSH (inter-nœud ; l'accès depuis l'extérieur est filtré à l'OPNsense)."
# --- Sortie apt directe : SEULEMENT SANS AMONT D'ARTEFACTS (2026-10-10) ---
#
# C'ÉTAIT UNE SORTIE 80/443 VERS TOUT INTERNET, POUR TOUTE MACHINE. Sa raison, « dépôts
# apt », n'était plus vraie chez les locataires : leurs 26 machines prennent TOUTES leurs
# sources en `http://` par le cache du site (`artefacts_amorcage`), aucune n'a de dépôt
# HTTPS. Mesuré à la frontière, elle ne servait plus qu'à ce qu'aucun rôle ne déclarait :
# télémétrie de Grafana, d'Alloy et de Loki, vérification de version de Collabora,
# cartes de rspamd, repère du génome. Les trois premiers sont coupés à la source ; les
# deux derniers ont désormais leur propre flux, dans leur rôle.
#
# ELLE NE RESTE QUE LÀ OÙ IL N'Y A AUCUN AMONT. Le site non plus ne la reçoit pas : ses
# machines visent son propre cache depuis le 2026-09-14 (`site_inventaire.py`,
# `artefacts_amorcage`), et le cache, lui, porte ses propres sorties 80/443
# (`serveur_cache_site`, `serveur_artefacts`). Seul un écosystème sans aucune source
# d'artefacts — un laboratoire isolé — prend encore ses paquets en direct.
- sens: egress
port: 443
protocole: tcp
pair: externe
chiffrement: tls-requis
seulement_si: {variable: artefacts_amorcage, non_vide: false}
raison: >-
Dépôts apt en direct, pour un écosystème SANS aucune source d'artefacts. Le site
et ses locataires passent par le cache du site et ne la reçoivent pas.
- sens: egress
port: 80
protocole: tcp
pair: externe
chiffrement: clair
seulement_si: {variable: artefacts_amorcage, non_vide: false}
raison: >-
Dépôts apt en clair et redirections des miroirs, pour un écosystème SANS amont
d'artefacts. L'intégrité vient de la signature des paquets, pas du transport.
# --- Decouverte de MTU de chemin (PMTUD) ---
# L'overlay EVPN plafonne a 1450 : tout ce qui traverse la frontiere depend de ces
# deux messages. Bloques, la connexion s'etablit, les petites requetes passent et les
# grosses reponses restent suspendues — la panne la plus couteuse a diagnostiquer.
- sens: ingress
port: frag-needed
protocole: icmp
pair: externe
chiffrement: n-a
raison: "ICMP « fragmentation nécessaire » entrant : sans lui, un distant ne peut pas nous demander de réduire nos paquets — les transferts se figent."
- sens: egress
port: frag-needed
protocole: icmp
pair: externe
chiffrement: n-a
raison: "ICMP « fragmentation nécessaire » sortant : c'est ainsi que nos hôtes signalent l'overlay à 1450 aux correspondants distants."
# LA FACE RECEPTRICE DU PING DE SUPERVISION.
#
# `serveur_icinga` declare l'egress ; le registre REFUSE un egress sans son ingress en
# face, et il a bien fait : c'est precisement l'oubli qui a coute cinq `TimeoutError`
# sur le rapport de sante quelques heures plus tot. Ici la garde l'a dit tout de suite.
- sens: ingress
port: echo-request
protocole: icmp
pair: serveur_icinga
chiffrement: n-a
partage: true
raison: "La supervision verifie que ce noeud repond (hostalive). Sans lui, elle le tient pour mort et supprime ses notifications."
# LA FRONTIÈRE EST AUSSI L'AUTORITÉ DE NOMS D'AMORÇAGE (2026-09-12).
#
# TROUVÉ À LA PREMIÈRE RECONSTRUCTION DU SITE DEPUIS ZÉRO. Les sept machines du site
# naissent avec `nameserver 10.37.34.11` — `site-dns-01`, qui est elle-même une des
# sept et n'a pas encore de résolveur. `site-dns-01` pointe donc sur elle-même, et
# `apt update` échoue sur les sept :
#
# Erreur temporaire de résolution de « deb.debian.org »
#
# Le locataire n'a jamais ce problème : son résolveur est le SITE, qui existe déjà.
# Le site, lui, n'a personne au-dessus — sauf la frontière, dont l'Unbound tourne et
# écoute sur `*:53`. Il ne manquait que le passage.
#
# CE QUE CETTE RÈGLE NE DIT PAS. « Toute la flotte résout ici, et nulle part ailleurs »
# (`serveur_resolveur/meta/flux.yml`) reste la règle en régime établi : le résolveur
# de l'écosystème est le seul que les machines INTERROGENT, parce que c'est lui que
# leur `/etc/resolv.conf` nomme. Cette règle n'ouvre qu'une possibilité, celle qui
# rend l'amorçage possible — et sans elle, un écosystème neuf ne peut pas naître.
- sens: egress
port: 53
protocole: udp
pair: frontiere
chiffrement: n-a
raison: >-
Résolution de noms à l'amorçage, avant que le résolveur de l'écosystème n'existe.
Sans elle, les machines d'un site neuf ne peuvent pas résoudre leurs dépôts de
paquets — et rien ne peut donc s'installer, y compris le résolveur lui-même.
- sens: egress
port: 53
protocole: tcp
pair: frontiere
chiffrement: n-a
raison: >-
Réponses longues et bascule TCP, obligatoires en DNS. Déclarer l'UDP sans le TCP
donne une résolution qui marche jusqu'à la première réponse tronquée.
# L'HEURE VIENT DE LA FRONTIÈRE, PAS D'INTERNET (2026-09-11).
#
# C'était `pair: externe` : les quatorze machines interrogeaient `2.debian.pool.ntp.org`,
# défaut de Debian jamais choisi — le rôle `chrony` posait le fuseau et laissait les
# sources telles quelles. Mesuré : quatre pairs publics par machine, sur les quatorze.
#
# C'était la DERNIÈRE dépendance vivante à Internet des opérations internes. Tout le
# reste sort déjà par le site : les paquets par son cache, les noms par son DNS, le
# génome par sa forge, l'état par son dépôt. L'heure, non.
#
# ET C'EST LA MAUVAISE À LAISSER TRAÎNER. step-ca émet des certificats à durée courte ;
# TLS refuse un certificat pas encore valide ; Loki rejette une ligne trop loin dans le
# futur ; les silences d'Icinga reposent sur des `ttl`. Une flotte dont les horloges
# divergent tombe en panne de l'intérieur, avec des symptômes qui ressemblent à tout
# sauf à une horloge. Et la dérive est lente : couper Internet ne casse rien le premier
# jour, ce qui laisse croire à une souveraineté qu'on n'a pas.
#
# La frontière est déjà `stratum 3`, synchronisée, et écoute en 123 sur chaque patte.
# Elle se discipline sur le pool public quand Internet est là ; la flotte, elle, ne sort
# plus. Même patron que le cache apt : un seul sort, les autres non.
#
# RESSERRE AUTANT QUE CENTRALISE : `pair: externe` autorisait le 123 vers N'IMPORTE
# QUELLE adresse d'Internet. La destination est désormais nommée.
- sens: egress
port: 123
protocole: udp
pair: frontiere
chiffrement: n-a
raison: >-
Synchronisation d'horloge (NTP) contre la frontière, autorité de temps de
l'écosystème. Une dérive fait échouer la validation des certificats step-ca
et l'authentification SSO.