Des tentatives de connexion reviennent depuis la même adresse et consomment inutilement les ressources du serveur ? En 2026, associer Nextcloud à Fail2ban permet de bloquer au niveau réseau certaines adresses repérées dans nextcloud.log. Cette protection complète le ralentissement déjà intégré à Nextcloud, elle ne le remplace pas.
Ce tutoriel part du journal réel, installe un filtre et une jail, puis vérifie chaque étape avant d’activer un bannissement. Il traite aussi le cas du reverse proxy, car une mauvaise adresse dans remoteAddr peut conduire à bloquer le frontal ou tous les utilisateurs d’un même site.
Fail2ban remplace-t-il la protection anti-bruteforce de Nextcloud ?
Non. Les deux mécanismes interviennent à des niveaux différents. Nextcloud inclut une protection contre les attaques par force brute dans son cœur. L’application bruteforcesettings ajoute l’interface d’administration et les exclusions, mais sa désactivation ne coupe pas la protection. Nextcloud détecte les comportements suspects sur ses points d’authentification et allonge progressivement le délai des requêtes concernées.
Fail2ban agit en dehors de l’application. Il lit les journaux, compte les événements correspondant à un filtre, puis appelle une action de bannissement. Selon la distribution et la configuration, cette action peut s’appuyer sur le pare-feu disponible. Les requêtes bloquées n’atteignent alors plus le serveur web, PHP ni Nextcloud pendant la durée prévue par la jail.
| Couche | Nextcloud | Fail2ban |
|---|---|---|
| Détection | Contexte applicatif et points d’authentification | Expressions régulières appliquées aux journaux |
| Réaction | Ralentissement progressif de l’adresse observée | Règle temporaire au niveau système ou réseau |
| Mise en service | Active dans le cœur de Nextcloud | Installation et configuration par l’administrateur |
| Risque principal | Mauvaise adresse cliente derrière un proxy | Filtre trop large ou bannissement du proxy |
Conservez donc la protection native. La documentation Nextcloud recommande l’usage conjoint des deux outils sur un serveur de production. N’ajoutez toutefois Fail2ban que si vous administrez le système, le journal et le pare-feu. Sur une plateforme gérée, l’opérateur peut appliquer cette couche sans vous donner accès à sa configuration.
Le guide de sécurité Nextcloud replace ce contrôle parmi HTTPS, la double authentification, les mises à jour, les droits et les sauvegardes. Fail2ban réduit un type de trafic hostile, mais ne protège pas un mot de passe déjà volé ni une application non maintenue.
Quels prérequis vérifier dans nextcloud.log et derrière le proxy ?
Le filtre officiel s’appuie sur nextcloud.log. Nextcloud documente les échecs de connexion au niveau 2, soit WARN. Le paramètre loglevel doit donc rester à 2 ou à une valeur plus détaillée. Le fichier doit aussi être lisible par Fail2ban et accessible au chemin déclaré dans la jail, sans ouvrir ses permissions à des comptes inutiles.
Commencez par provoquer un seul échec avec un compte de test. Notez l’heure, puis recherchez l’événement dans le journal. La ligne doit contenir un message comme Login failed: et un champ remoteAddr avec l’adresse réellement utilisée pour le test. L’audit.log ne convient pas à cette jail : la documentation de durcissement indique qu’il enregistre actuellement les connexions réussies, pas les échecs nécessaires au filtre.
Validez remoteAddr avant toute activation
Si Nextcloud voit l’adresse du reverse proxy au lieu de celle du client, Fail2ban risque de bannir le frontal commun. Corrigez d’abord trusted_proxies et les en-têtes transmis. N’essayez pas de compenser une mauvaise chaîne de confiance avec une liste d’exclusion très large.
Derrière un proxy ou un répartiteur de charge, comparez l’adresse du test dans trois sources : le poste utilisé, le journal du proxy et remoteAddr dans nextcloud.log. Nextcloud utilise normalement X-Forwarded-For, mais accepte cet en-tête seulement depuis les adresses déclarées dans trusted_proxies. Une valeur incorrecte de forwarded_for_headers peut rendre l’adresse visible falsifiable.
Le tutoriel sur le reverse proxy Nextcloud détaille cette chaîne. Ne poursuivez que lorsque deux réseaux de test distincts produisent deux adresses clientes distinctes dans le journal. Cette vérification protège aussi la limitation intégrée à Nextcloud, qui se base sur l’adresse observée par l’application.

Comment créer le filtre et la jail Nextcloud ?
Installez Fail2ban avec le gestionnaire de paquets de votre distribution, puis conservez les fichiers personnalisés dans /etc/fail2ban/filter.d/ et /etc/fail2ban/jail.d/. Évitez de modifier directement un fichier livré par le paquet, car une mise à jour pourrait le remplacer ou compliquer la comparaison avec la version amont.
Créez /etc/fail2ban/filter.d/nextcloud.conf à partir du filtre documenté par Nextcloud :
[Definition]
_groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*)
failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed:
^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Two-factor challenge failed:
^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Trusted domain error.
datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"
Ce filtre reconnaît les échecs de connexion, les échecs du second facteur et les erreurs de domaine non approuvé. Ne remplacez pas <HOST> par une adresse : Fail2ban utilise ce marqueur pour extraire l’hôte à bannir. Si le format de vos journaux diffère, ne simplifiez pas l’expression au hasard. Testez d’abord le fichier réel avec fail2ban-regex.
Créez ensuite /etc/fail2ban/jail.d/nextcloud.local :
[nextcloud]
enabled = true
backend = auto
port = 80,443
protocol = tcp
filter = nextcloud
maxretry = 3
findtime = 43200
bantime = 86400
logpath = /chemin/reel/vers/nextcloud.log
Les valeurs maxretry, findtime et bantime ci-dessus reprennent l’exemple officiel : trois événements sur douze heures conduisent à un bannissement de vingt-quatre heures. Ce n’est pas une règle adaptée à tous les environnements. Des utilisateurs derrière une même sortie Internet, des clients anciens ou un outil métier mal configuré peuvent générer plusieurs erreurs légitimes.
Remplacez aussi logpath et les ports par ceux de votre installation. La jail doit lire le journal qui contient l’échec contrôlé, pas un fichier portant seulement un nom similaire. Si Nextcloud écrit dans une destination autre qu’un fichier, adaptez le backend en vous appuyant sur la documentation Fail2ban de la version installée.
Comment tester le filtre avant de bannir une adresse ?
Commencez hors du trafic réel. La commande fail2ban-regex accepte un fichier de journal et un filtre. Elle permet de voir combien de lignes correspondent, combien sont ignorées et si l’adresse est extraite comme prévu :
sudo fail2ban-regex \
/chemin/reel/vers/nextcloud.log \
/etc/fail2ban/filter.d/nextcloud.conf
Le résultat doit inclure l’échec créé avec le compte pilote. Examinez également les lignes manquées. Un total positif ne suffit pas si le filtre reconnaît une autre erreur ou capture l’adresse du proxy. Sur un journal volumineux, travaillez d’abord sur une copie limitée à une courte fenêtre et contenant uniquement des données de test non sensibles.
Vérifiez ensuite la syntaxe globale avant de recharger le service :
sudo fail2ban-client -t
sudo fail2ban-client reload nextcloud
sudo fail2ban-client status nextcloud
Selon l’état initial du service, un démarrage ou un rechargement complet peut être nécessaire. La commande de statut doit montrer la jail, le chemin suivi, le nombre d’échecs et les adresses éventuellement bannies. Consultez en parallèle le journal de Fail2ban fourni par votre distribution afin de confirmer que le filtre se charge sans erreur.
Effectuez enfin un test contrôlé depuis un réseau que vous pouvez quitter, par exemple une connexion mobile dédiée. Gardez un accès d’administration depuis une autre adresse et une console système indépendante. Déclenchez seulement le nombre d’échecs prévu, puis vérifiez le statut de la jail, la règle du pare-feu et l’impossibilité temporaire d’atteindre le service depuis l’adresse testée.
Le guide Nextcloud Activity et audit explique les différences entre nextcloud.log, audit.log, Activity et les journaux du frontal. Pour cette recette, conservez au minimum l’heure, l’adresse, la ligne reconnue, l’action Fail2ban et le résultat réseau.
Comment éviter les faux positifs et débloquer un utilisateur ?
Avant la production, choisissez les seuils à partir de vos usages. Un bureau entier peut sortir avec une seule adresse publique. Un client WebDAV qui conserve un ancien mot de passe peut réessayer sans intervention humaine. Un téléphone hors ligne peut accumuler des erreurs au retour du réseau. Dans ces cas, une jail stricte peut bloquer plusieurs personnes pour l’erreur d’un seul appareil.
Ne placez pas automatiquement l’adresse du bureau dans ignoreip. Une exclusion permanente retire la protection réseau pour tous les appareils qui partagent cette sortie. Corrigez d’abord le client fautif, vérifiez les mots de passe d’application et examinez la protection intégrée dans Paramètres d’administration > Sécurité. La liste blanche Nextcloud présente le même type de compromis : une adresse exclue peut tenter des authentifications sans ralentissement.
Pour lever un bannissement dans la seule jail Nextcloud, utilisez la commande ciblée documentée par Fail2ban :
sudo fail2ban-client set nextcloud unbanip 198.51.100.42
L’adresse utilisée ici appartient à une plage réservée aux exemples. Remplacez-la par la valeur confirmée dans le statut et les journaux. Après le déblocage, corrigez la cause, puis réalisez une connexion réussie depuis l’appareil concerné. Un simple retrait de la règle ne résout pas un secret obsolète ou un proxy mal configuré.
Conservez une procédure de récupération
Documentez le moyen de vérifier l’identité du demandeur, la commande de statut, le déblocage ciblé et l’accès de secours. Testez cette procédure après une mise à niveau de Nextcloud, de Fail2ban, du proxy ou du pare-feu.
Surveillez le nombre d’échecs reconnus et de bannissements, mais ne conservez pas les journaux sans limite. Ils peuvent contenir des identifiants, adresses IP, chemins et informations sur les clients. Définissez une rotation, des droits de lecture et une durée liées à votre besoin d’exploitation. Pour comprendre l’ensemble des composants avant de modifier le serveur, consultez le guide complet de Nextcloud.
Conclusion
Fail2ban protège Nextcloud seulement si la chaîne entière est correcte : un échec apparaît dans nextcloud.log, remoteAddr contient la vraie adresse cliente, le filtre reconnaît la bonne ligne, la jail applique une action mesurée et l’équipe sait débloquer un accès légitime. Gardez la protection anti-bruteforce intégrée, testez derrière le proxy et prévoyez une console de secours avant tout bannissement. Si vous préférez utiliser Nextcloud sans administrer le système, le pare-feu et les journaux, une offre gérée réduit ce périmètre d’exploitation.