Set-OPS-Public/roles/serveur_forgejo/meta/flux.yml
Daniel Allaire bef0655112 le site reconstruit depuis zero : 7/7, 0 echec, et seize corrections
SITE-Chezlepro n avait jamais ete rase. La limite qu on repetait partout —
l infrastructure d accueil n a jamais ete reconstruite depuis zero — se
lisait comme de la prudence. C etait seize defauts que rien d autre n aurait
pu reveler.

Un locataire naît dans un monde deja peuple : le site lui fournit paquets,
noms, genome, heure et depot. Un site n a personne au-dessus, sauf sa
frontiere. Onze des seize murs viennent de la.

DEUX CAPACITES QUI N EXISTAIENT PAS. make site-raser — rien ne detruisait les
machines du site, donc la limite etait un trou d outillage. make
forge-amorcer — la forge naît vide et le runner y clone ; l amorcage part du
poste, seul endroit qui detienne alors le genome.

TROIS GARDES QUI VERIFIAIENT LA FORME. La plus couteuse des familles : elles
donnent l apparence d une verification. Le resolveur comparait des adresses
au lieu de mesurer si la resolution aboutit, et protegeait ainsi l etat
casse. L administration etait reconnue a son port. Un flux a deux paires
n obtenait qu une branche.

UN ECART DE SECURITE. Le PostgreSQL du site servait le certificat auto-signe
de Debian, sans reseaux autorises ni hostssl — invisible tant qu aucun client
n exigeait la verification. Le defaut n a pas casse la construction : la
construction a revele le defaut.

UN ACCES ACCIDENTEL. Celui de l exploitant tenait au chevauchement d
adressage que le renumerotage a supprime. Separer les index n a pas cause le
probleme, il a retire le hasard qui le masquait.

La sequence du premier jour est ecrite : runbooks §9, avec les seize murs et
ce que chacun enseigne.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-12 19:08:31 -04:00

66 lines
3.1 KiB
YAML

---
# Flux réseau de Forgejo (forge Git). Voir docs/flux-conception.md.
flux:
# LE PORT DE LA FORGE N'EST PAS LE MÊME PARTOUT (2026-08-25).
#
# `3000` est le port qu'elle écoute DERRIÈRE un edge, en clair : le nginx termine le TLS
# et lui parle sur la boucle locale. C'était vrai de toutes les forges tant qu'il y avait
# toujours un edge devant.
#
# La forge du SITE n'en a pas — le site n'a pas d'edge — et sert son propre TLS sur le
# port du schéma, `443`. Écrire `3000` en dur ici serait donc devenu faux pour elle,
# sans que rien ne le signale : ce flux ne traverse pas la frontière, donc aucun devis
# ne s'en plaint. Une déclaration fausse qui ne gêne personne est une déclaration qui
# dérive jusqu'au jour où quelqu'un s'y fie.
#
# `derive` dit la vérité : le port vient de `serveur_forgejo_http_port`, et
# `verifier_ports` sait qu'il n'y a pas d'écoute fixe à comparer.
# DEUX ENTREES, PARCE QUE CE SONT DEUX SITUATIONS — pas une ligne qui dirait « ça
# dépend ». Le vocabulaire des flux n'a pas de mot pour l'indécision, et c'est tant
# mieux : un flux se lit pour savoir ce qui circule et comment. Une valeur ambiguë
# rendrait l'audit impossible sans aller lire le déploiement.
- sens: ingress
port: 3000
protocole: tcp
pair: edge
chiffrement: clair
raison: >-
Interface web + Git HTTP derrière un edge : le nginx termine le TLS et parle en
clair à la forge. C'est le cas de tout tenant.
- sens: ingress
port: derive
protocole: tcp
# `admin` EN PLUS DE `flotte` (2026-09-12). Sans edge devant elle, la forge du SITE
# n'etait joignable que par les machines de l'ecosysteme — jamais par l'exploitant.
# Ca passait inapercu tant que son plan d'administration vivait dans le supernet d'un
# locataire, que les expositions acceptent deja. Une fois le site sorti de ce
# supernet, l'exploitant ne pouvait plus ni amorcer sa forge ni y pousser le genome.
#
# `admin` se resout depuis `nftables_admin_ssh` : un ecosysteme qui ne declare aucun
# administrateur n'emet aucune regle, et c'est le comportement voulu — une source
# vide ouvrirait le port a tous.
pair: [flotte, admin]
chiffrement: tls
raison: >-
Sans edge devant elle — la forge du SITE — elle sert son propre TLS sur le port du
schéma (443), avec le certificat de la machine. `derive` parce que le port vient de
`serveur_forgejo_http_port` : écrire 3000 en dur ici serait faux pour elle, et rien
ne le signalerait puisque ce flux ne traverse pas la frontière.
- sens: egress
port: 5432
protocole: tcp
pair: serveur_postgresql
chiffrement: tls-requis
raison: "Base de données Forgejo (verify-full)."
- sens: egress
port: 25
protocole: tcp
pair: serveur_postfix
chiffrement: starttls
raison: "Notifications courriel (relais via le MTA Postfix)."
- sens: egress
port: 443
protocole: tcp
pair: edge
chiffrement: tls-requis
raison: "Découverte OIDC et jetons auprès de Keycloak (via son FQDN publié à l'edge)."