Christopher Böhnisch
How To | Eigenen sicheren Fileserver Installieren
Eine Schritt-für-Schritt Anleitung wie Du deinen eigenen Fileserver mit Nextcloud auf Ubuntu installieren kannst, ohne auf Funktionalität und Sicherheit zu verzichten.
Server Setup
1. Update der Pakete
Stelle sicher, dass die Pakete und Paketlisten aktuell sind.
# Update Paketlisten
sudo apt-get update
# Update installierter Pakete
sudo apt-get upgrade -y
Installation benötigter Komponenten
#Installation notwendiger Komponenten
sudo apt-get install apache2 libapache2-mod-php7.2 -y
#Installation notwendiger Komponenten
sudo apt-get install php7.2-gd php7.2-json php7.2-mysql php7.2-curl php7.2-mbstring -y
#Installation notwendiger Komponenten
sudo apt-get install php7.2-intl php-imagick php7.2-xml php7.2-zip unzip -y
Installation MySQL
Als nächstes Installieren wir MySQL, um sie als produktive Datenbank zu nutzen.
# Installation MySQL
sudo apt-get install mysql-server -y
Jetzt müssen wir noch das Root Passwort setzen.
# Um ein Passwort zu setzen, führe folgende Kommandos aus
sudo mysql
# Nun aktualisiere deinen User mit dem Passwort
# Tausche 'password' mit deinem Passwort, aber behalte die Quotes!
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
# Schließe MySQL
quit
Installation und Konfiguration des SSL Zertifikats mit Certbot
#Zurück ins Home-Verzeichnis
cd ~
#Download Certbot und mache eine ausführbare Datei daraus
wget https://dl.eff.org/certbot-auto && chmod a+x certbot-auto
#Erstelle das letsencrypt Verzeichnis
mkdir /etc/letsencrypt
#Kopiere Certobot ins letsencrypt Verzeichnis
sudo mv certbot-auto /etc/letsencrypt/
#Wechsel ins letsencrypt Verzeichnis
cd /etc/letsencrypt/
#Starte Certbot
./certbot-auto
Hier werden wir nun folgende Punkte abgefragt:
E-Mail Adresse eintragen
Terms of Service -> akzeptieren
Share Mail -> Nein
Deine Domain eintragen unter der Nextcloud erreichbar sein soll (bspw. cloud.b-sol.de)
Redirect -> Ja, damit wird gleich automatisch von http auf https weitergeleitet
Nun müssen wir noch die SSL Konfiguration anpassen. Dafür gehen wir in folgende Datei:
vi /etc/apache2/sites-available/000-default-le-ssl.conf
Anzupassen sind:
DocumentRoot -> Der Pfad zur eurem Webroot und Ort der Nextcloud Installation
Unterhalb der Einstellung ServerName kopiert ihr noch folgende Einstellung für die HTTP Strict Transport Security, einer späteren Sicherheitseinstellung:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
</IfModule>
Danach speichert ihr die Datei ab und schließt diese. Hier ein Beispiel wie meine aussieht:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/nextcloud
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerName cloud.b-sol.de
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
</IfModule>
SSLCertificateFile /etc/letsencrypt/live/cloud.b-sol.de/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/cloud.b-sol.de/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
3. Für den HSTS müssen wir noch das Header Modul im Apache aktivieren:
#Aktivieren des Header Moduls
a2enmod headers
Jetzt müssen wir noch unsere SSL Protokolle und Ciphers dem heutigen Sicherheitsstand anpassen. Dabei geht es wieder um die Einstellung der Protkolle und der Ciphers, wie bereitshierschon einmal mit SSL-Labs beschrieben.
Ihr könnt meine options-ssl-apache.conf 1-zu-1 übernehmen, oder mit euren eigenen gewünschten Einstellungen setzen. Die Einstellungen entsprechen zum heutigen Stand (April 2020) ein A+ Rating und sind der beste Mix zwischen Sicherheit und Client-Kompatibilität.
vi /etc/letsencrypt/options-ssl-apache.conf
# This file contains important security parameters. If you modify this file
# manually, Certbot will be unable to automatically provide future security
# updates. Instead, Certbot will print and log an error message with a path to
# the up-to-date file that you will need to refer to when manually updating
# this file.
SSLEngine on
# Intermediate configuration, tweak to your needs
SSLProtocol all +TLSv1.3 +TLSv1.2
SSLCipherSuite TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder on
SSLCompression on
SSLSessionTickets on
SSLOptions +StrictRequire
# Add vhost name to log entries:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
Nach den Änderungen an der SSL Konfiguration müssen wir den Apache neustarten:
#Neustart des Apache
systemctl restart apache2
Installation Nextcloud
Zur Installation von Nextcloud wechseln wir wieder in unser Home-Verzeichnis, laden Nextcloud herunter, kopieren es in unser Webroot-Verzeichnis und setzen noch den richtigen Besitzer für den Nextcloud Webroot und dem ausgegliedertem Datenverzeichnis.
#Wechsel ins Home-Verzeichnis
cd ~
#Download der Nextcloud Dateien
wget https://download.nextcloud.com/server/releases/nextcloud-18.0.3.zip
#Entpacken des Downloads
unzip nextcloud-18.0.3.zip
#Kopiere die Nextcloud Dateien in das Web-Verzeichnis
cp -r nextcloud /var/www/nextcloud
#Anpassen des Besitzers
chown -R www-data:www-data /var/www/nextcloud
#Anpassen des Besitzers, falls ihr ausgegliedertes Datenverzeichnis nutzt
chown -R www-data:www-data <Pfad eures Datenverzeichnis>
Einrichtung Nextcloud
Nun könnt ihr Eure URL aufrufen, um mit der weiteren Konfiguration fortzufahren. In meinem Fall ist das https://cloud.b-sol.de.

Administrator-Konto anlegen
Datenverzeichnis: Wie vom Hersteller empfohlen glieder ich das Verzeichnis aus und habe ein zusätzlich Volume am Server.
MySQL Einstellungen: Der Datenbankbenutzer muss root-Rechte besitzen, damit die Nextcloud Datenbank angelegt werden kann. Das Passwort haben wir im Schritt "Installation MySQL" ausgewählt. Der Installer erstellt einen extra User und eine Datenbank, welcher nur auf diese Zugriff hat. Im Anschluss wird der root User wieder "vergessen".
Empfohlene Apps installieren: Damit wir den vollen Funktionsumfang des Nextcloud-Hub´s haben, werde ich diese für später bereits aktivieren.
Calendar: Plane Arbeiten und Besprechungen, die auf Deinen Geräten synchronisiert sind.
Community Document Server: Lokales Dokumentenbearbeitungs-Backend, das von der OnlyOffice-Anwendung verwendet wird.
Contacts: Halte die Kontakte zu Deinen Kollegen und Freunde an einem Ort zusammen, ohne deren privaten Daten zu weiterzugeben.
Mail: Einfache E-Mail App mit super integrierter Dateiverwaltung, Adressen und Kalender.
ONLYOFFICE: Gemeinsames Bearbeiten von Office-Dokumenten.
Talk: Chatten, Videoanrufe, Bildschirmfreigaben, Online-Besprechungen und Webkonferenzen - in Ihrem Browser sowie mit mobilen Apps.
Video-Anleitung
Quellen:
https://wiki.mozilla.org/Security/Server_Side_TLS