HowTo: Nextcloud unter OpenMediaVault 3 inkl. Fail2Ban

Als kleine Einleitung: ich beschreibe hier mein Vorgehen, das Fehlerfrei funktioniert. Ich bin mir sicher, ob man an der ein oder anderen Stelle etwas weglassen oder ein anders vorgehen wählen kann. Der Einfachheit halber habe ich mich von einem anderen Computer über ssh auf meinem NAS eingeloggt. Hier kann ich dann gleichzeitig im Browser und in der Konsole Arbeiten.

Da Nextcloud 11 das in OMV 2 mitgelieferte PHP 5.4 nicht mehr unterstützt, benutze ich OMV 3.0.59 als System. Außerdem habe ich festgestellt, dass Nextcloud nur über https ohne „zicken“ läuft. Daher habe ich im Vorfeld den OpenMediaVault Port auf einen anderen gesetzt (z.B. 40443) damit kann Nextcloud einfach über Port 443 laufen.

Als Voraussetzung gehe ich davon aus, dass auch die OMV-extras installiert und deren Paketquellen aktiviert sind. Außerdem sollte ein Zertifikat existieren. Ob selbst erstellt oder über letsencrypt ist egal.

Zu Beginn installieren wir erstmal die Plugins, die wir in dieser Anleitung benötigen:


  • openmediavault-nginx

  • openmediavault-mysql

  • openmediavault-fail2ban


Sind diese Plugins installiert, kann es losgehen. Als erstes geht Ihr in das MySQL Plugin, aktiviert das Plugin und ganz unten die SQL-Verwaltungsseite.

Der Klarheit halber vergebt ein root Passwort unter dem Button „Passwort zurücksetzen“, ansonsten gibt es manchmal Probleme beim Anmelden. Anschließend geht Ihr auf die Weboberfläche von dem Datenbanktool und logt euch mit „root“ und dem vergebenen Passwort ein.

Hier geht Ihr auf Datenbank -> Neue Datenbank erstellen -> „nextcloud“ -> Datenbank erstellen


Nun legt Ihr noch einen neuen Benutzer hierfür an. Der Einfachheit nennt Ihr den auch „nextcloud“ und vergebt die Rechte für die entsprechende Datenbank -> „Benutzer aktualisieren“ speichert die Einstellung.


Dann könnt Ihr euch wieder aus der MYSQL-Oberfläche abmelden. Jetzt muss ein Ordner für Nextcloud angelegt werden. Dies macht Ihr unter „Freigegebene Ordner“

Damit alles so einfach wie möglich bleibt vergebt hier auch den Namen „nextcloud“. Um die Installationsdatei von Nextcloud ablegen zu können, habe ich an der Stelle den Ordner für einen smb/cifs User freigegeben und eingebunden. Dies kann aber auch über ftp oder direkt über die Console in den Ordner gespeichert werden.

Wenn die setup-nextcloud.php in dem Ordner abgelegt ist, ändert Ihr noch die Rechte des Ordners unter ACLfolgeder Maßen ab:

Die nginx Einstellungen müssen jetzt vorgenommen werden. Dazu legt Ihr erst einen neuen pool an

Die Eingaben sind folgendermaßen vor zu nehmen:


Nicht zu vergessen ist die Erweiterte Option : env[PATH] = /usr/local/bin:/usr/bin:/bin
Wenn dies erledigt ist wird der Server konfiguriert:

Erweiterte Optionen:

add_header Strict-Transport-Security "max-age=15768000### includeSubDomains### preload###"###
client_max_body_size 10G### # set max upload size
fastcgi_buffers 64 4K###
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect###
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect###
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect###
error_page 403 /core/templates/403.php###
error_page 404 /core/templates/404.php###
location = /robots.txt {
allow all###
log_not_found off###
access_log off###
}
location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
deny all###
}
location / {
# The following 2 rules are only needed with webfinger
rewrite ^/.well-known/host-meta /public.php?service=host-meta last###
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last###
rewrite ^/.well-known/carddav /remote.php/carddav/ redirect###
rewrite ^/.well-known/caldav /remote.php/caldav/ redirect###
rewrite ^(/core/doc/[^\/"]+/)$ $1/index.html###
try_files $uri $uri/ index.php###
}
location ~ ^(.+?\.php)(/.*)?$ {
try_files $1 = 404###
include fastcgi_params###
fastcgi_param SCRIPT_FILENAME $document_root$1###
fastcgi_param PATH_INFO $2###
fastcgi_param HTTPS on###
fastcgi_pass $socket###
}
# Optional: set long EXPIRES header on static assets
location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires 30d###
# Optional: Dont log access to assets
access_log off###
}

Nun wird das nginx-plugin noch aktiviert und gespeichert.

Jetzt geht ihr in die Konsole oder direkt an euren NAS und meldet euch als root an. Es werden von Nextcloud noch ein paar Pakete benötigt die Ihr installieren müsst:

apt-get install php5-gd php5apcu php5-curl php5-cli

Wenn dies geschehen ist sollte der Nextcloud Installation nichts mehr im Wege stehen. Ruft in einem Browser entweder über die IP-Adresse oder den hostnamen die Setupdatei auf:

https://meineip/setup-nextcloud.php

Es sollte nun die Installation starten. Bei der Frage wohin Nextcloud installiert werden soll gebt ihr den „.“ ein, außer ihr möchtet später mit https://meineip/ordnername die Seite Aufrufen.

Hier sind folgende Sachen zu beachten:


  • Username und Password ist für den Admin Account.

  • Den Pfad unter data folder merkt ihr euch am besten für später noch (hier müsste sowas wie „/media/die-UUID-des-Datenträgers-stehen/nextcloud/data“ stehen).

  • Wenn Ihr die Daten an anderer Stelle haben möchtet, dann müsst Ihr hier den Pfad ändern. Dies kann mann aber auch später noch in der config datei ändern (wird von mir aber nicht genauer beschrieben).

  • Wählt als Datenbank MYSQL und gebt die vorher angelegten Daten ein. „localhost“ bleibt stehen.

Jetzt sollte erstmal Nextcloud grundlegend funktionieren. Nichts desto trotz solltet Ihr noch einige Änderungen vornehmen bzw. für fail2ban vorbereiten. Dies findet jetzt wieder in der Konsole statt. Hier brauchen wir auch den den Pfad wo Nextcloud standardmäßig den Datenordner angelegt hat. Das macht das Finden der config Datei leichter.

Damit wechselt Ihr in das config Verzeichnis der NC installation:
cd /media/die-UUID-des-Datenträgers/nextcloud/config

Anschließend öffnet Ihr die config.php zum Ändern:
nano config.php

Sie müsste ungefähr so aussehen. Ändert nichts außer das beschriebene hier. Die config.php ist nur ein Beispiel:

"passwordsalt" => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"trusted_domains" =>
array (
0 => "192.168.10.155"
),
"datadirectory" => "/media/die-UUID-des-Datenträgers/nextcloud/data",
"dbtype" => "mysql",
"version" => "7.0.2.1",
"dbname" => "nextcloud",
"dbhost" => "localhost",
"dbtableprefix" => "oc_",
"dbuser" => "nextcloud,
"dbpassword" => "xxxxxxxxxxxxxxxxx",
"installed" => true,
)###

Zusätzliche Änderungen sind ratsam:
"passwordsalt" => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"trusted_domains" =>
array (
0 => "192.168.10.155"
1 => "hier sollte man noch zusätzliche IP oder DNS einträge machen",
2 => "zum Beispiel der Hostname deines NAS"
),
"datadirectory" => "/media/die-UUID-des-Datenträgers/nextcloud/data",
"dbtype" => "mysql",
"version" => "7.0.2.1",
"dbname" => "nextcloud",
"dbhost" => "localhost",
"dbtableprefix" => "oc_",
"dbuser" => "nextcloud,
"dbpassword" => "xxxxxxxxxxxxxxxxx",
"installed" => true,
)###

Für fail2ban muss noch das Protokollieren Nextcloud aktiviert werden:

"passwordsalt" => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"trusted_domains" =>
array (
0 => "192.168.10.155"
1 => "hier sollte man noch zusätzliche IP oder DNS einträge machen",
2 => "zum Beispiel der Hostname deines NAS"
),
"datadirectory" => "/media/die-UUID-des-Datenträgers/nextcloud/data",
"dbtype" => "mysql",
"version" => "7.0.2.1",
"dbname" => "nextcloud",
"dbhost" => "localhost",
"dbtableprefix" => "oc_",
"dbuser" => "nextcloud,
"dbpassword" => "xxxxxxxxxxxxxxxxx",
"loglevel" => 1,
"logtimezone" => "Europe/Berlin",
"logfile" => "/var/log/nextcloud.log",
"log_rotate_size" => 10485760,
"cron_log" => true,
"installed" => true,
)###

Ich habe den Pfad für die Logdatei unter /var/log/nextcloud.log ausgewählt weil hier von OpenMediaVault alle anderen Logdateien liegen. Gespeichert wird in nano immer mit strg+o. und den Editor beenden mit strg+x.

Anschließend muss die „nextcloud.log“ noch erstellt werden:
cd /var/log/
nano nextcloud.log

Speichern der Datei mit strg+o und verlassen strg+x.

Jetzt müssen die Rechte noch richtig gesetzt werden:
chown www-data:www-data nextcloud.log

Für fail2ban muss jetzt der Filter erstellt werden der nach den gebrauchten Daten in der Logdatei sucht:
cd /etc/fail2ban/filter.d/
nano nextcloud.conf

Hier wird folgendes eingefügt:
[Definition]
failregex={"reqId":".*","remoteAddr":".*","app":"core","message":"Login
failed: ".*" \(Remote IP: ""\)","level":2,"time":".*"}
ignoreregex =

Speichern + Schließen.

Als letztes muss jetzt noch das Jail dazu angelegt werden. Dies hab ich auch in der Weboberfläche von OMV getan, da dies der einfachste Weg ist.

Hier geht Ihr unter fail2ban ->Jails -> Hinzufügen und macht Ihr folgende Einträge:

Bei fail2ban->Einstellungen tragt Ihr noch bei der Findtime eine „0“ ein und aktiviert das Plugin. Jetzt solltet ihr es mal versuchen können ob fail2ban richtig funktioniert, in dem Ihr euch mit falschem Passwort in Nextcloud einlogt. Hierzumüsstet Ihr dann in der Weboberfläche von OMV->Dienste->fail2ban einen Eintrag finden.

Ich hoffe ich habe rückwirkend noch alles richtig zusammengebracht ? Wenn Ihr jetzt noch eure Datenordner von OMV in Nextcloud haben wollt, könnt ihr diese mit der Option „Externe Daten“ unter Nextcloud einbinden.

Wenn Ihr das mit SMB oder FTP machen wollt, dann an der Stelle eine kleine Warnung: auch wenn Ihr den server „localhost“ dann verwendet, erzeugt ihr hiermit eine hohe Auslastung auf dem NAS. Wenn Ihr sie aber als lokale Datenträger einbindet, müsst Ihr dem Freigabeordner in OMV noch ACL’s für die Gruppe oder den Benutzer www-data geben. Den genauen Unterschied von Vor- und Nachteilen bzw. Nutzen ob Gruppe oder user kann ich nicht sagen. Vielleicht kennt sich hier noch jemand genauer aus und kann es in den Kommentaren ergänzen.

Wenn mir ein Fehler unterlaufen ist dann ist diese Anleitung auch nicht in Stein gemeißelt. Viel Erfolg.

Wir Danken unserem Besucher Christoph alias happyreacer für die tolle und detaillierte Anleitung!