diff --git a/wiki/Rôle-client_sante.md b/wiki/Rôle-client_sante.md index 33fb5fd..2b4ba0b 100644 --- a/wiki/Rôle-client_sante.md +++ b/wiki/Rôle-client_sante.md @@ -8,6 +8,7 @@ ```mermaid graph LR R["sante"] + R -.->|"sonde « disque »"| ICINGA[["Icinga"]] ``` ## Qui lui parle @@ -16,7 +17,9 @@ graph LR ## Ce qu'il rend à la supervision -*Aucune sonde déclarée. Un service qui porte de l'état et n'en déclare aucune mérite qu'on se demande pourquoi — voir `docs/supervision-conception.md`.* +| sonde | TTL | ce qu'elle voit | +|---|---|---| +| `disque` | 5400 s | Reste-t-il de la place, et des inodes, sur chaque systeme de fichiers ? Seuls le cache apt et les depots de sauvegarde etaient surveilles : un disque plein arretait la base ou le courriel sans prevenir. | ## Ce qu'il expose en séries diff --git a/wiki/Rôle-serveur_dns_public.md b/wiki/Rôle-serveur_dns_public.md new file mode 100644 index 0000000..d8d0dad --- /dev/null +++ b/wiki/Rôle-serveur_dns_public.md @@ -0,0 +1,39 @@ +# Rôle `serveur_dns_public` + +> **Généré** par `scripts/fiche_role.py` depuis les `meta/` de ce rôle. +> Ne pas éditer à la main : corriger la déclaration, puis régénérer. + +> **Pour qui :** celui qui doit agir sur ce rôle et veut savoir, avant de toucher quoi que ce soit, qui lui parle, ce qu'il rend, et ce qu'il coûte. + +```mermaid +graph LR + R["dns_public"] + E0["externe"] -->|"1053 · clair"| R + E1["site"] -->|"53 · clair"| R + R -.->|"sonde « zones-publiques »"| ICINGA[["Icinga"]] +``` + +## Qui lui parle + +| port | depuis | chiffrement | pourquoi | +|---|---|---|---| +| `1053` | `externe` | clair | Les resolveurs de l'Internet interrogent les zones publiques des locataires du site. Les reponses sont signees DNSSEC : leur integrite ne depend ni du transport, ni de nous. | +| `1053` | `externe` | clair | Repli TCP : reponses tronquees par dnsdist (ANY, debit) et reponses signees trop grosses pour l'UDP. | +| `53` | `voisins_site` | clair | NOTIFY des primaires des locataires du site : une zone publique a change. Le contenu d'une zone publique n'a rien de secret ; ce qui compte est QUI peut le modifier, et c'est TSIG qui le garde, sur le transfert. | +| `53` | `voisins_site` | clair | Repli TCP des notifications des primaires des locataires. | + +## Ce qu'il rend à la supervision + +| sonde | TTL | ce qu'elle voit | +|---|---|---| +| `zones-publiques` | 5400 s | Le serveur public sert-il TOUTES les zones de ses locataires ? Un secondaire qui n'a jamais recu une zone repond REFUSED : pour Internet, ce domaine n'a plus de serveur de noms, pendant que le service a l'air parfaitement vivant. | + +## Ce qu'il expose en séries + +*Aucun exportateur déclaré — voir `docs/metriques-conception.md`.* + +## Ce qu'il coûte, et qui entre + +- **Empreinte** : 1 cœur(s), 512 Mo, 2 Go. +- **Authentification** : `sans-auth-humaine` — Serveur DNS autoritatif public : il repond a qui le demande, et c'est son objet. Ce qui s'authentifie ici, ce sont les SERVEURS entre eux (TSIG sur le transfert), jamais un humain. + diff --git a/wiki/Rôle-serveur_grafana.md b/wiki/Rôle-serveur_grafana.md index 619b8d4..a74cae3 100644 --- a/wiki/Rôle-serveur_grafana.md +++ b/wiki/Rôle-serveur_grafana.md @@ -23,7 +23,7 @@ graph LR | sonde | TTL | ce qu'elle voit | |---|---|---| -| `tableaux` | 5400 s | Grafana repond-il, et sa base tient-elle ? Un Grafana dont la base est tombee sert encore sa page de connexion : il a l'air en ligne et ne peut plus rien montrer. | +| `tableaux` | 5400 s | Grafana repond-il, sa base tient-elle, et ses SOURCES DE DONNEES aussi ? Un Grafana dont la base est tombee sert encore sa page de connexion ; un Grafana dont la source Loki parle en clair a un Loki en HTTPS repond aussi — et n'affiche rien (2026-09-28). | ## Ce qu'il expose en séries diff --git a/wiki/Rôle-serveur_icingaweb2.md b/wiki/Rôle-serveur_icingaweb2.md index 81483dc..097e323 100644 --- a/wiki/Rôle-serveur_icingaweb2.md +++ b/wiki/Rôle-serveur_icingaweb2.md @@ -8,7 +8,8 @@ ```mermaid graph LR R["icingaweb2"] - E0["edge"] -->|"8080 · clair"| R + E0["admin"] -->|"8080 · clair"| R + E1["edge"] -->|"8080 · clair"| R R -.->|"sonde « console »"| ICINGA[["Icinga"]] ``` @@ -16,7 +17,7 @@ graph LR | port | depuis | chiffrement | pourquoi | |---|---|---|---| -| `8080` | `edge` | clair | Interface web servie via l'edge (TLS terminé à l'edge ; SSO possible via oauth2-proxy). | +| `8080` | `edge`, `admin` | clair | Interface web servie via l'edge (TLS terminé à l'edge ; SSO possible via oauth2-proxy), et joignable depuis le plan d'administration là où il n'y a pas d'edge. | ## Ce qu'il rend à la supervision diff --git a/wiki/Rôle-serveur_ops.md b/wiki/Rôle-serveur_ops.md index 6d450f4..3d80b2b 100644 --- a/wiki/Rôle-serveur_ops.md +++ b/wiki/Rôle-serveur_ops.md @@ -8,18 +8,24 @@ ```mermaid graph LR R["ops"] + E0["admin"] -->|"8090 · clair"| R + E1["edge"] -->|"8090 · clair"| R R -.->|"sonde « runner »"| ICINGA[["Icinga"]] + R -.->|"sonde « console-ops »"| ICINGA[["Icinga"]] ``` ## Qui lui parle -*Aucun flux entrant déclaré — `meta/flux.yml` absent ou sans `ingress`.* +| port | depuis | chiffrement | pourquoi | +|---|---|---|---| +| `8090` | `edge`, `admin` | clair | Console d'exploitation servie par l'edge (TLS terminé à l'edge), et joignable depuis le plan d'administration là où il n'y a pas d'edge. Le GUI lui-même reste sur la boucle locale : c'est nginx qui authentifie devant. | ## Ce qu'il rend à la supervision | sonde | TTL | ce qu'elle voit | |---|---|---| | `runner` | 5400 s | Le poste d'exploitation peut-il encore agir ? Deux choses : ses depots sont-ils PROPRES et sur leur branche (une modification locale fait diverger le runner du depot que tout le monde lit), et Ansible repond-il dans son venv. | +| `console-ops` | 5400 s | La console d'exploitation repond-elle, et son vestibule tient-il ? Un GUI mort derriere un nginx vivant rend une page d'erreur a qui sait deja entrer ; un vestibule tombe rend la fabric entiere a qui trouve l'URL. Le second ne fait echouer personne — c'est pourquoi il faut le mesurer. | ## Ce qu'il expose en séries diff --git a/wiki/Rôle-serveur_ops_site.md b/wiki/Rôle-serveur_ops_site.md index 08378eb..b57bfb9 100644 --- a/wiki/Rôle-serveur_ops_site.md +++ b/wiki/Rôle-serveur_ops_site.md @@ -9,6 +9,8 @@ graph LR R["ops_site"] R -.->|"sonde « pouvoir-materialiser »"| ICINGA[["Icinga"]] + R -.->|"sonde « fabric »"| ICINGA[["Icinga"]] + R -.->|"sonde « genome-a-jour »"| ICINGA[["Icinga"]] ``` ## Qui lui parle @@ -20,6 +22,8 @@ graph LR | sonde | TTL | ce qu'elle voit | |---|---|---| | `pouvoir-materialiser` | 5400 s | Le runner du site peut-il encore materialiser, et son secret est-il toujours protege ? La carte de la fabric, la voute du site et sa cle ne font tomber aucun service en disparaissant — on s'en apercoit quand un ecosysteme doit naitre. Et une voute dechiffree en transit ne fait echouer aucun deploiement : Ansible la lit tres bien, elle expose simplement tout. | +| `fabric` | 5400 s | Le pare-feu Proxmox, le SDN, la frontiere et les acces WireGuard disent-ils encore ce que le plan dit ? Le 2026-09-28, aucune VM des locataires n'avait son pare-feu actif et rien ne le signalait ; les plans existaient, personne ne les jouait sans raison. | +| `genome-a-jour` | 5400 s | La forge du site porte-t-elle ce que le poste a publie ? Elle fait autorite, mais un `git push` seul, ou un runner injoignable au moment de publier, la laisse en retard sans rien dire — le 2026-08-26, quatre commits dont un correctif du pare-feu. | ## Ce qu'il expose en séries diff --git a/wiki/Rôle-serveur_powerdns.md b/wiki/Rôle-serveur_powerdns.md index 1c99386..1ba3805 100644 --- a/wiki/Rôle-serveur_powerdns.md +++ b/wiki/Rôle-serveur_powerdns.md @@ -9,6 +9,7 @@ graph LR R["powerdns"] E0["flotte"] -->|"derive · clair"| R + E1["public_site"] -->|"5300 · clair"| R R -.->|"sonde « zones »"| ICINGA[["Icinga"]] ``` @@ -18,6 +19,8 @@ graph LR |---|---|---|---| | `derive` | `flotte` | clair | Zone souveraine. 53 seul sur son hôte, 5300 sur la loopback derrière le résolveur. | | `derive` | `flotte` | clair | Idem en TCP (réponses volumineuses, AXFR restreint par allow_axfr_ips). | +| `5300` | `dns_public_site` | clair | AXFR signe TSIG par le serveur DNS public du site, vers l'instance publique uniquement. | +| `5300` | `dns_public_site` | clair | Interrogation du SOA par le secondaire du site avant chaque transfert. | ## Ce qu'il rend à la supervision diff --git a/wiki/Rôle-serveur_rspamd.md b/wiki/Rôle-serveur_rspamd.md index 1228f24..d365c3d 100644 --- a/wiki/Rôle-serveur_rspamd.md +++ b/wiki/Rôle-serveur_rspamd.md @@ -24,7 +24,7 @@ graph LR | sonde | TTL | ce qu'elle voit | |---|---|---| -| `filtrage` | 5400 s | Le filtrage du courrier repond-il ? Un filtre muet ne bloque pas le courrier, il le laisse passer : Postfix sans verdict delivre sans filtrer ou differe, et le service de courriel a l'air sain pendant que le pourriel entre. | +| `filtrage` | 5400 s | Le filtrage du courrier repond-il, et ANALYSE-T-IL (GTUBE rejete) ? Un filtre muet ne bloque pas le courrier, il le laisse passer : Postfix sans verdict delivre sans filtrer ou differe, et le service de courriel a l'air sain pendant que le pourriel entre. | ## Ce qu'il expose en séries diff --git a/wiki/Rôles.md b/wiki/Rôles.md index a6dbae8..e4224b0 100644 --- a/wiki/Rôles.md +++ b/wiki/Rôles.md @@ -20,7 +20,7 @@ Chaque fiche est construite depuis ce que le rôle **déclare lui-même** — `m | [`client_metrique`](Rôle-client_metrique) | 1 | 1 | — | | [`client_pki`](Rôle-client_pki) | — | 1 | — | | [`client_resolveur`](Rôle-client_resolveur) | — | — | — | -| [`client_sante`](Rôle-client_sante) | — | — | — | +| [`client_sante`](Rôle-client_sante) | — | 1 | — | | [`client_smtp`](Rôle-client_smtp) | — | — | — | | [`cloud_init`](Rôle-cloud_init) | — | — | — | | [`cloud_init_retrait`](Rôle-cloud_init_retrait) | — | — | — | @@ -44,6 +44,7 @@ Chaque fiche est construite depuis ce que le rôle **déclare lui-même** — `m | [`serveur_cache_site`](Rôle-serveur_cache_site) | 1 | 1 | — | | [`serveur_collabora`](Rôle-serveur_collabora) | 2 | 1 | — | | [`serveur_debian`](Rôle-serveur_debian) | 3 | 2 | — | +| [`serveur_dns_public`](Rôle-serveur_dns_public) | 4 | 1 | — | | [`serveur_dovecot`](Rôle-serveur_dovecot) | 3 | 1 | — | | [`serveur_durci`](Rôle-serveur_durci) | — | 1 | — | | [`serveur_forge_site`](Rôle-serveur_forge_site) | 1 | 1 | — | @@ -57,12 +58,12 @@ Chaque fiche est construite depuis ce que le rôle **déclare lui-même** — `m | [`serveur_nginx`](Rôle-serveur_nginx) | 4 | 1 | — | | [`serveur_oauth2_proxy`](Rôle-serveur_oauth2_proxy) | 1 | 1 | — | | [`serveur_openldap`](Rôle-serveur_openldap) | 2 | 1 | — | -| [`serveur_ops`](Rôle-serveur_ops) | — | 1 | — | -| [`serveur_ops_site`](Rôle-serveur_ops_site) | — | 1 | — | +| [`serveur_ops`](Rôle-serveur_ops) | 1 | 2 | — | +| [`serveur_ops_site`](Rôle-serveur_ops_site) | — | 3 | — | | [`serveur_ops_tenant`](Rôle-serveur_ops_tenant) | 1 | 1 | — | | [`serveur_postfix`](Rôle-serveur_postfix) | 2 | 1 | — | | [`serveur_postgresql`](Rôle-serveur_postgresql) | 2 | 1 | oui | -| [`serveur_powerdns`](Rôle-serveur_powerdns) | 2 | 1 | — | +| [`serveur_powerdns`](Rôle-serveur_powerdns) | 4 | 1 | — | | [`serveur_prometheus`](Rôle-serveur_prometheus) | 1 | 1 | — | | [`serveur_redis`](Rôle-serveur_redis) | 1 | 1 | — | | [`serveur_resolveur`](Rôle-serveur_resolveur) | 2 | 1 | — | @@ -81,11 +82,11 @@ Chaque fiche est construite depuis ce que le rôle **déclare lui-même** — `m ## Ce qui reste à déclarer -Sur **68** rôles : +Sur **69** rôles : -- **36** ne déclarent aucun flux entrant -- **32** ne déclarent aucune sonde -- **67** ne déclarent aucune métrique +- **35** ne déclarent aucun flux entrant +- **31** ne déclarent aucune sonde +- **68** ne déclarent aucune métrique Ces nombres ne sont pas tous des dettes : un rôle de durcissement n'a rien à exposer, et beaucoup de `client_*` n'ont aucun verdict à rendre. Mais un service qui porte de l'état et ne déclare rien mérite qu'on se demande pourquoi.