Fail2ban : Installation et configuration (Debian 12)

Fail2ban : Installation et configuration (Debian 12)

Table of Contents
  • 15/06/2024 : Mise à jour pour Debian 12 (rsyslog, systemd)

Introduction

Le service Fail2ban va permettre de protéger un serveur Linux des attaques de brute-force automatiquement en surveillant les logs. Des que les conditions sont réunies (nombres de tentative dans un intervalle de temps), l'adresse IP suspecte est bannie durant un temps déterminé. Le ban est réalisé à l'aide du système de parefeu iptables.

Cet article traite de l'installation ainsi que la configuration de fail2ban sur une Debian 12. Le service SSHD servira d'exemple. Des commandes pour interagir avec le service fail2ban sont également présentées.

Sous Debian 12, le paquet rsyslog n'est plus installé par défaut. Celui-ci est nécessaire au bon fonctionnement sans modification de la configuration de fail2ban. Cependant, il est tout de même préférable de configurer celui-ci pour fonctionner avec systemd.

Les 2 méthodes sont présentées ici. Let's go !

Installation

  • Fail2ban est présent dans les dépôts de Debian 12 :
sudo apt install -y fail2ban
  • Si iptables n'est pas installé, le faire :
sudo apt install -y iptables

Configuration

Création des fichiers de configuration

  • Par défaut fail2ban est installé avec 2 fichiers de configuration : /etc/fail2ban/jail.conf et /etc/fail2ban/jail.d/defaults-debian.conf .

    Ces fichiers ne doivent pas être modifié. Ils seront écrasés à la prochaine mise à jour de fail2ban.

  • Fail2ban lit les fichiers de configurations dans cet ordre :

    • Les fichiers .conf
    • Les fichiers .local

    Chaque directive définit dans le fichier de configuration .local, écrase la directive contenue dans son homologue .conf.

    Ce fichier de configuration .local peut uniquement contenir les directives nécessaires pour compléter et/ou écraser de celles définies dans le fichier .conf.

  • Créer les fichiers de configuration adéquat en se basant sur ceux présents :

    sudo cp /etc/fail2ban/jail.{conf,local}
  • Editer le fichier jail.local :

    sudo vi /etc/fail2ban/jail.local

Backend

rsyslog

  • Par défaut dans la configuration de fail2ban, il est indiqué :
backend = auto
  • Cela implique d'avoir rsyslog d'installer. Celui-ci fournira les logs dans /var/log/ comme le auth.log servant pour SSH. Dans Debian 12, ce paquet n'est plus installer par défaut. Il faut donc l'installer :
sudo apt install -y rsyslog

systemd

  • Pour que fail2ban puisse se baser sur systemd, le backend doit être modifié dans la configuration de fail2ban :
backend = systemd

Rsyslog ne sera pas nécessaire dans ce cas.

Paramétrage

  • Il est utile d'indiquer des IPs en liste blanche pour éviter de s'auto-ban lors d'un retour de vacance.

  • Décommenter la ligne commençant par ignoreip et ajouter les adresses IPs séparées d'un espace :

    ignoreip = 127.0.0.1/8 ::1 123.123.123.123 192.168.1.0/24
  • Il y a 3 directives importantes à connaitre :

    • bantime : La durée de ban d'une adresse IP.

    Par défaut si aucun suffixe n'est spécifié, la durée est exprimée en secondes. Pour un ban permanent, indiquer un nombre négatif.

    • findtime : La durée pour comptabiliser le nombre de tentatives maximales (maxretry) avant de déclencher un ban.

    • maxretry : Le nombre de tentative durant la période indiquée dans findtime avant de ban une ip.

  • Exemple :

    bantime  = 1d
    findtime  = 10m
    maxretry = 5

    Si 5 échecs d'authentification sont détectés dans un intervalle de 10 minutes, l'adresse IP sera ban pendant 24h.

  • Pour être notifié par email, modifier la ligne commençant par action :

    action = %(action_mw)s
    • Pour avoir les logs dans l'email, indiquer %(action_mwl)s.

    • Un serveur SMTP doit être installé sur le serveur (non abordé).

  • Modifier l'adresse de destinataire et d'expéditeur :

    destemail = admin@linuxize.com
    sender = root@linuxize.com

Service

Après toute modification de la configuration et/ou l'installation de rsyslog, il est important de redémarrer le service fail2ban pour que les changements soient pris en compte :

sudo systemctl restart fail2ban.service
  • Vérification :
systemctl status fail2ban.service

Les jails

Fail2ban utilise un concept de jails (prisons). Une jail décrit un service et comprend des notions de filtres ainsi que d'action. Lorsque les données sont écrites dans les logs, fail2ban va compter les patterns recherchés du service à surveiller pour y appliquer une action quand ça match.

Fail2ban est fournit avec plusieurs jails pour différents services. Une jail peut être définie manuellement.

  • Pour activer une jail, il faut ajouter la directive enabled = true juste après le titre.

  • Exemple pour le service sshd (toujours dans le fichier jail.local) :

    [sshd]
    enabled   = true
    maxretry  = 3
    findtime  = 1d
    bantime   = 4w
    ignoreip  = 127.0.0.1/8 192.168.1.0/24
    • Les adresses IP 127.x.x.x et 192.168.1.x sont en liste blanche.
    • Toutes autres adresses IP sera ban, en cas de 3 échecs d'authentification au service ssh dans un laps de temps de 24h, pour une durée de 4 semaines.

Resume

Installation avec backend systemd

sudo apt install -y fail2ban iptables
sudo cp /etc/fail2ban/jail.{conf,local}
sudo sed -i 's/backend = auto/backend = systemd/' /etc/fail2ban/jail.local
sudo systemctl restart fail2ban.service
systemctl status fail2ban.service
sleep 2
sudo fail2ban-client status sshd

Installation avec service rsyslog

sudo apt install -y fail2ban iptables rsyslog
sudo cp /etc/fail2ban/jail.{conf,local}
sudo systemctl restart fail2ban.service
systemctl status fail2ban.service
sleep 2
sudo fail2ban-client status sshd

Fail2ban client

Fail2ban est fournit avec un outil en ligne de commande : fail2ban-client. Celui va permettre d'interagir avec le service fail2ban.

  • Pour voir toutes les options disponibles :

    fail2ban-client -h
  • Voici quelques exemples :

    • Connaitre le status du service :
    sudo fail2ban-client status
    • Vérifier le status de la jail sshd :
    sudo fail2ban-client status sshd
    • Unban une adresse IP :
    sudo fail2ban-client set sshd unbanip 11.22.33.44
    • Ban une adresse IP :
    sudo fail2ban-client set sshd banip 11.22.33.44

1 commentaire pour l’instant

Fail2ban : Protéger l’authentification WordPress sous Nginx Publié le2h43 - 26 octobre 2021

[…] Cet article fait suite à Fail2ban : Installation et configuration. […]

Les commentaires sont fermés.

Les commentaires sont fermés.