{{tag>software linux netadmin sysadmin sécurité fail2ban dokuwiki}}
====== fail2ban : Configuration pour monitoring de dokuwiki ======
En prérequis, il faut installer le **plugin loglog** qui journalise les connexions des utilisateurs au service Dokuwiki. Pour plus de détail concernant la gestion des plugins de Dokuwiki voir le wiki [[software/applications/dokuwiki/extensions |extensions]].
Le fichier de log est créé dans ''./data/cache/loglog.log''
===== Structure du journal =====
Ci dessous un extrait du fichier de journalisation produit par Dokuwiki lorsque le module loglog est installé:
1682455440 2023/04/25 20:44 176.143.166.229 user0 failed login attempt
1682456821 2023/04/25 21:07 176.143.166.229 user0 logged in temporarily
1682456825 2023/04/25 21:07 176.143.166.229 user0 admin
1682456829 2023/04/25 21:07 176.143.166.229 user0 admin - config
1682456843 2023/04/25 21:07 176.143.166.229 user0 admin - config ["save config"]
1682456941 2023/04/25 21:09 176.143.166.229 user0 admin - logviewer
1682457224 2023/04/25 21:13 176.143.166.229 user0 logged off
* 5 colonnes;
* Les deux premières colonnes représentent la même information (timestamp et reformatage UTC);
* IP source se trouve en 3ième colonne;
* le message "failed login attempt" apparaît sur la 5ième colonne lorsqu'un échec d'authentification a lieu.
===== Test =====
# tester l'expression régulière
fail2ban-regex /srv/docker/dokuwiki/userdata/data/cache/loglog.log /etc/fail2ban/filter.d/dokuwiki.local
fail2ban-clien reload
fail2ban-client get dokuwiki failregex
===== Dépannage =====
==== Le bannissement ne fonctionne pas avec Docker ====
Lorsque l’application Dokuwiki s'exécute depuis un conteneur Docker, l'action de bannissement par défaut ne fonctionne pas. fail2ban-client indique bien que l'IP est bannie, les règles de filtrages sont mises à jour mais les modifications ont lieu sur la chaîne iptable **INPUT** ce qui est parfaitement adapté dans le cas d'un fonctionnement classique.
L'application reste accessible car dans le cas de Docker le trafic à destination des conteneurs transite et est filtré par la chaîne **FORWARD**. Il faut donc modifier la configuration et créer une action agissant sur la chaîne FORWARD.
* Le fichier ''/etc/fail2ban/jail.d/dokuwiki.local'' utilise l'action ''iptables-multiport'';
* En analysant le fichier ''/etc/fail2ban/action.d/iptables-multiport.conf'' on identifie la variable **%%%%** définie dans le ''/etc/fail2ban/action.d/iptables-common.conf''
Pour que les modifications apportées localement ne soient pas écrasées lors d'une mise à jour du paquet et pour qu'elles s'appliquent en dernier, on crée une copie du fichier que l'on modifie:
cd /etc/fail2ban/action.d/
cp iptables-multiport.conf iptables-docker-multiport.local
Dans ce fichier on redéfinit la variable **%%%%**
# Redémarer le daemon
systemclt restart fail2ban.service
# Vérifier l'existance de la chaine f2b-dokuwiki
iptables -t filter -S f2b-dokuwiki
# La chaine f2b-dokuwiki doit se trouver en début de la chaine FORWARD
iptables -t filter -S FORWARD | head -n 5
-P FORWARD DROP
-A FORWARD -p tcp -m multiport --dports 80,443 -j f2b-dokuwiki
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -j DOCKER-USER
-A FORWARD -o br-5d3619a40a01 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Autoriser à nouveau le client:
fail2ban-client set dokuwiki unbanip 92.88.170.111
===== Références =====
* man fail2ban-regex
* https://www.it-connect.fr/filtres-et-actions-personnalises-dans-fail2ban/
* https://seifer.guru/2021/01/2021-01-fail2ban-with-nginx-in-container/