Set-OPS-Public/docs/registre-flux.md
Daniel Allaire 4d37570c0c frontière : la sortie générale est déclarée, pas subie
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>
2026-08-02 13:10:45 -04:00

11 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 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_smtp egress 25 tcp serveur_postfix starttls Relais des notifications locales vers le MTA central (Postfix), STARTTLS.
client_unbound ingress 53 udp localhost clair Résolveur local sur boucle locale (les processus du nœud interrogent 127.0.0.1).
client_unbound egress 53 tcp serveur_powerdns clair Transfert des requêtes de la zone souveraine vers le DNS autoritatif interne (PowerDNS).
client_unbound egress 53 udp externe clair Récursion DNS depuis la racine (UDP d'abord), validée par DNSSEC — la confidentialité du transport n'est pas l'enjeu, l'authenticité l'est.
client_unbound egress 53 tcp externe clair Récursion DNS en TCP : repli obligatoire quand la réponse dépasse la taille UDP (fréquent avec DNSSEC).
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_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 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_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_forgejo ingress 3000 tcp edge clair Interface web + Git HTTP servis via l'edge (TLS terminé à l'edge).
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 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 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_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 53 udp flotte clair Résolution DNS interne (zone souveraine). DoT/DoH = feuille de route (chiffrement DNS).
serveur_powerdns ingress 53 tcp flotte clair Résolution DNS interne en TCP (réponses volumineuses, AXFR restreint par allow_axfr_ips).
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_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 : 26 flux
  • n-a : 1 flux
  • ssh : 3 flux
  • starttls : 6 flux
  • tls : 8 flux
  • tls-cible : 2 flux
  • tls-requis : 22 flux