Absicherung von ownCloud mit Hilfe von fail2ban

Da die Grundinstallation von ownCloud in meinen Augen intransparent hinsichtlich Sicherheit ist, kam mir der Gedanke, fail2ban hierfür einzusetzen. Bei der Recherche habe ich mehrere Lösungsansätze gefunden, die aber nicht so richtig funktionieren wollten.

Ziel soll es sein, Brute-Force Attacken zu verhindern. Hierzu sei dank des Hinweises von Lutz Donnerhacke zu erwähnen, dass diese Lösung eine Brute-Force Attacke nicht in Gänze verhindert, sonder lediglich als Präventionsmaßnahme dient.

Damit es auswertbare Log-Dateien gibt, muss dies in ownCloud zunächst aktiviert werden:

/config/config.conf:

  'logtimezone' => 'Europe/Berlin',
  'logfile' => '/var/log/owncloud.log',
  'loglevel' => '2',
  'log_authfailip' => true,

Logdatei anlegen und Berechtigungen anpassen:

touch /var/log/owncloud.log
chown www-data:www-data /var/log/owncloud.log

Als Filter werden zwei reguläre Ausdrücke verwendet, da ab ownCloud-Version 7.0.2 der Zusatz „X-Forwarded-For: ‚.*'“ protokolliert:

/etc/fail2ban/filter.d/owncloud.conf

[Definition]
failregex={"app":"core","message":"Login failed: user '.*' , wrong password, IP:<HOST>","level":2,"time":".*"}
          {"app":"core","message":"Login failed: '.*' \(Remote IP: '<HOST>', X-Forwarded-For: '.*'\)","level":2,"time":".*"}

Der Filter wird in der jail.conf aktiviert:

/etc/fail2ban/jail.conf

[owncloud]

enabled = true
port = 80,443
protocol = tcp
filter = owncloud
maxretry = 3
logpath = /var/log/owncloud.log

Abschließend noch fail2ban neustarten und ownCloud ist gegen Brute-Force Attacken abgesichert. Das Logrotate für /var/log/owncloud.log nicht vergessen.

8 Antworten auf „Absicherung von ownCloud mit Hilfe von fail2ban“

  1. Hallo Thomas,

    klasse Anleitung, gut geschrieben. Ich foffe Du kannst mir weterhelfen, da ich vor einem kleinen Problem stehe.
    Mein ownCloud protokolliert unter /var/log/owncloud.log grundsätzlich garnichts.
    Hab versuchsweise das Loglevel auf „Debug = 0“ gsetzt. Keinerlei Auswirkung. Das Log ist und bleibt leer.

    VG Markus

  2. Hallo Thomas,

    danke für die schnelle Antwort.
    Leider keinerlei Veränderung. Log bleibt leer. Es ist ja nicht so, daß ich schnell Aufgebe, aber für so bisschen Protokollierung sitze ich jetzt bereits 5 Stunden davor

    ‚installed‘ => true,
    ‚logtimezone‘ => ‚Europe/Berlin‘,
    ‚logfile‘ => ‚/var/log/owncloud.log‘,
    ‚loglevel‘ => ‚2‘,
    ‚log_authfailip‘ => true,

    So sieht derzeit der entscheidende Block aus
    Ohne Protokoll natürlich auch kein fail2ban….

    Gruß Markus

    1. Sehr merkwürdig. Mit den Berechtigungen ist auch alles Ok? Der Apache-Benutzer (www-data) kann auch das Logfile schreiben? Ist in der Administrations-Oberfläche ein Logeintrag? Ist log_errors = On in der php.ini aktiviert?

  3. Hi Thomas,

    ich habs geschafft, Ich habe meine ownCloud-Instanz endgültig zerschossen.
    Wenn ich darf, dann werde ich mich die Tage wegen dem Problem nochmal bei Dir melden.

    Gruß Markus

  4. Hallo Thomas,

    ich war gründlich. Ich habe nicht nur ownCloud geschrottet, gleich den ganzen vServer mit. Aber ein Restore aus dem Backup funktioniert. Hab ownCloud trotzdem neu installiert.
    Leider mit dem gleichen Ergebnis. Die Logdatei gehört www-data.
    Im Log von ownCloud finde ich aberf olgendes:

    chmod(): open_basedir restriction in effect. File(/var/log/owncloud.log) is not within the allowed path(s): (/var/www/vhosts/km20112-05.keymachine.de/:/tmp/) at /var/www/vhosts/km20112-05.keymachine.de/httpdocs/cloud/lib/private/log/owncloud.php#92

    Kannst Du damit was anfangen?

    Gruß Markus

  5. Hallo Thomas,

    dnake für die schnelle Antwort.
    Die Datei woncloud.log existiert schon (habe ich selbst angelegt) und der User www-data hat rwx auf die Datei. Zumindest wenn man WinSCP Glauben schenken darf.
    Ich steh grad auf dem Schlauch…
    Kannst Du mir noch ein wenig unter die Arme greifen. Linux ist noch nicht mein Spezialgebiet… 🙂

    Gruß Markus

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload CAPTCHA.