Files
2026-07-20 11:05:07 +02:00

49 lines
2.7 KiB
Plaintext

# GABARIT réutilisable pour protéger une NOUVELLE appli contre le
# brute-force applicatif — n'importe quelle appli sur ce VPS, pas
# seulement ce projet (trouvé utile après un résidu de jail appartenant à
# une autre appli Django sur ce même serveur partagé, cf. CONTEXT.md).
# Ce fichier n'est PAS déployé tel quel (extension .template, ignorée par
# la boucle de copie générique d'install.sh::deploy_fail2ban) : c'est un
# modèle à copier et adapter. Exemple concret déjà en place :
# emitter-admin-auth.conf + emitter/banevents/signals.py (Django +
# django-axes).
#
# Mode d'emploi :
# 1. Faire journaliser à l'appli une ligne EXACTEMENT au format attendu
# par filter.d/app-auth.conf (générique, partagé par toutes les
# jails app-auth-*, rien à écrire côté filtre) :
# Verrouillage <NOM_APPLI> après échecs répétés depuis <IP> (...)
# <NOM_APPLI> = un seul mot (\S+ côté filtre), ex. "émetteur",
# "webmail". L'appli décide QUAND verrouiller (son propre seuil
# applicatif, cf. AXES_FAILURE_LIMIT pour l'exemple django-axes) —
# fail2ban ne fait que réagir à cette décision déjà prise (d'où
# maxretry=1 ci-dessous : chaque ligne EST déjà la décision, pas la
# peine de recompter un 2e seuil derrière).
# IMPORTANT — timestamp en tête de ligne : marquer explicitement le
# fuseau (ex. suffixe "Z" ISO 8601, UTC), voir le commentaire dans
# filter.d/app-auth.conf pour le pourquoi (piège vécu avec Django,
# TIME_ZONE='UTC' + time.tzset() : sans marqueur, fail2ban ignore
# silencieusement les lignes fraîches juste après son propre
# redémarrage si le fuseau système du VPS diffère d'UTC).
# 2. Copier ce fichier vers jail.d/<nom-appli>-auth.conf, remplacer
# __APP_NAME__ (nom de la jail, unique) et __APP_AUTH_LOGPATH__
# (chemin réel du fichier de log).
# 3. Si ce chemin dépend du VPS (répertoire de déploiement différent
# d'un serveur à l'autre — le cas courant) : NE PAS le laisser dans
# la boucle de copie générique d'install.sh::deploy_fail2ban (même
# piège que coturn.conf/emitter-admin-auth.conf, voir CONTEXT.md).
# Ajouter plutôt une fonction deploy_<nom>_jail dédiée (sed sur le
# placeholder), sur le modèle de deploy_emitter_admin_auth_jail.
# 4. S'assurer que le fichier de log existe déjà (touch) avant le
# premier démarrage de fail2ban après déploiement — un logpath
# inexistant fait planter fail2ban au chargement (incident coturn,
# voir ROADMAP.md Phase 1.b).
[__APP_NAME__-auth]
enabled = true
backend = auto
filter = app-auth
logpath = __APP_AUTH_LOGPATH__
maxretry = 1
findtime = 1h
bantime = 24h