Set-OPS-Public/docs/registre-flux.md
Daniel Allaire 6d23121dc2 supervision : systemctl --failed entre dans Icinga (role client_sante)
CE QU IL FERME. openipmi.service echouait a chaque demarrage sur les
quatorze machines depuis le 2026-09-02, et systemctl --failed rendait ZERO
partout : non parce qu elles allaient bien, mais parce qu aucune n avait
redemarre depuis. Il a fallu qu un humain redemarre une machine pour que
le defaut existe aux yeux de quelqu un. Un controle qui ne peut echouer
qu au demarrage ne mesure rien tant que rien ne demarre.

PASSIF, ET A DUREE DE VIE. Un controle actif ne voit pas la machine MUETTE.
Ici c est le noeud qui parle, et le ttl de son envoi fait la fraicheur :
sans nouvelle, Icinga perime le service tout seul. Le silence alerte autant
que l echec. Le minuteur declenche AU DEMARRAGE autant que toutes les 15
min : les echecs de cette famille naissent au boot.

CRITIQUE DES LA PREMIERE UNITE, jamais un seuil — une unite en echec est
soit un vrai probleme soit du bruit a retirer, et un seuil ferait vivre le
bruit. Les tolerances se nomment une par une, vide par defaut.

CONTROLE NEGATIF. Unite factice sur obs-01, etat relu dans IcingaDB :
CRITICAL, et le verdict NOMME l unite. Les treize autres OK. Apres
nettoyage : 14/14 OK.

UN CONFLIT EVITE. setops-sauvegardes.conf definissait les object Host ; un
second fichier de controle aurait redefini les memes, et Icinga refuse un
objet en double — la configuration entiere aurait ete rejetee, donc AUCUNE
supervision, en voulant en ajouter. Les hotes vivent maintenant dans
setops-hotes.conf, definis une fois.

TROIS OBSTACLES. ${#tableau[@]} contient {# que Jinja lit comme un debut de
commentaire (remede : comment_start_string en tete du gabarit). Ma premiere
sonde a traduit un 403 « Missing permission: objects/query/service » en
« 0 service » — encore un echec qui ecrasait permission ; l etat se lit
dans IcingaDB. Et un echec apt transitoire sur mon-01, local et disparu au
second essai : mesure avant conclusion.

NON FAIT : le SITE n a pas recu client_sante.

make prouver : CONFORME, 63 OK, 0 echec, 0 saute.

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

17 KiB

Registre des flux réseau — matrice d'audit (GÉNÉRÉ)

Généré par scripts/resoudre_flux.py (make flux) depuis les roles/*/meta/flux.yml. Ne pas éditer à la main. Matrice source→destination pour l'audit de sécurité et le label de certification. ingress = le rôle écoute ; egress = le rôle se connecte.

Rôle (propriétaire) Sens Port Proto Pair Chiffrement Raison
client_backup egress 22 tcp serveur_backup ssh Poussée des instantanés restic vers le dépôt hors-nœud, par SSH (clé dédiée).
client_journal ingress 12346 tcp localhost clair Interface de diagnostic locale d'Alloy — port declare pour rendre les collisions visibles.
client_journal egress 3100 tcp serveur_loki tls Expédition des journaux par Alloy vers le collecteur central Loki (HTTPS, cert step-ca).
client_metrique ingress 9100 tcp serveur_prometheus tls Scrape des métriques par Prometheus (node_exporter en HTTPS).
client_pki egress 8443 tcp serveur_step_ca tls-requis Émission/renouvellement des certificats par ACME et récupération de la racine auprès de l'AC interne.
client_resolveur egress 53 udp serveur_resolveur clair Résoudre auprès du résolveur de l'écosystème, et de personne d'autre.
client_resolveur egress 53 tcp serveur_resolveur clair Réponses longues et bascule TCP, obligatoires en DNS.
client_sante egress 5665 tcp serveur_icinga tls Depot d'un resultat passif sur l'API Icinga (process-check-result) : les unites systemd en echec du noeud. Le pair est authentifie par l'AC d'Icinga.
client_smtp egress 25 tcp serveur_postfix starttls Relais des notifications locales vers le MTA central (Postfix), STARTTLS.
serveur_artefacts ingress 3142 tcp flotte clair Toute la flotte prend ses paquets ici. En clair, et c'est correct : l'intégrité d'un dépôt apt vient de ses signatures, qu'apt vérifie de toute façon — un intermédiaire ne peut pas altérer un paquet sans se faire prendre.
serveur_artefacts egress 80 tcp externe clair Remplir le cache depuis les dépôts Debian amont (deb.debian.org, security).
serveur_artefacts egress 3142 tcp voisins_site clair Prendre le cache du site comme amont, plutot que d'aller chez Debian.
serveur_backup ingress 22 tcp client_backup ssh Dépôt restic servi par SSH (utilisateur restreint restic + clé) ; chaque client_backup pousse ses instantanés.
serveur_backup egress 5665 tcp serveur_icinga tls-requis Rapport passif des sauvegardes vers l'API Icinga : le depot est le seul a voir ce qui est reellement arrive.
serveur_backup_site ingress 22 tcp voisins_site ssh Les écosystèmes de ce site déposent leur état ici tant qu'ils n'ont pas leur propre dépôt. SFTP par un utilisateur restreint, jamais un compte d'administration : le site reçoit des octets chiffrés par restic, il ne peut pas les lire.
serveur_cache_site ingress 3142 tcp voisins_site clair Servir les caches des écosystèmes voisins. Debian n'est ainsi téléchargé qu'une fois pour tout le site, et le cache ne voit que des requêtes AGRÉGÉES — jamais quelle machine installe quoi.
serveur_cache_site egress 80 tcp externe clair Remplir le cache depuis les dépôts Debian amont. En clair parce que les dépôts apt sont signés : l'intégrité vient de la signature, pas du transport.
serveur_cache_site egress 443 tcp externe tls-requis Les dépôts tiers qui n'existent qu'en HTTPS (smallstep, Grafana, Icinga). Le cache les relaie pour que la flotte n'ait pas à sortir elle-même.
serveur_collabora ingress 9980 tcp edge clair Éditeur servi au navigateur via l'edge (WebSocket WOPI ; TLS terminé à l'edge).
serveur_collabora ingress 9980 tcp localhost clair Vérifications WOPI serveur→Collabora depuis Nextcloud co-localisé.
serveur_debian ingress 22 tcp flotte, externe ssh Plan de gestion : administration et déploiement Ansible par SSH (inter-nœud ; l'accès depuis l'extérieur est filtré à l'OPNsense).
serveur_debian ingress frag-needed icmp externe n-a ICMP « fragmentation nécessaire » entrant : sans lui, un distant ne peut pas nous demander de réduire nos paquets — les transferts se figent.
serveur_debian egress 80 tcp externe clair Dépôts apt en clair et redirections HTTP des miroirs (l'intégrité vient de la signature des paquets, pas du transport).
serveur_debian egress 123 udp externe n-a Synchronisation d'horloge (NTP). Une dérive fait échouer la validation des certificats step-ca et l'authentification SSO.
serveur_debian egress 443 tcp externe tls-requis Dépôts apt en HTTPS (Debian, Smallstep, Grafana, Icinga, Forgejo, Nextcloud) — sans quoi aucun correctif de sécurité n'entre.
serveur_debian egress frag-needed icmp externe n-a ICMP « fragmentation nécessaire » sortant : c'est ainsi que nos hôtes signalent l'overlay à 1450 aux correspondants distants.
serveur_dovecot ingress 24 tcp serveur_postfix tls-requis Remise LMTP depuis Postfix (edge-mta -> mailstore), en TLS vérifié (lmtp_tls_security_level=verify).
serveur_dovecot ingress 993 tcp externe tls-requis Accès courriel des utilisateurs (IMAPS). Frontière publique gérée à l'OPNsense.
serveur_dovecot ingress 12345 tcp serveur_postfix tls Authentification SASL déléguée : Postfix valide les identifiants de soumission contre Dovecot.
serveur_dovecot egress 636 tcp serveur_openldap tls-requis userdb/passdb : Dovecot résout et authentifie les comptes sur l'annuaire (LDAPS).
serveur_forge_site ingress 443 tcp voisins_site tls-requis Servir le génome aux écosystèmes de ce site : c'est de cette forge qu'ils clonent leur moteur, leurs modèles et la carte de la fabric (D-81). Sans ce flux, un écosystème neuf ne peut pas se reproduire.
serveur_forgejo ingress 3000 tcp edge clair 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.
serveur_forgejo ingress derive tcp flotte tls 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.
serveur_forgejo egress 25 tcp serveur_postfix starttls Notifications courriel (relais via le MTA Postfix).
serveur_forgejo egress 443 tcp edge tls-requis Découverte OIDC et jetons auprès de Keycloak (via son FQDN publié à l'edge).
serveur_forgejo egress 5432 tcp serveur_postgresql tls-requis Base de données Forgejo (verify-full).
serveur_grafana ingress 3000 tcp edge clair Interface web servie via l'edge (TLS terminé à l'edge).
serveur_grafana egress 443 tcp edge tls-requis Authentification OIDC auprès de Keycloak (via son FQDN publié à l'edge).
serveur_icinga ingress 5665 tcp localhost clair API Icinga 2 consommée en local par Icinga Web 2 co-localisé.
serveur_icinga ingress 5665 tcp client_backup tls-requis Rapport passif de chaque detenteur d'etat sur SON depot distant : le depot du site heberge du chiffre et ne peut pas le juger.
serveur_icinga ingress 5665 tcp serveur_backup tls-requis Le depot de sauvegarde depose ses resultats passifs (portee : process-check-result sur « sauvegarde: * »).
serveur_icinga egress 5432 tcp serveur_postgresql tls-requis Base relationnelle du moteur Icinga (verify-full).
serveur_icingaweb2 ingress 8080 tcp edge clair Interface web servie via l'edge (TLS terminé à l'edge ; SSO possible via oauth2-proxy).
serveur_icingaweb2 egress 636 tcp serveur_openldap tls-requis Authentification des utilisateurs sur l'annuaire (LDAPS).
serveur_icingaweb2 egress 5432 tcp serveur_postgresql tls-requis Lecture d'IcingaDB (base relationnelle, verify-full).
serveur_keycloak ingress 8080 tcp edge clair Console et endpoints OIDC servis au navigateur et aux applications via l'edge (TLS terminé à l'edge).
serveur_keycloak egress 636 tcp serveur_openldap tls-requis Fédération de l'annuaire OpenLDAP (LDAPS).
serveur_keycloak egress 5432 tcp serveur_postgresql tls-requis Persistance Keycloak dans PostgreSQL (verify-full).
serveur_loki ingress 3100 tcp client_journal tls Réception des journaux poussés par Alloy (client_journal) en HTTPS (http_tls_config, cert step-ca).
serveur_loki ingress 3100 tcp localhost clair Requêtes de Grafana co-localisé (datasource Loki en localhost).
serveur_nextcloud ingress 80 tcp edge clair Interface web servie via l'edge (TLS terminé à l'edge).
serveur_nextcloud egress 443 tcp edge tls-requis Découverte OIDC auprès de Keycloak (via son FQDN publié à l'edge).
serveur_nextcloud egress 5432 tcp serveur_postgresql tls-requis Base de données Nextcloud (verify-full).
serveur_nextcloud egress 9980 tcp serveur_collabora tls-cible Vérifications WOPI serveur->Collabora (édition en ligne). TLS interne = feuille de route edge->backends.
serveur_nginx ingress 80 tcp externe clair HTTP entrant — redirection permanente vers HTTPS.
serveur_nginx ingress 443 tcp externe tls-requis HTTPS entrant — services exposés (terminaison TLS à l'edge).
serveur_nginx ingress 443 tcp flotte tls-requis HTTPS depuis le tenant : les FQDN publiés vivent à l'edge (découverte OIDC, appels inter-services par nom).
serveur_nginx ingress 443 tcp admin tls-requis HTTPS depuis le reseau d'administration : l'exploitant administre les services par leur interface web, servie par l'edge.
serveur_nginx egress derive tcp expositions tls-cible Proxy vers les backends exposés (host:port dérivés des expose ; TLS interne = roadmap edge→backends).
serveur_oauth2_proxy ingress 4180 tcp edge clair Point d'entrée SSO servi via l'edge (TLS terminé à l'edge) devant l'application protégée.
serveur_oauth2_proxy egress 443 tcp edge tls-requis Émetteur OIDC (Keycloak) via son FQDN publié à l'edge : échange de jetons.
serveur_oauth2_proxy egress 8080 tcp localhost clair Relais vers l'application co-localisée protégée (upstream en localhost).
serveur_openldap ingress 389 tcp flotte starttls LDAP + STARTTLS pour les clients internes qui préfèrent la mise à niveau TLS sur 389.
serveur_openldap ingress 636 tcp serveur_keycloak, serveur_dovecot, serveur_icingaweb2, serveur_postfix tls-requis LDAPS : fédération (Keycloak), userdb courriel (Dovecot), auth web (Icinga Web 2), tables virtuelles (Postfix).
serveur_ops egress 22 tcp flotte ssh Piloter la flotte — c'est la raison d'être du poste.
serveur_ops egress 443 tcp edge tls-requis Cloner et resynchroniser le génome depuis la forge de l'écosystème.
serveur_ops egress 443 tcp voisins_site tls-requis Cloner le genome depuis la forge du site, quand cet ecosysteme n'heberge pas la sienne.
serveur_ops egress 8006 tcp externe tls-requis API de l'hyperviseur : créer et cloner les VM d'un écosystème descendant.
serveur_ops_site egress 22 tcp fabric ssh Shell des hyperviseurs : ce que l'API ne couvre pas — configuration reseau, ponts, deplacement de disques. Un pouvoir distinct de l'API, donc declare a part.
serveur_ops_site egress 22 tcp serveur_ops_tenant ssh Insemination : amorcer le runner d'un tenant — socle, moteur, plan, plancher de resolution — pour qu'il prenne ensuite le relais sur ses propres machines. Ne transporte aucun secret : la voute est remise par un humain.
serveur_ops_site egress 443 tcp fabric tls-requis API de la frontiere OPNsense : poser les alias et les regles qui ouvrent les flux du tenant qu'on materialise. Preparer le terrain sans cela laisserait un terrain injoignable.
serveur_ops_site egress 8006 tcp fabric tls-requis API de l'hyperviseur : créer, cloner et détruire les VM de la fabric. Le seul flux par lequel un écosystème peut en matérialiser un autre.
serveur_ops_tenant ingress 22 tcp runner_site ssh Insémination : le runner du SITE amorce ce runner-ci — socle, moteur, plan, plancher de résolution — jusqu'à ce qu'un humain lui remette sa voûte. Vers cette machine seule, jamais vers le reste de l'écosystème.
serveur_postfix ingress 25 tcp externe, client_smtp starttls SMTP entrant : courrier externe (MX) et notifications internes (client_smtp).
serveur_postfix ingress 587 tcp flotte starttls Soumission authentifiée (submission) pour les agents internes qui envoient du courrier.
serveur_postfix egress 24 tcp serveur_dovecot tls-requis Remise finale par LMTP au mailstore (Dovecot), en TLS vérifié.
serveur_postfix egress 25 tcp externe starttls Relais sortant vers les MX distants (STARTTLS opportuniste).
serveur_postfix egress 636 tcp serveur_openldap tls-requis Tables virtuelles (domaines/alias/boîtes) résolues sur l'annuaire (LDAPS).
serveur_postfix egress 11332 tcp localhost clair Filtre milter rspamd co-localisé (antispam + signature DKIM).
serveur_postfix egress 12345 tcp serveur_dovecot tls Validation SASL des identifiants de soumission contre Dovecot.
serveur_postgresql ingress 5432 tcp serveur_keycloak, serveur_forgejo, serveur_icinga, serveur_nextcloud tls-requis Connexions applicatives à PostgreSQL (verify-full ; pg_hba hostssl).
serveur_powerdns ingress derive udp flotte clair Zone souveraine. 53 seul sur son hôte, 5300 sur la loopback derrière le résolveur.
serveur_powerdns ingress derive tcp flotte clair Idem en TCP (réponses volumineuses, AXFR restreint par allow_axfr_ips).
serveur_powerdns egress 53 udp externe clair Résolution sortante du serveur autoritatif POUR SES PROPRES besoins (apt, NTP) — il ne récurse pour aucun autre hôte.
serveur_powerdns egress 53 tcp externe clair Repli TCP de la résolution sortante du serveur autoritatif (réponses dépassant la taille UDP).
serveur_prometheus ingress 9090 tcp localhost clair Console Prometheus consommée en local par Grafana co-localisé (pas d'exposition inter-nœud).
serveur_prometheus egress 9100 tcp client_metrique tls Scrape des node_exporter (HTTPS via cert step-ca) sur chaque nœud instrumenté.
serveur_redis ingress 6379 tcp localhost clair Cache/verrous consommés uniquement par l'application co-localisée (ex. Nextcloud). Aucune exposition inter-nœud.
serveur_resolveur ingress 53 udp flotte clair Toute la flotte du tenant résout ici — et nulle part ailleurs.
serveur_resolveur ingress 53 tcp flotte clair Réponses longues et bascule TCP, obligatoires en DNS.
serveur_resolveur egress 53 udp externe clair Récursion depuis les serveurs racine. Aucun transitaire : l'écosystème ne confie ses questions à personne.
serveur_resolveur_site ingress 53 udp voisins_site clair Les écosystèmes de ce site résolvent ici tant qu'ils n'ont pas leur propre résolveur. client_resolveur les bascule chez eux dès qu'il existe ; retirer cet emprunt est alors une émancipation.
serveur_resolveur_site ingress 53 tcp voisins_site clair Réponses longues et bascule TCP, obligatoires en DNS.
serveur_rspamd ingress 11332 tcp localhost clair Protocole milter consommé par Postfix co-localisé (analyse + signature DKIM). Local uniquement.
serveur_rspamd ingress 11334 tcp localhost clair Interface de contrôle rspamd (statistiques, apprentissage) en local.
serveur_step_ca ingress 8443 tcp flotte tls-requis ACME + API step-ca : chaque nœud (client_pki) émet/renouvelle ses certificats et récupère la racine.
serveur_web_dorsal ingress 80 tcp edge clair Front nginx local des webapps, proxie par l'edge (TLS termine a l'edge).
serveur_web_dorsal egress 443 tcp flotte tls git clone/pull du depot de chaque app (Forgejo souverain) au deploiement.
serveur_web_frontal ingress 80 tcp edge clair Contenu statique servi au navigateur via l'edge (TLS termine a l'edge).
serveur_web_frontal egress 443 tcp flotte tls git clone/pull du depot du site (Forgejo souverain) au deploiement.

Synthèse chiffrement

  • clair : 37 flux
  • n-a : 3 flux
  • ssh : 8 flux
  • starttls : 6 flux
  • tls : 10 flux
  • tls-cible : 2 flux
  • tls-requis : 34 flux