Document : Sécuriser Nextcloud avec Fail2Ban

Sécuriser Nextcloud avec Fail2Ban

  • admin
  • Debian, Fail2Ban, Nextcloud, Raspberry Pi, Sécurité

Nextcloud intègre déjà une protection contre les attaques par force brute. Dans ce guide, vous allez voir comment Fail2Ban peut compléter ce mécanisme en bloquant les adresses IP suspectes au niveau du pare-feu.

Une première protection déjà intégrée

Avant d’aller plus loin, ce guide suppose que Fail2Ban est déjà installé et fonctionnel sur votre Raspberry Pi. Si ce n’est pas encore le cas, commencez par suivre l’article Installer et configurer Fail2Ban sur un Raspberry Pi.

Nextcloud intègre nativement une protection contre les attaques par force brute. Cette protection est activée par défaut et agit au niveau de l’application en ralentissant les requêtes après plusieurs échecs d’authentification.

Fail2Ban vient compléter cette première ligne de défense en bloquant l’adresse IP fautive directement au niveau du pare-feu après plusieurs tentatives infructueuses.

Créer le filtre Nextcloud

Nextcloud enregistre ses événements dans des journaux au format JSON. Chaque ligne contient plusieurs champs structurés, comme l’adresse IP source, le niveau de gravité ou le message associé à l’événement. Ce format se prête bien à l’analyse par Fail2Ban, car il permet de cibler précisément les entrées correspondant à un échec de connexion.

Emplacement du fichier de log

Par défaut, le fichier nextcloud.log est créé dans le répertoire défini par la directive datadirectory dans le fichier config/config.php de Nextcloud.

Le filtre doit donc repérer les lignes qui signalent une tentative de connexion infructueuse. Dans le cas de Nextcloud, cela passe par le champ remoteAddr, qui contient l’adresse IP à bannir, et par le champ message, qui contient l’événement à détecter.

Commencez par créer le fichier de filtre dédié à Nextcloud :

# Créer le fichier de filtre pour Nextcloud
sudo nano /etc/fail2ban/filter.d/nextcloud.conf

Ajoutez ensuite le contenu suivant :

[Definition]
failregex = ^\{.*"remoteAddr":"<HOST>".*"message":"Login failed:.*$
ignoreregex =

Cette expression régulière cible les lignes JSON qui contiennent à la fois une adresse IP source et un message de type Login failed.

Comprendre la Regex

  • ^\{ impose que la ligne commence par une accolade ouvrante. Le filtre travaille ainsi sur une entrée JSON complète.
  • "remoteAddr":"<HOST>" indique à Fail2Ban où récupérer l’adresse IP à bannir.
  • "message":"Login failed: cible ensuite les échecs d’authentification enregistrés par Nextcloud.

Autrement dit, la règle cherche une ligne de journal JSON contenant une adresse IP et un message indiquant qu’une connexion a échoué.

Déclarer la jail Nextcloud

Une fois le filtre en place, il faut déclarer la jail qui va l’utiliser. C’est ici que vous indiquez à Fail2Ban quel journal surveiller, quel filtre appliquer et combien de tentatives tolérer avant le bannissement.

Pour éviter de modifier les fichiers par défaut, créez plutôt une configuration dédiée dans jail.d. Cette approche rend la maintenance plus simple et garde une configuration mieux organisée.

Créez le fichier suivant :

# Créer la configuration dédiée à Nextcloud
sudo nano /etc/fail2ban/jail.d/nextcloud.local

Ajoutez ensuite cette configuration :

[nextcloud]
enabled = true
backend = auto
filter = nextcloud
port = 80,443
protocol = tcp
logpath = /var/nextcloud_data/nextcloud.log
maxretry = 3
findtime = 10m
bantime = 1h

Le nom de la jail doit correspondre au nom du filtre, ici nextcloud. La directive logpath doit pointer vers le journal réellement utilisé par votre instance. Le chemin ci-dessus n’est qu’un exemple et doit être adapté à votre installation.

Les paramètres maxretry, findtime et bantime définissent le comportement du bannissement. Ici, la jail autorise trois échecs sur une fenêtre de dix minutes, puis bloque l’adresse IP pendant une heure.

Enregistrez le fichier, puis quittez l’éditeur avec Ctrl+O, Entrée, puis Ctrl+X.

Redémarrez ensuite Fail2Ban pour appliquer la nouvelle jail :

# Recharger la configuration Fail2Ban
sudo systemctl restart fail2ban

Vous pouvez ensuite vérifier que la jail est bien active avec :

# Vérifier l'état de la jail Nextcloud
sudo fail2ban-client status nextcloud

Tester le fonctionnement de la jail

Une fois la jail activée, vous pouvez vérifier son bon fonctionnement en provoquant quelques échecs de connexion sur l’interface de Nextcloud. L'objectif ici est simplement de confirmer que Fail2Ban détecte bien les tentatives infructueuses et bannit l'adresse IP concernée.

Commencez par effectuer plusieurs connexions avec un mot de passe incorrect sur la page de connexion de Nextcloud. Lorsque le seuil défini par maxretry est atteint, la jail nextcloud doit bannir l’adresse IP concernée.

Pendant toute la durée du bannissement, le navigateur n’affichera plus la page de connexion habituelle. Le site pourra sembler inaccessible, car le pare-feu refusera les nouvelles connexions depuis l’adresse IP bannie.

Vous pouvez ensuite vérifier l’état de la jail avec la commande suivante :

# Afficher l'état de la jail Nextcloud
sudo fail2ban-client status nextcloud

Pour retirer manuellement une adresse IP de la jail, utilisez la commande suivante :

# Retirer manuellement une adresse IP de la jail nextcloud
sudo fail2ban-client set nextcloud unbanip <IP>

Cette vérification suffit généralement à confirmer que la jail est correctement reliée au journal de Nextcloud et que le mécanisme de bannissement fonctionne comme prévu.