Table des matières

, , , , , ,

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 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é:

loglog.log
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

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.

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 <chain>

# 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