2026-06-24 20:17:46 -04:00
|
|
|
---
|
|
|
|
|
client_journal_paquets:
|
|
|
|
|
- alloy
|
|
|
|
|
|
|
|
|
|
client_journal_service: "alloy"
|
|
|
|
|
client_journal_utilisateur: "alloy"
|
|
|
|
|
client_journal_config: "/etc/alloy/config.alloy"
|
|
|
|
|
|
|
|
|
|
# Point de collecte Loki (obs-01, serveur_loki, VLAN 14).
|
2026-07-05 00:40:57 -04:00
|
|
|
# Hôte Loki dérivé du groupe serveur_loki (FQDN via le plancher) ; override par instance au besoin.
|
chiffrement : metriques et journaux du site en TLS, et la frontiere certifiee par sa propre autorite
Metriques et journaux (CHANGELOG 142). Le site pose les quatre interrupteurs TLS
que chaque locataire pose dans ses group_vars : node_exporter et Loki servaient
en HTTP sur les neuf VM, le certificat etait la, inutilise. test_parite_tls_site.py
compare desormais le site aux locataires. Les hyperviseurs poussent leurs
journaux en HTTPS verifie, avec la racine du site comme simple fichier.
L'exportateur PostgreSQL sert en HTTPS partout, sur l'interrupteur de PostgreSQL
lui-meme, que Prometheus lit pour choisir son schema.
La frontiere (CHANGELOG 143). Une autorite subordonnee signee par la racine du
site, bornee (pathlen 0, noms sous le domaine et adresses du site, contrainte
critique), cle nee sur la boite (scripts/frontiere_pki.py). Syslog vers Loki en
TLS mutuel (seule la frontiere peut ecrire), exportateur en HTTPS, interface web
sur le certificat de services ; les clients d'API verifient la frontiere contre
la racine du site. La lecture du magasin passe par config.xml : l'API de
recherche renvoie les cles privees.
Deploye et mesure au site, chez les deux locataires et sur la frontiere ; 95 preuves.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 14:25:28 -04:00
|
|
|
# LE SCHEMA SUIT L'INTERRUPTEUR TLS (2026-10-12) — meme defaut que Grafana le 2026-09-28 :
|
|
|
|
|
# une URL `http://` ecrite a cote d'un `client_journal_loki_tls: true` parlerait en clair a
|
|
|
|
|
# un Loki qui n'ecoute qu'en HTTPS.
|
|
|
|
|
client_journal_loki_url: >-
|
|
|
|
|
{{ 'https' if client_journal_loki_tls | bool else 'http' }}://{{
|
|
|
|
|
(groups.get('serveur_loki') or ['obs-01']) | first }}.{{ domaine_interne }}:3100/loki/api/v1/push
|
2026-06-24 20:17:46 -04:00
|
|
|
|
|
|
|
|
# Depot apt officiel Grafana (partage avec serveur_loki / serveur_grafana).
|
les depots tiers passent par le cache, et le tenant n a plus le sien
Deux mouvements d une seule doctrine : le site fournit tout ce dont un
tenant a besoin pour venir au monde.
1. LES DEPOTS TIERS. Grafana, Icinga, Smallstep et Collabora ne publient
qu en HTTPS ; apt-cacher-ng ne relaie pas un tunnel, et le socle pose donc
Acquire::https::Proxy DIRECT. Chaque machine sortait elle-meme sur
Internet. Le cache declare desormais un Remap par fournisseur, et chaque
role demande en {{ ..._depot_schema }}:// - http des qu un cache est
declare, https sinon. Le TLS n est rompu nulle part : il est TERMINE au
cache, qui est notre machine, et l integrite vient des signatures.
avant : 4 fournisseurs en HTTPS direct, 14 machines sortant seules
apres : 0 source en HTTPS direct, 0 erreur apt sur 14 machines
Trois lecons. Le remap appartient au cache qui SORT : pose sur un cache
chaine, il tente le HTTPS a travers son amont et rend 503. apt_repository
AJOUTE au lieu de remplacer, donc l ancienne ligne https sortait toujours.
Et la liste des fournisseurs ne se devine pas - j en avais trois, l audit
en a revele un quatrieme.
2. LE CACHE DU TENANT. Sa ligne portait son propre retrait depuis toujours
- service MUTUALISABLE, un ecosysteme au premier age peut pointer sur celui
de son hote. Retiree. Ce qu on perd, dit franchement : plus de trafic
inter-zone et plus de charge sur site-cache-01, contre un service de moins
a poser, superviser et reproduire.
3. UN ROLE QU ON RETIRE DOIT DEFAIRE CE QU IL A FAIT. Le retrait a montre
que rien ne nettoie derriere. Le fichier apt visait un cache eteint en
ecrasant le plancher qui fonctionnait - le defaut deja paye a quinze
machines. Et les sondes du cache restaient, le porteur poussant pour des
services qu Icinga ne definit plus (404). Le socle retire le premier,
client_sante derive les sondes attendues et retire les orphelines.
P65 refuse tout role visant un depot relaye en https ecrit en dur. Sa
limite est dite : elle empeche une regression sur ce qui est connu, elle ne
decouvre pas l inconnu.
Mesure : Icinga 87 OK sur 96, prouver 65 OK, lint 0 defaut.
Reste, et c est dit : apt-cacher-ng tourne toujours sur forge-01 que plus
aucun plan ne declare.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 14:53:48 -04:00
|
|
|
client_journal_depot_cle_url: "{{ client_journal_depot_schema }}://apt.grafana.com/gpg-full.key"
|
2026-06-24 20:17:46 -04:00
|
|
|
client_journal_depot_cle_fichier: "/etc/apt/keyrings/grafana.asc"
|
les depots tiers passent par le cache, et le tenant n a plus le sien
Deux mouvements d une seule doctrine : le site fournit tout ce dont un
tenant a besoin pour venir au monde.
1. LES DEPOTS TIERS. Grafana, Icinga, Smallstep et Collabora ne publient
qu en HTTPS ; apt-cacher-ng ne relaie pas un tunnel, et le socle pose donc
Acquire::https::Proxy DIRECT. Chaque machine sortait elle-meme sur
Internet. Le cache declare desormais un Remap par fournisseur, et chaque
role demande en {{ ..._depot_schema }}:// - http des qu un cache est
declare, https sinon. Le TLS n est rompu nulle part : il est TERMINE au
cache, qui est notre machine, et l integrite vient des signatures.
avant : 4 fournisseurs en HTTPS direct, 14 machines sortant seules
apres : 0 source en HTTPS direct, 0 erreur apt sur 14 machines
Trois lecons. Le remap appartient au cache qui SORT : pose sur un cache
chaine, il tente le HTTPS a travers son amont et rend 503. apt_repository
AJOUTE au lieu de remplacer, donc l ancienne ligne https sortait toujours.
Et la liste des fournisseurs ne se devine pas - j en avais trois, l audit
en a revele un quatrieme.
2. LE CACHE DU TENANT. Sa ligne portait son propre retrait depuis toujours
- service MUTUALISABLE, un ecosysteme au premier age peut pointer sur celui
de son hote. Retiree. Ce qu on perd, dit franchement : plus de trafic
inter-zone et plus de charge sur site-cache-01, contre un service de moins
a poser, superviser et reproduire.
3. UN ROLE QU ON RETIRE DOIT DEFAIRE CE QU IL A FAIT. Le retrait a montre
que rien ne nettoie derriere. Le fichier apt visait un cache eteint en
ecrasant le plancher qui fonctionnait - le defaut deja paye a quinze
machines. Et les sondes du cache restaient, le porteur poussant pour des
services qu Icinga ne definit plus (404). Le socle retire le premier,
client_sante derive les sondes attendues et retire les orphelines.
P65 refuse tout role visant un depot relaye en https ecrit en dur. Sa
limite est dite : elle empeche une regression sur ce qui est connu, elle ne
decouvre pas l inconnu.
Mesure : Icinga 87 OK sur 96, prouver 65 OK, lint 0 defaut.
Reste, et c est dit : apt-cacher-ng tourne toujours sur forge-01 que plus
aucun plan ne declare.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 14:53:48 -04:00
|
|
|
client_journal_depot_source: "deb [signed-by=/etc/apt/keyrings/grafana.asc] {{ client_journal_depot_schema }}://apt.grafana.com stable main"
|
2026-07-04 21:15:00 -04:00
|
|
|
|
|
|
|
|
# --- TLS (zero-confiance) : Alloy pousse vers Loki en https + verifie root_ca ---
|
|
|
|
|
client_journal_loki_tls: false
|
|
|
|
|
client_journal_loki_ca: "/etc/step/certs/root_ca.crt"
|
chiffrement : metriques et journaux du site en TLS, et la frontiere certifiee par sa propre autorite
Metriques et journaux (CHANGELOG 142). Le site pose les quatre interrupteurs TLS
que chaque locataire pose dans ses group_vars : node_exporter et Loki servaient
en HTTP sur les neuf VM, le certificat etait la, inutilise. test_parite_tls_site.py
compare desormais le site aux locataires. Les hyperviseurs poussent leurs
journaux en HTTPS verifie, avec la racine du site comme simple fichier.
L'exportateur PostgreSQL sert en HTTPS partout, sur l'interrupteur de PostgreSQL
lui-meme, que Prometheus lit pour choisir son schema.
La frontiere (CHANGELOG 143). Une autorite subordonnee signee par la racine du
site, bornee (pathlen 0, noms sous le domaine et adresses du site, contrainte
critique), cle nee sur la boite (scripts/frontiere_pki.py). Syslog vers Loki en
TLS mutuel (seule la frontiere peut ecrire), exportateur en HTTPS, interface web
sur le certificat de services ; les clients d'API verifient la frontiere contre
la racine du site. La lecture du magasin passe par config.xml : l'API de
recherche renvoie les cles privees.
Deploye et mesure au site, chez les deux locataires et sur la frontiere ; 95 preuves.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 14:25:28 -04:00
|
|
|
# UNE MACHINE SANS PKI PEUT QUAND MEME VERIFIER (2026-10-12). Un hyperviseur n'a pas
|
|
|
|
|
# `client_pki` : aucune racine sous /etc/step. Pour verifier Loki, il lui suffit du
|
|
|
|
|
# certificat PUBLIC de l'autorite — pas d'un certificat a lui. Non vide, ce contenu est
|
|
|
|
|
# pose a `client_journal_loki_ca` (au site, `ac-racine-site.crt` lu par l'inventaire).
|
|
|
|
|
client_journal_loki_ca_contenu: ""
|
2026-08-09 09:04:25 -04:00
|
|
|
|
|
|
|
|
# Port de l'interface HTTP locale d'Alloy (diagnostic). DECLARE ici parce que son defaut
|
courriel : les mots de passe de soumission ne quittent plus la machine de Postfix
Postfix (edge-mta) faisait verifier chaque mot de passe de soumission par le
Dovecot du mailstore, sur :12345. Le client SASL Dovecot de Postfix ne chiffre
pas : chaque mot de passe traversait le reseau en clair, et le registre disait
ce flux tls.
Le flux est supprime, pas chiffre. serveur_postfix pose a cote de lui un
Dovecot d'authentification seule (serveur_dovecot/tasks/auth_locale.yml) :
coeur + LDAP, aucun protocole, aucun port, joint par private/auth, qui verifie
sur l'annuaire en LDAPS. Le 12345 disparait des deux roles et du pare-feu ;
serveur_dovecot_sasl_reseau est retire, et une garde arrete l'instance qui le
pose encore.
Deploye chez les deux locataires ; prouve par un envoi reel chez chacun
(sasl_username au journal, remise LMTP, relu par IMAP). test_sasl_local.py
garde le changement ; 95 preuves.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 11:26:18 -04:00
|
|
|
# amont — 12345 — entrait en collision avec `serveur_dovecot_sasl_port`, qui valait 12345
|
|
|
|
|
# lui aussi (SASL reseau, pour la soumission :587 ; retire le 2026-10-12 — il passait en
|
|
|
|
|
# clair). Le port reste declare : le defaut amont, lui, n'a pas change.
|
2026-08-09 09:04:25 -04:00
|
|
|
#
|
|
|
|
|
# Sur `infra-mail-01`, les deux cohabitent : le premier demarre gagne, l'autre boucle sur
|
|
|
|
|
# « bind: address already in use ». Constate le 2026-08-08 lors de la premiere
|
|
|
|
|
# reconstruction from-zero, ou l'ordre des couches fait demarrer Dovecot bien avant Alloy.
|
|
|
|
|
# En exploitation courante le conflit dormait : Alloy tenait le port depuis toujours, et
|
|
|
|
|
# c'est l'ecoute SASL de Dovecot qui echouait — en silence.
|
|
|
|
|
#
|
|
|
|
|
# Le vrai defaut n'est pas le numero, c'est qu'un port SUBI ne se declare nulle part et
|
|
|
|
|
# qu'aucun controle ne peut donc voir la collision.
|
|
|
|
|
client_journal_http_port: 12346
|
|
|
|
|
client_journal_http_adresse: "127.0.0.1"
|
observabilite : le site cesse de ne rien voir de lui-meme
D-87 disait que l hebergeur n a pas le droit de voir les journaux de ses
locataires. La decision avait une face cachee : a force de refuser de voir
ceux des autres, le site s etait prive des siens. Ses sept machines
n expediaient nulle part.
Il prend donc sa propre pile : prometheus, loki et grafana sur site-mon-01,
sans aucun lien avec ceux d un tenant. L exemption qui bloquait portait sa
propre condition de levee, ecrite cinq jours plus tot dans le plan.
Grafana au site n a pas de SSO, et le role l ignorait : il reclamait l IdP
avant de regarder s il en voulait un. L interrupteur existait, il n etait
pas honore. Le role refuse desormais SSO eteint ET formulaire local eteint
- la combinaison deploie un Grafana en sante ou personne ne peut entrer -
et le reglage du formulaire sort du if du SSO, ou il disparaissait en
laissant le defaut amont decider en silence.
Deux manques se cachaient l un l autre dans le devis de la frontiere, et
Prometheus voyait 1 cible sur 7 :
- le devis derivait les groupes d une machine du site de applications.yml
seul, et ne voyait donc aucune integration universelle - alors que
client_metrique ouvre un port d ecoute ;
- une sortie vers un role du site visait !SETOPS_INTERNES, qui exclut
precisement la machine nommee. Le devis autorisait a expedier les
journaux du site a n importe quel Loki du monde, et a nul autre endroit
qu a celui-la. Neuf flux dans ce cas.
Et deux declarations justes ne font qu une regle : appliquer_opnsense pose
tout en direction: in (D-61).
Les deux agents se supervisent enfin eux-memes. La sonde des journaux ne
demande pas si Alloy tourne, elle lit ce qu il a du JETER. Elle a fait ses
preuves le jour meme : Alloy actif, /-/ready a 200, et cinquante lignes
perdues sur six machines.
Mesure : metriques 7/7 vert, journaux 1/7 - les six autres attendent la
regle de frontiere, et le disent. prouver 64 OK, ansible-lint 0 defaut.
Reste a la main de l exploitant : make frontiere-appliquer CONFIRMER=true,
et le secret vault_grafana_admin a deposer dans underlay.vault.yml.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 04:43:01 -04:00
|
|
|
|
|
|
|
|
# --- Sonde de supervision (voir meta/supervision.yml) ---
|
|
|
|
|
# L'interface de diagnostic d'Alloy, la ou il tient le compte de ce qu'il a expedie et de
|
|
|
|
|
# ce qu'il a jete. Locale : personne d'autre n'a a la joindre.
|
|
|
|
|
client_journal_sonde_url: >-
|
|
|
|
|
http://{{ client_journal_http_adresse }}:{{ client_journal_http_port }}
|
|
|
|
|
# La memoire d'un passage a l'autre : sans elle, un compteur cumulatif ne dit pas QUAND.
|
|
|
|
|
client_journal_sonde_etat: "/var/lib/setops/journaux-jetees"
|
les depots tiers passent par le cache, et le tenant n a plus le sien
Deux mouvements d une seule doctrine : le site fournit tout ce dont un
tenant a besoin pour venir au monde.
1. LES DEPOTS TIERS. Grafana, Icinga, Smallstep et Collabora ne publient
qu en HTTPS ; apt-cacher-ng ne relaie pas un tunnel, et le socle pose donc
Acquire::https::Proxy DIRECT. Chaque machine sortait elle-meme sur
Internet. Le cache declare desormais un Remap par fournisseur, et chaque
role demande en {{ ..._depot_schema }}:// - http des qu un cache est
declare, https sinon. Le TLS n est rompu nulle part : il est TERMINE au
cache, qui est notre machine, et l integrite vient des signatures.
avant : 4 fournisseurs en HTTPS direct, 14 machines sortant seules
apres : 0 source en HTTPS direct, 0 erreur apt sur 14 machines
Trois lecons. Le remap appartient au cache qui SORT : pose sur un cache
chaine, il tente le HTTPS a travers son amont et rend 503. apt_repository
AJOUTE au lieu de remplacer, donc l ancienne ligne https sortait toujours.
Et la liste des fournisseurs ne se devine pas - j en avais trois, l audit
en a revele un quatrieme.
2. LE CACHE DU TENANT. Sa ligne portait son propre retrait depuis toujours
- service MUTUALISABLE, un ecosysteme au premier age peut pointer sur celui
de son hote. Retiree. Ce qu on perd, dit franchement : plus de trafic
inter-zone et plus de charge sur site-cache-01, contre un service de moins
a poser, superviser et reproduire.
3. UN ROLE QU ON RETIRE DOIT DEFAIRE CE QU IL A FAIT. Le retrait a montre
que rien ne nettoie derriere. Le fichier apt visait un cache eteint en
ecrasant le plancher qui fonctionnait - le defaut deja paye a quinze
machines. Et les sondes du cache restaient, le porteur poussant pour des
services qu Icinga ne definit plus (404). Le socle retire le premier,
client_sante derive les sondes attendues et retire les orphelines.
P65 refuse tout role visant un depot relaye en https ecrit en dur. Sa
limite est dite : elle empeche une regression sur ce qui est connu, elle ne
decouvre pas l inconnu.
Mesure : Icinga 87 OK sur 96, prouver 65 OK, lint 0 defaut.
Reste, et c est dit : apt-cacher-ng tourne toujours sur forge-01 que plus
aucun plan ne declare.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 14:53:48 -04:00
|
|
|
|
|
|
|
|
# --- SCHEMA DES DEPOTS TIERS (2026-09-10) --------------------------------------------
|
|
|
|
|
#
|
|
|
|
|
# `http` DES QU'UN CACHE EST DANS LE CHEMIN, `https` sinon. Ce n'est pas un relachement :
|
|
|
|
|
# le cache RELAIE ces depots en https vers le fournisseur (voir `serveur_artefacts`,
|
|
|
|
|
# `Remap-*`), et l'integrite vient des SIGNATURES du depot, qu'apt verifie de toute facon.
|
|
|
|
|
# Le meme raisonnement vaut deja pour `deb.debian.org` depuis toujours.
|
|
|
|
|
#
|
|
|
|
|
# Sans cette derivation, chaque machine sortait elle-meme sur Internet : le mandataire ne
|
|
|
|
|
# vaut que pour `http`, et le socle pose deliberement `Acquire::https::Proxy "DIRECT"`
|
|
|
|
|
# parce qu'un cache sans remap refuse les tunnels. Le remap leve ce refus ; encore
|
|
|
|
|
# faut-il DEMANDER en http.
|
|
|
|
|
#
|
|
|
|
|
# DEGRADE, JAMAIS DEVINE : pas de cache d'amorcage declare, pas de reecriture.
|
|
|
|
|
client_journal_depot_schema: >-
|
|
|
|
|
{{ 'http' if (artefacts_amorcage | default('') | string | length > 0) else 'https' }}
|
la frontiere journalise a nouveau, et une garde veille cette fois
Doctrine posee par l exploitant : des lors que le site a son Loki, la
journalisation de la frontiere et des hyperviseurs doit y etre dirigee.
CE QUI ETAIT CASSE. La destination syslog d OPNsense pointait
10.17.20.11:3100 - une adresse de TENANT, sur le port de Loki, en UDP, ce
que Loki ne sait pas lire. La VM a ete rasee ; une cible morte a arrete
TOUTE la journalisation pendant dix jours. La destination a ete eteinte
pour reparer et jamais remplacee. Deux fautes en une : plus de journaux, et
une cible chez un locataire, ce que D-87 refuse dans l autre sens.
L intention etait juste - bonnes facilites, info et au-dessus. On l a
REPRISE telle quelle et change uniquement la destination : ces choix
avaient ete faits, ce n etait pas a nous de les redecider.
UN TRADUCTEUR, parce que Loki ne parle pas syslog : loki.source.syslog dans
l Alloy qui tourne DEJA sur le collecteur. Port 1514 et non 514, donc
ecoute sans privilege - un collecteur qui aurait besoin des droits du
systeme pour entendre un equipement serait un mauvais echange.
UNE REGLE DE RELABEL SANS GARDE N IGNORE PAS : ELLE EFFACE. Trois quarts d
heure sur un symptome absurde - la configuration deposee portait
host = "bifrost-1", visible dans le fichier, et le flux arrivait sans
etiquette. Sans regex, la regle correspond TOUJOURS, meme quand sa source n
existe pas, et pose host = "". Loki jette une etiquette vide, et celle de l
ecouteur disparaissait avec elle.
Et la verification finale a corrige une seconde erreur, la mienne :
label/host/values rendait une liste en CACHE. La requete directe rendait
bien un flux. Un index qui ne montre pas une chose ne prouve pas qu elle n
existe pas.
LA GARDE, qui manquait depuis l incident. journaux-frontiere demande a LOKI
ce qu il a RECU, pas a la frontiere ce qu elle croit avoir envoye : la
destination est le seul juge, et un emetteur qui parle a un trou noir se
porte tres bien. La fenetre est DERIVEE du debit observe - environ 1500
lignes par minute - pas choisie.
Trois etats eprouves sur une copie : frontiere muette rc=2, Loki
injoignable rc=3, debit normal rc=0. Le 3 compte autant que le 2 : « je ne
peux rien affirmer » n est pas « c est casse ».
Mesure : 46 681 lignes recues en 30 min, site a 68 services tous OK.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 19:38:19 -04:00
|
|
|
|
|
|
|
|
# --- RECEPTEUR SYSLOG (vide = pas de recepteur) ---------------------------------------
|
|
|
|
|
#
|
|
|
|
|
# CE QUI NE PEUT PAS PORTER D'AGENT DOIT QUAND MEME ETRE ENTENDU. La frontiere OPNsense
|
|
|
|
|
# n'accueille rien ; elle sait emettre du syslog. Le collecteur du site l'ecoute et le
|
|
|
|
|
# traduit vers Loki.
|
|
|
|
|
#
|
|
|
|
|
# CE QUE CA A COUTE DE NE PAS L'AVOIR : la destination syslog de la frontiere pointait une
|
|
|
|
|
# VM de TENANT, rasee depuis. Une cible morte a arrete TOUTE la journalisation d'OPNsense
|
|
|
|
|
# pendant dix jours, et rien ne l'a signale — c'est le meme silence qui a motive le `ttl`
|
|
|
|
|
# des sondes. La destination a ete eteinte pour reparer, et jamais remplacee : la frontiere
|
|
|
|
|
# ne journalisait plus nulle part.
|
|
|
|
|
#
|
|
|
|
|
# ET LA CIBLE ETAIT CHEZ UN LOCATAIRE, ce que D-87 refuse dans l'autre sens : les journaux
|
|
|
|
|
# du site ne vivent pas chez un tenant, pas plus que l'inverse. Le site a son Loki depuis
|
|
|
|
|
# le 2026-09-10 ; c'est la que ses equipements parlent.
|
|
|
|
|
#
|
|
|
|
|
# Vide par defaut : un tenant n'a pas de frontiere a ecouter.
|
|
|
|
|
client_journal_syslog_ecoute: ""
|
|
|
|
|
client_journal_syslog_protocole: "tcp"
|
|
|
|
|
# Le nom sous lequel les journaux recus apparaitront. Derive de la carte par l'inventaire
|
|
|
|
|
# du site — jamais fabrique ici.
|
|
|
|
|
client_journal_syslog_emetteur: "frontiere"
|
audit : la piste sort de la machine auditee, et quelqu un regarde
auditd tournait, onze regles etaient armees, et rien de tout cela ne servait
a grand-chose. Quatre manques, mesures avant d etre combles.
1. Rien ne sortait. Alloy ne contenait aucune reference a l audit et les cinq
greffons etaient inactifs. Il lit maintenant audit.log et le pousse vers Loki
— sans toucher une permission, alloy etant deja dans le groupe adm. On ecarte
le greffon syslog : journald limite le debit, et une rafale d evenements est
exactement le moment qui compte.
2. Aucune sonde. Elle mesure la COLLECTE, pas l armement : le nombre de
regles est precisement le chiffre qui restait bon pendant la panne du
2026-08-30. Il part en perfdata, jamais en verdict.
3. Retention non declaree. Mesuree a 4,6 Mo/jour au repos ; portee de 40 a
128 Mo. Depuis (1), le local n est plus l archive mais un tampon.
4. Les regles ignoraient la cle privee de l hote. -w /etc/step/ partout, et
-w /etc/step-ca/ sur la seule autorite : auditctl refuse un watch vers un
chemin absent et fait echouer le chargement entier.
Verifie sur l autorite seule d abord, puis 14/14 : regles armees, auditd
actif, sonde a 0, et les quatorze hotes presents dans Loki sous job=audit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-11 09:00:28 -04:00
|
|
|
|
chiffrement : metriques et journaux du site en TLS, et la frontiere certifiee par sa propre autorite
Metriques et journaux (CHANGELOG 142). Le site pose les quatre interrupteurs TLS
que chaque locataire pose dans ses group_vars : node_exporter et Loki servaient
en HTTP sur les neuf VM, le certificat etait la, inutilise. test_parite_tls_site.py
compare desormais le site aux locataires. Les hyperviseurs poussent leurs
journaux en HTTPS verifie, avec la racine du site comme simple fichier.
L'exportateur PostgreSQL sert en HTTPS partout, sur l'interrupteur de PostgreSQL
lui-meme, que Prometheus lit pour choisir son schema.
La frontiere (CHANGELOG 143). Une autorite subordonnee signee par la racine du
site, bornee (pathlen 0, noms sous le domaine et adresses du site, contrainte
critique), cle nee sur la boite (scripts/frontiere_pki.py). Syslog vers Loki en
TLS mutuel (seule la frontiere peut ecrire), exportateur en HTTPS, interface web
sur le certificat de services ; les clients d'API verifient la frontiere contre
la racine du site. La lecture du magasin passe par config.xml : l'API de
recherche renvoie les cles privees.
Deploye et mesure au site, chez les deux locataires et sur la frontiere ; 95 preuves.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 14:25:28 -04:00
|
|
|
# LE RECEPTEUR SYSLOG EN TLS, AUTHENTIFIANT SES CLIENTS (2026-10-12). Le syslog de la
|
|
|
|
|
# frontiere passait en clair. Vrai : Alloy sert le certificat de la machine (client_pki,
|
|
|
|
|
# recopie la ou `alloy` le lit, et a chaque renouvellement) et EXIGE un certificat client
|
|
|
|
|
# signe par une autorite de `client_journal_syslog_clients_ca_contenu` — au site, celle de
|
|
|
|
|
# la frontiere seule : personne d'autre ne peut y ecrire.
|
|
|
|
|
client_journal_syslog_tls: false
|
|
|
|
|
client_journal_syslog_tls_dir: "/etc/alloy/tls"
|
|
|
|
|
client_journal_syslog_tls_source_cert: "/etc/step/certs/{{ ansible_fqdn | default(ansible_hostname) }}.crt"
|
|
|
|
|
client_journal_syslog_tls_source_cle: "/etc/step/certs/{{ ansible_fqdn | default(ansible_hostname) }}.key"
|
|
|
|
|
client_journal_syslog_clients_ca_contenu: ""
|
|
|
|
|
|
audit : la piste sort de la machine auditee, et quelqu un regarde
auditd tournait, onze regles etaient armees, et rien de tout cela ne servait
a grand-chose. Quatre manques, mesures avant d etre combles.
1. Rien ne sortait. Alloy ne contenait aucune reference a l audit et les cinq
greffons etaient inactifs. Il lit maintenant audit.log et le pousse vers Loki
— sans toucher une permission, alloy etant deja dans le groupe adm. On ecarte
le greffon syslog : journald limite le debit, et une rafale d evenements est
exactement le moment qui compte.
2. Aucune sonde. Elle mesure la COLLECTE, pas l armement : le nombre de
regles est precisement le chiffre qui restait bon pendant la panne du
2026-08-30. Il part en perfdata, jamais en verdict.
3. Retention non declaree. Mesuree a 4,6 Mo/jour au repos ; portee de 40 a
128 Mo. Depuis (1), le local n est plus l archive mais un tampon.
4. Les regles ignoraient la cle privee de l hote. -w /etc/step/ partout, et
-w /etc/step-ca/ sur la seule autorite : auditctl refuse un watch vers un
chemin absent et fait echouer le chargement entier.
Verifie sur l autorite seule d abord, puis 14/14 : regles armees, auditd
actif, sonde a 0, et les quatorze hotes presents dans Loki sous job=audit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-11 09:00:28 -04:00
|
|
|
# LE JOURNAL D'AUDIT, EXPEDIE COMME LE RESTE (2026-09-11).
|
|
|
|
|
#
|
|
|
|
|
# DERIVE DE L'APPARTENANCE AU GROUPE, pas declare par instance : `auditd` vient avec
|
|
|
|
|
# `serveur_durci`, donc la machine qui a l'un a l'autre. Ecrire la liste a la main serait
|
|
|
|
|
# une liste de plus qui suit une autre — et qui prendrait du retard.
|
|
|
|
|
client_journal_audit_actif: "{{ 'serveur_durci' in group_names }}"
|
|
|
|
|
client_journal_audit_chemin: "/var/log/audit/audit.log"
|
2026-10-03 17:58:47 -04:00
|
|
|
|
|
|
|
|
# LES MACHINES QUI SONDENT — celles qui portent `client_sante`, donc qui jouent la sonde
|
|
|
|
|
# « connectivite » chaque minute. Leurs connexions de sonde ne sont pas expediees (voir le
|
|
|
|
|
# gabarit). Derive de l'inventaire : une machine ajoutee y entre sans qu'on l'ecrive.
|
|
|
|
|
# Vide = aucun filtre.
|
|
|
|
|
client_journal_sondeurs: >-
|
|
|
|
|
{{ groups.get('client_sante', []) | map('extract', hostvars)
|
|
|
|
|
| map(attribute='ansible_host', default='') | select('match', '^[0-9.]+$') | list }}
|