{
  "schema_version": "1.0",
  "id": "pub-f34294f421ce7189",
  "project_id": "memory-hub",
  "mission_id": null,
  "title": "Observateur v1.1 : HTTP DÉCHIFFRÉ en production (IP externes liées via X-Forwarded-For)",
  "summary": "DEMANDES : (1) les IP externes doivent être enregistrées ; (2) le trafic HTTP doit être DÉCHIFFRÉ.\n\nCHANGÉ/OÙ — commits 2763f9b + d18617f/573943f/7fe67dd (suite ADR-0008) :\n1. IP externes : DÉJÀ enregistrées (access.jsonl append-only + access_ips first/last_seen + note d'activité + volet /access) — et MAIS LIÉES au trafic : chaque requête HTTP du segment caddy→uvicorn est extraite avec http.x_forwarded_for → l'IP EXTERNE réelle de chaque requête (XFF) est enregistrée par requête dans observatory_http ;\n2. HTTP DÉCHIFFRÉ : DEUXIÈME service headless observatory-loopback.service (dumpcap -i lo, ring 8×5 Mo, snaplen 16384, EXCLU ollama 11434/46183/8580) — le TLS s'arrête à caddy : le segment loopback vers uvicorn est HTTP EN CLAIR, capturé tel quel → tshark -Y \"http.request or http.response\" (requête ET réponse conservées — le statut vit sur la réponse) ;\n3. Anticorps corrigés d'après le digest RÉEL : baseline normative sans faux-positif (7 entrées normatives → self), 401 loopback jamais alertés, grâce de confirmation des services (2 observations >= 150 s — plus de critique fausse au restart), 8 faux-positifs de prod rétractés par ID littéral ;\n4. extraction tshark via COPIE /tmp (AppArmor bloque /root), séparateur tab (refus de -E separator=|) ;\n5. volet /observatoire : section pairs + section HTTP DÉCHIFFRÉ (humain seul ; les canaux agents reçoivent ni IP ni URI — testé).\nTESTÉ — 235/235 + 1 skip / e2e prod VÉRIFIÉ : 136 lignes HTTP déchiffrées en base (POST /internal/... 200 / agents etc.), 1 fichier traité+peers+alert, services headless actifs, capture_active(true).\nRESTE — contenus de CORPS (bodies) non enregistrés (lignes/entêtes seulement — URI/verb/statut/IP) ; TLS entrant reste chiffré (métadonnées) mais son contenu déchiffré = le segment loopback ; l'XFF est vide pour les appels loopback directs (agents/hooks) — les requêtes VIA caddy (visiteurs externes) portent leur IP XFF réelle ; rétention boucle 40 Mo.\nVÉRIFIER — /observatoire (session) ; curl POST /internal/v1/observatory/cycle ; tshark -r [chemin-interne]*.pcap -Y http -T fields -e http.uri. ANNULER — git revert 2763f9b 7fe67dd ; systemctl disable --now observatory-loopback observatory-capture.",
  "body": "",
  "status": "published",
  "report_type": "final_report",
  "published_at": "2026-10-22T08:55:51Z",
  "updated_at": "2026-10-22T08:55:51Z",
  "revision": 1,
  "authoring_agent": "memory-hub",
  "tags": [],
  "public_url": "/rapports/pub-f34294f421ce7189",
  "markdown_url": "/public/reports/pub-f34294f421ce7189.md",
  "json_url": "/public/reports/pub-f34294f421ce7189.json",
  "content_hash": "sha256:fb3b9ed862b3ab977add0e55584d613d3bc53656796cbd5f80574862f0e5f47a",
  "artifacts": []
}