Rend l'écosystème reconstructible en une commande (create+deploy idempotent) et ajoute la couche « accès » (nftables least-privilege) au zéro-confiance. Orchestrateur (phase 2) : - docs/couches-deploiement.yml : registre des couches (socle → pki → services → apps → agents) - scripts/orchestrer.py : tri par couche + topo intra-couche (graphe) → playbooks/site.yml ordonné - Makefile : site / deployer-tout / flotte-creer / reconstruire / myDay (+ gardes CONFIRMER) - docs/dependances-groupes.yml : graphe complété (keycloak→openldap, dovecot, postfix, icingaweb2, nextcloud) Audit codé-en-dur (phase 1b) : labels/slug OIDC dérivés de l'intrant `organisation` (serveur_forgejo/grafana/nextcloud) — le moteur ne porte plus de nom de tenant. Registre des flux réseau (phase 0) : - meta/flux.yml pour tous les rôles (29 rôles, 63 flux ; schéma + matrice validés) - scripts/resoudre_flux.py : matrice d'audit (docs/registre-flux.md) + rulesets nftables résolus par hôte - roles/nftables_baseline : déploie le ruleset résolu (moindre-privilège) quand activé, sinon repli Correctifs : détection du coffre Vault (chemin production → inventaire réellement résolu). Outillage : make wiki-publier (publication du wiki pédagogique dans Forgejo). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
58 lines
3.3 KiB
Markdown
58 lines
3.3 KiB
Markdown
# Registre des flux réseau — conception
|
|
|
|
## But
|
|
Set-OPS tient un **registre des flux** (qui parle à qui, sur quel port, dans quel sens, pourquoi)
|
|
pour **deux usages** :
|
|
1. **Générer les règles nftables** de chaque serveur — autoriser les flux déclarés, **tout refuser
|
|
d'autre** (moindre privilège). Complète la couche *chiffrement* (TLS) par la couche *accès*.
|
|
2. **Preuve d'audit** — la matrice d'accès réseau documentée (source → dest : port : chiffrement :
|
|
raison), exigée par un audit de sécurité et le label de certification.
|
|
|
|
## Principe : le rôle possède ses flux
|
|
Comme `meta/empreinte.yml` (dimensionnement) est la propriété du rôle, **`roles/<rôle>/meta/flux.yml`**
|
|
déclare les flux du logiciel. Le rôle sait sur quoi il écoute et à quoi il se connecte ; personne
|
|
d'autre. Le registre global se **dérive** de l'ensemble des `flux.yml` des rôles présents sur un nœud.
|
|
|
|
## Schéma de `meta/flux.yml`
|
|
```yaml
|
|
flux:
|
|
- sens: ingress # ingress = ce rôle ÉCOUTE ; egress = ce rôle SE CONNECTE
|
|
port: 5432 # entier ou liste [80, 443]
|
|
protocole: tcp # tcp | udp
|
|
pair: [serveur_keycloak, serveur_forgejo] # QUI — voir « Résolution du pair »
|
|
chiffrement: tls-requis # tls-requis | tls | starttls | ssh | tls-cible | clair | n-a (bonus audit)
|
|
# tls-requis : chiffré + pair vérifié (verify-full) | tls : chiffré | starttls : mise à niveau opportuniste
|
|
# ssh : transport SSH (chiffré, hôte vérifié) | tls-cible : TLS visé mais pas encore appliqué (feuille de route)
|
|
# clair : non chiffré (local ou terminé à l'edge) | n-a : sans objet
|
|
raison: "Connexions applicatives (verify-full)." # lisible, pour l'audit
|
|
```
|
|
|
|
### Résolution du `pair`
|
|
| Valeur | Résout vers |
|
|
|---|---|
|
|
| un **rôle/groupe** (`serveur_prometheus`) | les IP des hôtes de ce groupe (via le plan) |
|
|
| `edge` | le(s) hôte(s) de l'edge (`serveur_nginx`) |
|
|
| `flotte` | tous les nœuds de l'instance |
|
|
| `externe` | hors flotte (frontière publique — géré à l'OPNsense, pas dans le nœud) |
|
|
| `localhost` | boucle locale — aucune règle inter-nœud (nftables autorise `lo`) |
|
|
| `expositions` | dérivé des `expose:` des applications (cas de l'edge → backends) |
|
|
|
|
La résolution `pair → IP` réutilise le **plan** (registre IP/FQDN/zones) déjà en place.
|
|
|
|
## Génération
|
|
Un **résolveur** (miroir de `instancier`) agrège, par serveur, les `flux.yml` de tous ses rôles
|
|
(services + intégrations), résout les `pair`, et produit :
|
|
- **`nftables`** : ruleset par serveur (allow des flux résolus, `policy drop` par défaut), consommé
|
|
par le rôle `nftables_baseline` ;
|
|
- **le registre d'audit** : `docs/registre-flux.md` (généré) + une cible `make flux`.
|
|
|
|
## Activation prudente
|
|
Activer nftables = **action destructive** (peut couper l'accès) → confirmation explicite +
|
|
déploiement graduel (garder l'accès SSH/Ansible, tester par nœud). nftables reste *préparé mais
|
|
non activé* tant que le registre n'est pas complet et validé.
|
|
|
|
## Séquence
|
|
1. ✅ figer le schéma (ce doc) + **piloter** sur postgresql / client_metrique / nginx ;
|
|
2. le **résolveur** (agrégation → règles + registre) ;
|
|
3. **remplir** tous les rôles (large transcription du travail zéro-confiance déjà fait) ;
|
|
4. **générer** + registre d'audit ; puis **activer** nftables nœud par nœud.
|