Set-OPS-Public/roles/serveur_forgejo/meta/flux.yml
Daniel Allaire 25fd4fc6f1 flux : seulement_si non_vide ; forge 3000 et PowerDNS 5300 conditionnels
La forge du site sert son propre TLS (443) : le flux 3000 derriere un edge
ne vaut que si serveur_forgejo_tls est faux. L'AXFR 5300 ne vaut que la ou
l'instance publique existe (dns_public_site non vide) : pas au site.
Absente partout = vide ; une expression Jinja garde le statu quo.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 12:01:46 -04:00

72 lines
3.5 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.
#
# ET LA SITUATION SE LIT DANS LE REGLAGE (2026-09-30) : la premiere seulement si la forge ne
# sert pas son propre TLS. Au site (`serveur_forgejo_tls: true`), elle ecoute 443 et rien
# sur 3000 ; la regle restait posee parce que le site a un edge — et la sonde
# `connectivite` la montrait coupee chaque minute.
- sens: ingress
port: 3000
protocole: tcp
pair: edge
chiffrement: clair
seulement_si: {variable: serveur_forgejo_tls, egal: false}
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)."