##==============================================================================================
##                                                                                            ##
##                              Docker-compose file for Fail2ban                              ##
##                                                                                            ##
##==============================================================================================

---
version: "2"
##==============================================================================================
##                                                                                            ##
##       Sources utilisées pour personnaliser ce fichier et ceux dans les sous-dossiers       ##
##                                                                                            ##
##==============================================================================================
##                                                                                            ##
## https://www.linode.com/docs/guides/using-fail2ban-to-secure-your-server-a-tutorial/        ##
## https://www.linuxtricks.fr/wiki/print.php?id=40                                            ##
## https://github.com/dani-garcia/bitwarden_rs/wiki/Fail2Ban-Setup#synology-dsm               ##
## https://github.com/sosandroid/docker-fail2ban-synology                                     ##
##                                                                                            ##
##────  ────────────────────────────────────────────────────────────────────────────────────────
##────  ────────────────────────────────────────────────────────────────────────────────────────
##                                                                                            ##
##         Cloner/télécharger le dépôt suivant qui contient les fichiers à utiliser :         ##
##                 https://github.com/sosandroid/docker-fail2ban-synology.git                 ##
##     Il faudra juste modifier le docker-compose.yml qui vient avec ou utiliser celui-ci.    ##
##                                                                                            ##
##────  ────────────────────────────────────────────────────────────────────────────────────────
##                                                                                            ##
## Pour supprimer une IP bannie, lancer la commande suivante :                                ##
## sudo docker exec -t fail2ban fail2ban-client set bitwarden_rs unbanip xx.xx.xx.xx          ##
##                                                                                            ##
## Pour Voir le log de fail2ban, lancer la commande :                                         ##
## cat /volume1/docker/fail2ban/fail2ban.log                                                  ##
##                                                                                            ##
##                                                                                            ##
## Quelques commandes utiles :                                                                ##
## docker exec -t fail2ban fail2ban-client status                                             ##
## docker exec -t fail2ban fail2ban-client status bitwarden_rs                                ##
##                                                                                            ##
## unbans <IP> (in all jails and database) :                                                  ##
## docker exec -t fail2ban fail2ban-client unban <IP> ... <IP>                                ##
##                                                                                            ##
## docker exec -t fail2ban fail2ban-client --help                                             ##
## docker exec -t fail2ban fail2ban-client restart                                            ##
## docker exec -t fail2ban fail2ban-client reload --restart --unban --all                     ##
##                                                                                            ##
## flushes the logtarget if a file and reopens it. For log rotation. :                        ##
## docker exec -t fail2ban fail2ban-client flushlogs                                          ##
##                                                                                            ##
##==============================================================================================
  
services:
  fail2ban:
    image: ghcr.io/crazy-max/fail2ban:latest
    container_name: fail2ban
    network_mode: host

    environment:
      - TZ=Europe/Paris
      - F2B_DB_PURGE_AGE=30d
      - F2B_LOG_TARGET=/data/fail2ban.log
      - F2B_LOG_LEVEL=INFO
      - F2B_IPTABLES_CHAIN=INPUT

      # Il faut adapter ces variables à votre fournisseur d'email.
      - SSMTP_HOST=smtp.gmail.com
      - SSMTP_PORT=587            # Pour gmail : 587
      - SSMTP_HOSTNAME=Docker-Fail2ban    # Ce sera le nom qui sera affiché dans les emails
      - SSMTP_USER=XXxxXX@gmail.com
      - SSMTP_PASSWORD=XXxxXX     # Pensez à générer un mot de passe application si la 2FA est activée
      - SSMTP_TLS=YES             # Pour gmail : YES
      - SSMTP_STARTTLS=YES        # Pour gmail : YES
    
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    
    volumes:
      - "/volume1/docker/fail2ban:/data"

      # Les différents chemins d'accès vers les fichiers log des services à protéger par fail2ban
      # On ajoute ro pour read-only (lecture seule)
      - "/volume1/docker/vaultwarden/vaultwarden-data:/vaultwarden:ro"   # Vaultwarden
      - "/volume1/docker/gitea/data/gitea/log:/gitea:ro"              # Gitea
      #- "/var/log/auth.log:/log/host_ssh_auth.log:ro"                 # SSH sur l'hôte (Synology)

    cap_add:
      - NET_ADMIN
      - NET_RAW

    restart: always