mirror of
https://github.com/deunix-educ/Fail2banMqttActionBanishment.git
synced 2026-08-24 03:11:58 +02:00
62 lines
3.6 KiB
Markdown
62 lines
3.6 KiB
Markdown
# Référence
|
|
|
|
## Topics MQTT
|
|
|
|
| Topic | Sens | Rôle |
|
|
|---|---|---|
|
|
| `fail2ban/<noeud>/ban` | noeud → master | événement de ban/notice publié par ce noeud |
|
|
| `fail2ban/<noeud>/heartbeat` | noeud → master | preuve de vie périodique (indépendante de toute activité de ban) |
|
|
| `fail2ban/<noeud>/ack` | noeud → master | accusé de réception après exécution d'une commande reçue du master |
|
|
| `fail2ban/<noeud>/action` | master → noeud | commande adressée spécifiquement à ce noeud |
|
|
| `fail2ban/broadcast/action` | master → tous les noeuds | commande diffusée à tous les noeuds abonnés |
|
|
| `fail2ban/broadcast/roster` | master → tous les noeuds | liste des noeuds connus + compteurs jail/pays globaux, périodique |
|
|
|
|
`<noeud>` dans le segment de topic est le CN du certificat client mTLS
|
|
(imposé par l'ACL du broker) — l'identifiant interne du noeud
|
|
(`uuid.getnode()`) voyage dans le corps du message, pas dans le topic.
|
|
|
|
## Commandes du master
|
|
|
|
| Commande | Effet sur le noeud qui la reçoit | Déclenchement |
|
|
|---|---|---|
|
|
| `SYNC_BAN` | Ban total (toutes ports) via une jail dédiée | Automatique : le master publie systématiquement un `SYNC_BAN` pour chaque ban qu'il ingère |
|
|
| `ESCALATE` | Ban **permanent** via une jail dédiée | Automatique : le master corrèle — une IP bannie indépendamment sur plusieurs noeuds distincts en 24h déclenche une escalade |
|
|
| `BAN_ALLPORTS` | Ban total (toutes ports), même mécanisme que `SYNC_BAN` | Manuel (décision humaine ciblée) |
|
|
| `WHITELIST` | Ajout à `ignoreip` sur toutes les jails actives + débannit — en mémoire, non persistant | Manuel |
|
|
| `RATE_LIMIT` | Throttle (10 req/s, burst 20) au lieu d'un blocage total | Manuel — cas limite, faux positifs probables |
|
|
| `NOTIFY_ONLY` | Aucune action réseau, juste une notification visible sur le tableau de bord | Manuel — mode observation |
|
|
| `REPORT_ABUSE` | Signalement à AbuseIPDB — **pas diffusé aux noeuds**, soumis directement par le master (un rapport par IP suffit) | Manuel, dry-run tant que `ABUSEIPDB_ENABLED`/`ABUSEIPDB_API_KEY` ne sont pas configurés |
|
|
|
|
Les commandes manuelles se déclenchent sur le master, à la main :
|
|
|
|
```sh
|
|
emitter/.venv/bin/python emitter/manage.py publish_command WHITELIST 203.0.113.5
|
|
emitter/.venv/bin/python emitter/manage.py publish_command BAN_ALLPORTS 203.0.113.5
|
|
emitter/.venv/bin/python emitter/manage.py publish_command RATE_LIMIT 203.0.113.5
|
|
emitter/.venv/bin/python emitter/manage.py publish_command REPORT_ABUSE 203.0.113.5
|
|
```
|
|
|
|
La géolocalisation des IP bannies est automatique (asynchrone, dès
|
|
l'ingestion d'un événement) ; pour relancer celles restées sans
|
|
coordonnées (échec d'API, IP privée) :
|
|
|
|
```sh
|
|
emitter/.venv/bin/python emitter/manage.py retry_geolocation # tous les événements non géolocalisés
|
|
emitter/.venv/bin/python emitter/manage.py retry_geolocation --ip <ip> # une IP précise
|
|
```
|
|
|
|
## Jails fail2ban personnalisées
|
|
|
|
| Jail | Rôle |
|
|
|---|---|
|
|
| `emitter-admin-auth` | Verrouillage `/admin/` du tableau de bord (django-axes) → ban réseau |
|
|
| `master-sync` | Réception d'un `SYNC_BAN`/`BAN_ALLPORTS` — jamais déclenchée par un log, seulement par injection manuelle depuis le relais master |
|
|
| `master-ratelimit` | Réception d'un `RATE_LIMIT` |
|
|
| `master-escalate` | Réception d'un `ESCALATE` — ban permanent |
|
|
|
|
`emitter-admin-auth` suit un gabarit réutilisable
|
|
(`generic/fail2ban/jail.d/app-auth.conf.template` +
|
|
`generic/fail2ban/filter.d/app-auth.conf`) pour protéger de la même façon
|
|
n'importe quelle autre application exposée sur le même serveur, pas
|
|
seulement ce tableau de bord.
|