Nextcloud gegen Brute-Force-Angriffe absichern

Owncloud und der Fork Nextcloud lassen sich von Haus aus nicht gegen Brute-Force-Angriffe auf den Login-Screen absichern. Mit dem Tool fail2ban lässt sich dies – Root-Server vorausgesetzt – für Owncloud und andere Webapplikationen nachholen.

Zuerst muss das Loggen von Anmeldefehlern in der Nextcloud aktiviert werden, dazu folgende Zeilen 4 und 5 in der config.php ergänzen:

[/home/user/nextcloud/config/config.php]
1
2
3
4
5
6
7
<?php
$CONFIG = array (
...
'logfile' => '/var/log/nextcloud.log',
'loglevel' => 2,
...
);

Achtung: die Datei /var/log/nextcloud.log muss manuell erstellt werden und muss mit den Rechten des Webservers schreibbar sein.

Dann muss fail2ban lernen, wie ein Anmeldefehler im Nextcloud-Log aufgebaut ist und an welcher Stelle die IP-Adresse des Nutzers steht:

[/etc/fail2ban/filter.d/nextcloud.conf]
1
2
[Definition]
failregex = ^.*\"remoteAddr\":\"<HOST>\".*Login failed:.*$

Zuletzt muss für den soeben definierten Filter ein konkrete Sperrkonfiguration (ein Jail) erstellt werden, bei dem das zu beobachtende Logfile spezifiziert werden muss. Die Aktion action_mwl bedeutet, dass fail2ban den Nutzer per iptables Firewallregel sperrt und den Admin per Email über die Sperrung informiert. Soll nur die Sperrung per Firewall erfolgen, kann die Zeile action = ... entfallen.

[/etc/fail2ban/jail.local]
1
2
3
4
5
[nextcloud]
enabled = true
logpath = /var/log/nextcloud*.log
port = http,https
action = %(action_mwl)s

In der Standardkonfiguration wird jetzt eine Sperregel für jeden Nutzer (IP-Adresse) erstellt, der innerhalb von 10 Minuten 5 fehlerhafte Anmeldeversuche durchgeführt hat. Diese wird nach 10 Minuten wieder entfernt.

Der aktuelle Status lässt sich jederzeit mit dem Befehl fail2ban-client status nextcloud prüfen. Dieser listet die aktuell erkannten Fehlversuche und Sperrungen auf:

1
2
3
4
5
6
7
8
9
Status for the jail: nextcloud
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/nextcloud.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list: