Sonntag, 6. August 2023

nextcloud zu Hause - sicher mit nextcloudpi

Wie der Name sagt, wurde nextcloudpi ursprünglich für den Raspberry Pi entwickelt und ist eine Art Komplettlösung. Primär gibt es dafür ein Systemimage, ich habe das auf einem Pi3 ausprobiert und kann sagen: das wird schnell langsam. Vielleicht geht es auf einem Pi4, aber darunter (läuft ab Pi2) kann ich es nicht empfehlen.

Ich habe es auf einem Intel Celeron N5105 System mit 8 GB RAM installiert, da finde ich es ganz brauchbar. Man kann später sehr viel bei nextcloud dazu installieren - ich denke, da kann man jede beliebige Hardware ausreizen.

Mein Ziel ist eine eigene Cloud zu Hause, alle Bewohner können die Daten ihrer Smartphones, vorhandene Bildarchive usw. darauf speichern und von unterwegs will man natürlich mal ein paar Bilder zeigen oder auf Dokumente zugreifen.

Ich möchte die Setup Schritte hier notieren, da es viele Möglichkeiten zum "abbiegen" gibt.

Mit nextcloudpi (ncp) entstehen zwei Administrationsseiten: die nextcloudpi (System) Administration und die nextcloud Administration.

Linux System installieren

Für debian gibt es einen curl installer. Da einige Produkte zusammen spielen müssen, wird nicht jede neue debian Version gleich unterstützt. Aktuell (Juli 2023) wird Bookworm noch nicht unterstützt. 

Ich starte das Systemsetup von einer debian-11.6.0-amd64-netinst.iso, geladen von hier. Welchen Computernamen man vergibt ist zweitrangig, der curlinstaller benennt ihn später in nextcloudpi um. Ansonsten muss man beim debian Setup nichts besonderes beachten, am Ende deaktiviere ich die beiden Desktop Punkte und aktiviere den SSH Server für das weitere headless Setup.

Der curl installer benötigt curl, das muss nachinstalliert werden.

sudo apt install curl

Danach startet man das Installationsskript und holt sich ein Getränk zur Entspannung.

curl -sSL https://raw.githubusercontent.com/nextcloud/nextcloudpi/master/install.sh | sudo bash

Am Ende des Setups werden Informationen und die weiteren Schritte ausgegeben, die führt man einfach aus. Im Browserfenster notiert man sich die User Konten (drucken / pdf ) und drückt abschließend den Knopf activate. Damit erfolgt die Weiterleitung auf die NCP Administrationsseite.

Auf dieser Seite läuft man in ein SSL-Zertifikat Problem: der Browser meckert. Das muss man an der Stelle ignorieren und die vielen Warnungen quittieren. Auf der Administrationsseite muss man mit der Warnung wohl leben müssen, ich habe zumindest keinen anderen Weg gefunden. Man müsste eventuell das Zertifikat komplizierter gestalten.

Der Zugriff über einen Namen funktioniert bei mir auch nicht, apache2 ist so konfiguriert, dass nur private IPv4's, localhost oder domain local funktionieren. 

Zugang für nextcloud App

Für den nextcloud User Zugriff braucht man unbedingt ein gültiges Zertifikat! Die Einrichtung braucht es drei Schritte: 

  1. ein (dynamischer) DNS Eintrag, 
  2. Konfiguration im Router und 
  3. ein Zertifikat von Let's Encrypt.

dynDNS

Ich will nur einen IPv6 Eintrag - da bin ich nur mit dem Anbieter von cloudns.net klar gekommen. Da bekommt man ne ganze Menge für kein Geld. Man registriert sich, richtet eine DNS Zone ein z.B. name.cloudns.cl, erstellt einen AAAA Record z.B. cloud.name.cloudns.cl mit der IPv6 Adresse der nextcloud Maschine und nach ein paar Minuten sollte die Auflösung des Namens mit dem Online Tool dig funktionieren. 

Fritzbox Konfiguration

Portfreigabe


In der Fritzbox findet man unter - Internet > Freigaben > Gerät für Freigaben hinzufügen - die richtige Stelle zum Eintragen des Gerätes (oben auswählen) und hier richtet man (nur für IPv6 !) zwei Freigaben (unten neue Freigabe) für Port 443 (HTTPS Server auswählen) und 80 (HTTP Server) ein. 

Bitte nicht komplett freigeben (Exposed Host)!


Port 80 wird für die automatische Erneuerung des Zertifikates benötigt.

Rebindschutz 

Damit die Auflösung der IPv6 Adresse auch intern funktioniert, muss man im Menüpunkt Heimnetz > Netzwerk > Netzwerkeinstellungen noch den dynDNS Namen eintragen. Hat man dies vergessen, gibt es zwei Fehlerbilder:

  1. Intern funktioniert der Link auf die dynDNS Adresse nicht.
  2. Extern kommt beim Zugriff den Fehler "Zugriff über nicht vertraute Domain". Diesen Fehler kann man zwar im ncp Admin im Punkt trusted domain beheben. Der Fehler kommt aber ursächlich weil der nextcloud Host diese Adresse selbst nicht auflösen konnte. 

DNS Abfrage testen

Jetzt muss man unbedingt die lokale DNS Auflösung an seinem PC im lokalen Netzwerk mit nslookup, host oder ping -6 testen. Nach meiner Erfahrung funktioniert es mit DIG ziemlich schnell, lokal kann die Fritzbox und der DNS Cache die Sache etwas kompliziert gestalten, deshalb: einfach ruhig bleiben und etwas (~ 30 min ) warten! 

Zertifikat

Die ncp Admin Oberfläche ist entweder über den Browser https://<IPv4>:4443 oder über Terminal (ssh) mit sudo ncp-config erreichbar.

Die Einstellung für das Zertifikat findet man im Abschnitt NETWORKING im Punkt letsencrypt.

Hier setzt man den Haken bei Active, trägt man den DNS Namen und seine Emailadresse ein - nach einem Apply sollte die Zertifikatsausstellung und -übernahme fehlerfrei laufen.  

Der Zugriff und die Anmeldung mit dem nextcloud user sollte jetzt mit der url ohne Fehler möglich sein z.B: https://cloud.name.cloudns.cl

Erste Anmeldung an der eigenen Cloud

Das Nextcloud Administrationsmenü findet man durch klick auf das runde Status Icon des Benutzers ganz rechts oben in der Ecke.

Der ncp User, mit dem wir jetzt angemeldet sind, ist der primäre nextcloud Administrator (Administration settings, + Apps, Users). 

Als erste Maßnahme sollte man sich einen normalen Arbeits Hauptbenutzer als Admin anlegen (klick oben rechts auf den Benutzerstatus > Benutzer) und der ncp User wird nur noch im Notfall verwendet. 

Für jedes weitere Familienmitglied wird ein normaler Benutzer ohne Admin Berechtigung angelegt. Jeder Benutzer ist Herr über seine Daten, der Admin darf die nextcloud verwalten z.B. zusätzlich Apps installieren usw.

Smartphone Anbindung

Auf dem Smartphone installiert man die nextcloud App aus dem App Store. 

Man könnte sich manuell anmelden, einfacher geht es mit QR Code. Den erzeugt man: Klick oben rechts auf den User > Persönliche Einstellungen > Sicherheit > ganz unten kann man einen (beliebigen) App-Namen eintragen  und ein Passwort dafür erstellen. Nach der Bestätigung des eigenen Passwortes wird eine Schaltfläche für den QR Code gezeigt. Den Scannt man in der App einfach ein und ist verbunden.

In der App gibt es oben ein 3 Strich Menü > Einstellungen > Mehr - hier konfiguriert man Automatisches Hochladen (z.B. Bilder Ordner) und Kontakte & Kalender Sicherung.

Einen Zugriff auf installierte Apps in der nextcloud erhält man über die Suchleiste ganz oben (was ich erstmal komisch finde).

Nacharbeit im System

dynDNS automatisieren

Nach der Grund Einrichtung des DNS Eintrages bei cloudns.net ist die dynamische Aktualisierung noch nicht aktiv! 



Durch einen klick auf die beiden Pfeile an der rechten Seite kann man diese Aktivieren, es öffnet sich eine Box mit Rückfrage und nach quittierung bekommt man mehrere Vorschläge wie man vorgehen kann. Ich kopiere die wget Zeile und verwende einfach einen cronjob. 

Mit crontab -e editiert /erzeugt man den cronjob für den angemeldeten User:

crontab -e

Man ergänzt die wget Zeile wie hier im Beispiel (Anfang und Ende), um alle 5 minuten den Eintrag zu aktualisieren und die Ausgabe nicht ins Systemlog sondern ins nulldevice zu lenken!

*/5 * * * * wget -qO /dev/null --read-timeout=0.0 --waitretry=5 --tries=400 --background https://ipv6.cloudns.net/api/dynamicURL/?q=Token > /dev/null

Dieser cronjob benötigt keine besonderen Rechte, man kann mit sudo crontab -e auch einen Job für User root anlegen.

Nacharbeiten in der nextcloud

Meldungen in der Verwaltung > Übersicht beseitigen. Bei mir gab es zwei Meldungen, die zwei Aktionen auf Systemebene erfordern.

Telefonregion eintragen

Die config.php besteht aus einem mehrzeiligen $CONFIG = array (); - dort muss an beliebiger Stelle der Wert 'default_phone_region' => 'DE', ergänzt werden. Kann man per Hand editieren oder mit einer Zeile Script erledigen:

sudo sed -i "s/);/  'default_phone_region' => 'DE',\n);/" /var/www/nextcloud/config/config.php

imageick installieren (php8.1 - Stand nextcloud 27 August 2023)

sudo apt install php8.1-imagick libmagickcore-6.q16-6-extra

Was dann sonst noch so ist

Mailfunktion der nextcloud einrichten - postfix konfigurieren. 

Dazu muss in der config Datei eine Zeile editiert und ein paar Zeilen ergänzt werden. Ich habe dazu ein paar Zeilen Code bereitgestellt. Danach dient der postfix lediglich als SMTP Sender. Alternativ lässt man den postfix außen vor und konfiguriert den SMTP Server in den nextcloud Einstellungen.

sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
sudo sed -i "s/^relayhost = /relayhost = smtp.provider.de:587/" /etc/postfix/main.cf
sudo tee -a /etc/postfix/main.cf <<EOF

# Enable auth
smtp_sasl_auth_enable = yes

# Set username and password
smtp_sasl_password_maps = static:user@domain.com:password
smtp_sasl_security_options = noanonymous
EOF

sudo postfix reload

Hinweis: Ich habe hier den Benutzer Account direkt in die main.cf geschrieben. Es ist eventuell besser die vorgeschlagene Variante mit separater Passwortdatei zu verwenden - siehe hier.

Anmerkung: Um Systemnachrichten zu erhalten, müsste man noch die virtual / generic Tabelle erstellen. Wenn man das nicht macht bleibt man von vorn herein von den vielen Cronjob Meldungen verschont.

Eine detaillierte Beschreibung habe ich hier gefunden.

SSD nachrüsten

Der im Minipc eingebaute eMMC Speicher ist quasi eine nicht auswechselbare SD Card. Die Lebensdauer wird durch häufige Schreibvorgänge begrenzt. Deswegen verlagert man alle unnötigen Schreibvorgänge auf eine SSD (HDD). USB Speicher werden von ncp direkt behandelt, die SSD an der internen SATA Schnittstelle müssen wir manuell einrichten. Hier gibt es eine bebilderte Erklärung dazu. Die erste interne SSD wird mit /dev/sda abgebildet (lsblk zum prüfen). Drei Schritte sind notwendig, die ich hier wieder in Scriptform zeige, wer sicher gehen will macht einzelnen Befehle lieber "zu Fuß"

  1. Partition erzeugen, die gesamte SSD eine Partition.
  2. Dateisystem ext4 erzeugen.
  3. Die SSD dauerhaft einbinden (mounten). 

Dieses Here Doc sendet Befehle an fdisk, die man auch manuell eingeben kann. 

disk=sda
# partition erzeugen
sudo fdisk /dev/${disk}  <<EOF
n
p
1


w
EOF
# filesystem erzeugen
sudo mkfs.ext4 /dev/${disk}1
# mounten sudo mkdir -p /mnt/${disk}1
sudo mount /dev/${disk}1 /mnt/${disk}1
# dauerhaft in fstab einbinden echo "$(sudo blkid | awk '$1=="/dev/${disk}1:" {print $2}') /mnt/${disk}1 ext4 defaults 0 0"|sudo tee -a /etc/fstab


Die konfigurierte SSD in ncp verwenden

Daten verschieben 

Pfad anlegen dann in der ncp Admin Oberfläche CONFIG > Datenverzeichnis den neuen Pfad eintragen und aktivieren.

sudo mkdir -p /mnt/${disk}1/ncdata

Datenbank verlagern

Pfad anlegen dann in der ncp Admin Oberfläche CONFIG > Datenbank den neuen Pfad eintragen und aktivieren.

sudo mkdir -p /mnt/${disk}1/ncdatabase

Swap Datei verlagern

Bei mir war keine Swap Datei angelegt, keine Änderung notwendig? Prüfung mit 

sudo swapon --show

Dies und das

Bei einer geplanten Wartung (Umbau, Stromausfall usw.) sollte man nicht einfach den Stecker ziehen! Ein Shutdown / Restart geht über die ncp Admin Webseite: Oben Rechts ist ein Schalter, nach dem Klick hat man die Wahl zwischen Shutdown oder Reboot. Shutdown bedeutet hier aber nicht PowerOff, dazu muss man ssh bemühen.

Hab ich alles richtig gemacht? 

Man kann von jedem Linux PC die offenen Ports testen:

nc -w 1 -zv cloud.name.cloudns.nz http https 22 25 4443 7867  2>&1 | grep succeeded

Ein paar Online Security Scanner 


ToDo ?

Code Block


2 Kommentare:

  1. Hi Otto,
    nextcloudpi ist Nov 2023 EOL:
    https://help.nextcloud.com/t/nextcloudpi-planning-to-discontinue-its-docker-version-with-nc-25/158895
    Empfehlung erst Mal: https://github.com/nextcloud/all-in-one/blob/main/migration.md
    Grüße, Lutz

    AntwortenLöschen
    Antworten
    1. Danke für die Info, ich habe sowas die letzten Tage schon gelesen. Der ursprüngliche Erfinder hat ja schon vor ca. einem Jahr die Segel gestrichen.

      Löschen