# ACL du broker master — %u est le CN du certificat client (cf. # use_identity_as_username dans mosquitto-master.conf). Chaque noeud ne peut # publier que sous son propre topic de ban, et ne lire que ses propres # commandes plus le canal de diffusion générale. # # Déployé par install.sh (install-master) vers /etc/mosquitto/master-acl.conf pattern write fail2ban/%u/ban # heartbeat (Phase 3, supervision) : chaque noeud publie périodiquement # pour prouver qu'il est vivant, indépendamment de toute activité de ban. # ack (Phase 2.b) : accusé de réception publié après exécution réelle d'une # commande reçue du master (ex. SYNC_BAN), succès ou échec. pattern write fail2ban/%u/heartbeat pattern write fail2ban/%u/ack pattern read fail2ban/%u/action # Topic fixe (identique pour tous les noeuds) : "topic", pas "pattern" — # "pattern" est réservé aux entrées substituées par client (%u/%c) et # mosquitto avertit (pattern ignoré) si on l'utilise sans placeholder. topic read fail2ban/broadcast/action # Identité dédiée à l'ingestion/décision côté master # (banevents.master_listen) : lecture de fail2ban/+/ban (TOUS les noeuds), # et écriture sur le canal de diffusion (pour publier un SYNC_BAN) — deux # droits plus larges que ceux d'un noeud pris individuellement (pattern # ci-dessus, limité à fail2ban/%u/ban). "user " scope les règles # suivantes à cette seule identité de certificat — généré via # scripts/generate-node-cert.sh master-internal. user master-internal topic read fail2ban/+/ban topic read fail2ban/+/heartbeat topic read fail2ban/+/ack topic write fail2ban/broadcast/action # Roster périodique (Phase 3) : liste des noeuds connus + compteurs # jail/pays globaux, republié localement par chaque noeud (NodeRegistry + # cache Redis, voir banevents/stats.py) — sans ça la sidebar d'un noeud # client n'aurait jamais que ses propres données. topic write fail2ban/broadcast/roster