====== Bloquer les attaques en force brute avec fail2ban ======
En cours de rédaction
Sources :
* [[https://www.it-connect.fr/filtres-et-actions-personnalises-dans-fail2ban/|Filtres et actions personnalisés dans Fail2ban]] (fr) (it-connect.fr)
* [[https://www.the-art-of-web.com/system/fail2ban-filters/|Optimising your Fail2Ban filters]] (en) (the-art-of-web.com)
===== Terminologie =====
* filtre (filter) : décrit un événement à détecter
* action (action) :
* prison (jail) : engage une action plus ou moins complexe sur la base des événements détectés par un filtre
===== Ajouter un filtre personnalisé =====
On peut créer un filtre personnalisé entièrement nouveau ou dérivé d'un filtre existant. On ne //modifie// jamais un filtre installé automatiquement par le paquetage.
Un filtre personnalisé doit impérativement être enregistré dans un fichier "//.local//" **et** ajouté au répertoire "///etc/fail2ban/filter.d//". L'ajout d'un filtre est sans conséquence tant qu'une //prison// ne l'exploite pas.
==== Filtre dérivé ====
===== Tester un filtre =====
Avant d'utiliser un filtre dans une prison, il faut impérativement tester ce filtre pour s'assurer qu'il détecte correctement les événements souhaités et eux seuls !
Pour ce faire, on utilise la commande //fail2ban-regex// dont la forme générale est la suivante :
fail2ban-regex [OPTIONS] LOG REGEX [IGNOREREGEX]
Si le filtre contient une définition, même vide, de la variable "//ignoreregex//" (très fréquent), il faut impérativement indiquer le fichier de filtre en tant que //IGNOREREGEX//; sinon la commande ne fonctionne pas !
Par exemple, si les logs concernés sont fournis par //journald//:
fail2ban-regex systemd-journal /etc/fail2ban/filter.d/filtre.local /etc/fail2ban/filter.d/filtre.local
Pour que cela fonctionne, le filtre doit contenir une déclaration du service (//unit//) de //journald// concerné, par exemple "journalmatch = _SYSTEMD_UNIT=dovecot.service".
Si les logs sont dans un fichier :
fail2ban-regex /var/log/fichier.log /etc/fail2ban/filter.d/filtre.local /etc/fail2ban/filter.d/filtre.local
systemd-journal
==== Affichage des résultats ====
Par défaut, //fail2ban-regex// n'affiche que des résultats partiels. On dispose des //options// suivantes pour forcer l'affichage :
* %%--%%print-no-ignored
* %%--%%print-no-missed
* %%--%%print-all-matched
* %%--%%print-all-ignored
* %%--%%print-all-missed
Par exemple :
fail2ban-regex --print-all-matched systemd-journal filtre.local filtre.local
==== Activer une prison ====
Les prisons prédéfinies figurent dans le fichier //jail.conf//. Elle ne sont pas activées.
Leur activation se fait de manière sélective en les déclarant dans le fichier //jail.local// en fixant la valeur du paramètre //enabled// de la prison à //true// (enabled = true).
===== Ajouter une prison =====
Les //prisons// personnalisées doivent être ajoutées dans le fichier "/etc/fail2ban/jail.local".
Par défaut, une //prison// exploite le filtre de même nom figurant dans "/etc/fail2ban/filter.d. Si le nom est différent, on précise le paramètre //filter// dans la déclaration de la //prison//. On peut ainsi créer plusieurs prisons exploiter le même filtre de manières différenciées.
==== Activer une prison ====
Une fois définie dans //jail.local//, la nouvelle prison n'est pas active. Il n'est pas nécessaire de relancer (restart) //fail2ban//. Un simple rechargement suffit à déclencher la relecture des fichiers de configuration et la prise en compte des modifications qu'on y a faites :
service fail2ban reload
Je recommande de vérifier aussitôt l'état de //fail2ban// :
service fail2ban status
===== Bannissement incrémental =====
Sources :
* [[https://visei.com/2020/05/incremental-banning-with-fail2ban/|Incremental banning with Fail2Ban]] (en)
* [[https://github.com/fail2ban/fail2ban/discussions/2952|Using fail2ban over longer time spans]]