# =============================================================================
# fail2ban — jail + filtre prêts à l'emploi pour le flux JSON ssh-guard
# =============================================================================
# Ce fichier contient deux blocs distincts à placer à des emplacements
# différents sur l'hôte fail2ban. Voir aussi :
#   administration_manual/how-to/durcir-avec-fail2ban.md
#   administration_manual/reference/ssh-guard-evenements.md
#
# Prérequis dans /opt/gitrust/.env :
#   SSH_GUARD_LOG_TARGET=both         (ou file)
#   SSH_GUARD_LOG_FILE=/var/log/gitrust-ssh-guard.json
#
# Tester le filtre avant de redémarrer fail2ban :
#   sudo fail2ban-regex /var/log/gitrust-ssh-guard.json \
#                       /etc/fail2ban/filter.d/gitrust-ssh.conf

# -----------------------------------------------------------------------------
# 1) JAIL — à concaténer dans /etc/fail2ban/jail.local sous [DEFAULT]
# -----------------------------------------------------------------------------
# [gitrust-ssh]
# enabled  = true
# port     = 22,2222
# filter   = gitrust-ssh
# logpath  = /var/log/gitrust-ssh-guard.json
# maxretry = 1
# findtime = 10m
# bantime  = 1h

# -----------------------------------------------------------------------------
# 2) FILTRE — à placer dans /etc/fail2ban/filter.d/gitrust-ssh.conf
# -----------------------------------------------------------------------------
[Definition]

# Capture <HOST> depuis le champ "ip" du JSON émis par gitrust-ssh-guard.
# Le « signal fort » ip_banned est privilégié : ssh-guard a déjà corrélé
# brute-force / énumération / scan de clés ; fail2ban relaye le ban au
# firewall (UFW/iptables) pour bloquer aussi les autres ports si la jail
# le souhaite (banaction = ufw, banaction_allports = ufw).

failregex = ^.*"event":"ip_banned".*"ip":"<HOST>".*$
            ^.*"event":"brute_force_detected".*"ip":"<HOST>".*$
            ^.*"event":"user_enumeration_detected".*"ip":"<HOST>".*$
            ^.*"event":"key_scanning_detected".*"ip":"<HOST>".*$
            ^.*"event":"connection_dropped".*"ip":"<HOST>".*"reason":"untrusted_proxy".*$
            ^.*"event":"connection_dropped".*"ip":"<HOST>".*"reason":"proxy_header_invalid".*$

ignoreregex =

# Date au format ISO 8601 UTC produit par ssh-guard (champ "ts")
datepattern = "ts":"%%Y-%%m-%%dT%%H:%%M:%%S
