Ugreen DXP2800 als SSL Webserver

Ugreen DXP2800 als SSL Webserver

Ugreen DXP2800 als SSL Webserver
Vorkonfiguration auf dem DXP2800 NAS

Einstellungen für die Ubuntu VM

VM-Name: UbuntuServer
Systemtyp: Linux
CPU(Kern): 2
Arbeitsspeicher (GB): 4
Image / Image 1: Ubuntu Server
Festplatte (GB): Festplatte1 virtio 20 GB
Netzwerk: Netzwerk 1 virtio vnet-bridge(0)
USB Kontroller: Inaktiv
USB Geräte: keine
Grafikkarte: cirrus
Systemstartmethode: Bios
Automatischer Start: Deaktivieren
Tastatursprache: de
Startort: Festplatte 1
Wenn man diese kleine Dokumentation bewerkstelligt hat, erhält man einen vollfunktionsfähigen Webserver, abgesichert mit SSL Zertifikat (https) und bequem erreichbar über den WebDAV Dienst des Ugreen DXP2800.

In diesem Beispiel wird davon ausgegangen, dass das DXP2800 mit mindestens drei Festplatten bestückt ist. Die Sata SSDs in Bay 1 und 2 laufen im Raid 1 Verbund (Volume 1), als reines Backup-System für Volume 2. Eine zusätzliche NVMe Festplatte (Volume 2) dient als schneller Webspeicher für den WebDAV Dienst und wird auch als schneller Speicher für den Apache2 Webserver, in Verbindung mit PHP und MySQL genutzt.

Wird zusätzlich noch ein weiteres NVMe Laufwerk verwendet, dann können auch die Daten auf Volume 2 im Raid 1 Verbund laufen und man genießt etwas mehr Ausfallsicherheit.

Für die absolute Datensicherheit könnte man, an einem anderen Standort, ein zweites DXP2800 einrichten und beide Geräte via Remote Sync (rSync) verbinden. 

Eine DynDNS Domain wird vorausgesetzt und sollte bereits registriert und einsatzbereit sein. Als Domainanbieter dient in diesem Beispiel die Strato GmbH. Wer mit Linux etwas bewandt ist, für den wird sich der Zeitaufwand für die Einrichtung auf etwas weniger als eine Stunde beschränken.

Zunächst sollten die folgenden Punkte auf dem DXP2800 abgearbeitet werden:

  1. Freigegebenes Verzeichnis "WWW" auf Volume 2 anlegen.
  2. Benutzer "WWW-User", mit Schreib und Leseberechtigung für Verzeichnis "WWW" anlegen.
  3. Auf DXP2800 die App "Virtuelle Maschine" installieren.
  4. Ubuntu 24.04.2 Live Server Edition ISO Image downloaden und auf DXP2800 kopieren.
  5. App "Virtuelle Maschine" öffnen und eine manuelle Einrichtung über die ISO Datei auswählen.
  1. Installation von Ubuntu auf Volume2 in VM



LAN als virtuelle Brücke konfigurieren


Ugreen LAN - Virtuelle Brücke
In der Standardkonfiguration kann die Virtuelle Maschine auf dem DXP2800 nicht als Server betrieben werden, da im DXP2800 keine zweite Netzwerkkarte verbaut wurde und der Brückenmodus für die vorhandene Netzwerkkarte nicht aktiviert wurde. Der Linux Bridge- / Brücken- Modus kann unter den folgenden Einstellungen geändert werden:

In der Systemsteuerung / Netzwerk / Netzwerkverbindungen, unter Netzwerkbrücke, den Modus auf "Virtuelle Brücke" umstellen.



Tipp! Ein Schnappschuss anlegen

Ugreen Virtuelle Maschine - Schnappschuss
Wenn alle auf dieser Seite aufgeführten Arbeiten abgeschlossen sind und der Server seinen Dienst aufgenommen hat, dann sollte man in der Virtuellen Maschine vom aktuellen Zustand unbedingt einen Schnappschuss anlegen. Sollte künftig mal etwas schief laufen, dann kann man mit nur einem Mausklick den Server wiederherstellen und mühelos wieder in Betrieb nehmen.

Konfiguration von Ubuntu und Apache

Konfiguration von Ubuntu und Apache
Canonical - Ubuntu
Nachdem Ubuntu installiert wurde und der erste Prompt in der Bash erscheint, gibt man nun die folgenden Befehle ein, für eine vollständige Installation von Apache2, PHP, MySQL, Let's Encrypt, Samba Client, Net-Tools und CIFS-Utils: 

sudo apt list --upgradeable
sudo apt upgrade
sudo apt update
sudo apt install net-tools
sudo apt install apache2
sudo apt install php
sudo apt install php-gd
sudo apt install php-zip
sudo apt install php-xml
sudo apt install php-curl
sudo apt install php-mbstring
sudo apt install php
sudo apt install mysql-server
sudo apt install smbclient
sudo apt install cifs-utils
sudo a2enmod ssl
sudo a2enmod rewrite
sudo a2enmod expires
sudo a2enmod headers
sudo systemctl stop apache2

sudo nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
  ServerName server.domain.com
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html
  RewriteEngine on
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
  Redirect / https://server.domain.com/

</VirtualHost>


sudo nano /etc/apache2/sites-available/default-ssl.conf
<Virtual Host *:443>
  ServerName server.domain.com
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/html
  RewriteEngine on
  <Directory />
    Options FollowSymLinks
    AllowOverride none
  </Directory>
  <Directory /var/www/html/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
    Order allow,deny
    allow from all
  </Directory>
  SSLEngine on
  SSLCertificateFile    /etc/letsencrypt/live/server.domain.com/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/server.domain.com/privkey.pem
  <FilesMatch "\.(?:cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
  </FilesMatch>
  <Directory /usr/lib/cgi-bin>
    SSLOptions +StdEnvVars
  </Directory>
</VirtualHost>


sudo apt install letsencrypt
sudo systemctl status certbot.timer
sudo certbot certonly --standalone --agree-tos --preferred-challenges http -d server.domain.com
sudo a2ensite default-ssl.conf
sudo systemctl start apache2



Einstellungen für die Zeitzone

Für eine korrekte Zeitangabe auf dem Server, muss noch die richtige Zeitzone eingestellt werden:

sudo timedatectl set-timezone Europe/Berlin
sudo nano /etc/php/8.3/apache2/php.ini

In der Datei "php.ini", die folgende Anweisung eintragen:
date.timezone = Europe/Berlin




E-Mail Einstellungen

Damit der Server eigenständig E-Mails versenden kann, muss entweder ein vollständiger E-Mail Server eingerichtet werden, oder man nutzt dazu einfach einen vorhandenen, externen Anbieter (Strato / Google / GMX usw).

Wir beschränken uns hier der Einfachheit halber auf den externen Anbieter, Strato: 

sudo apt install ssmtp
sudo apt install mailutils

sudo nano /etc/ssmtp/ssmtp.conf
root=noreply@domain.com
mailhub=smtp.strato.de:587
hostname=domain.com
FromLineOverride=YES
UseTLS=YES
UseSTARTTLS=YES
AuthMethod=LOGIN
AuthUser=noreply@domain.com
AuthPass=PASSWORT


sudo nano /etc/ssmtp/revaliases
root:noreply@domain.com:smtp.strato.de:587
www-data:noreply@domain.com:smtp.strato.de:587
localusername:noreply@domain.com:smtp.strato.de:587





Mount Share Folder "WWW" von DXP2800 NAS / Volume 2

Der auf dem DXP2800 geteilte Ordner "WWW", muss noch in der Virtuellen Maschine sichtbar gemacht werden, damit das Ubuntu System darauf zugreifen kann. Hierzu melden wir das Verzeichnis mittels "Mount" Befehl am System an. Mit den folgenden zwei Befehlen wird der "WWW" Ordner unter "/mnt/nas_share" freigegeben: 

sudo mkdir /mnt/nas_share
sudo mount -t cifs -o username=WWW-User,password=PASSWORT //DXP2800/WWW /mnt/nas_share



Update-Script

Als nächstes erzeugen wir ein kleines Bash-Script, womit wir künftig alle Inhalte aus dem "WWW" Ordner, in das öffentliche Verzeichnis des Apache2 Server kopieren und dabei auch die notwendigen Zugriffsrechte erteilen: 

sudo touch /home/www-update.sh
sudo nano /home/www-update.sh
#!/bin/bash
rm /var/www/html/*
cp -R /mnt/nas_share/. /var/www/html/
chown -R www-data:www-data /var/www/html/
chmod -R 775 /var/www/html/



sudo chmod +x /home/www-update.sh



Webinhalte auf den Webserver kopieren

Nachdem neue Webinhalte im "WWW" Verzeichnis des DXP2800 abgelegt wurden, kann das Bash-Script mit folgenden Befehl ausgeführt werden:

sudo /home/www-update.sh

Möchte man den "WWW" Ordner für administrative Zwecke aus dem Internet erreichbar machen, dann kann man das Verzeichnis zusätzlich noch im WebDAV Dienst des DXP2800 für die entsprechenden Benutzer freigeben.



Webinhalte mit dem Server synchronisieren

Wenn man möchte, dann kann man auch mittels rsync Befehl das freigegebene Verzeichnis "/mnt/nas_share", zum Verzeichnis "/var/www/html/" synchronisieren lassen. Alle Inhalte die dann im WWW Ordner des DXP2800 abgelegt werden, stehen dann auch automatisch im öffentlichen Verzeichnis des Apache Servers zur Verfügung. Dateien die auf dem Server neuerem Datums sind, bleiben erhalten (Option -u):

Am besten erzeugen wir hierzu auch wieder ein kleines Bash-Script, damit der Aufruf künftig einfacher und schneller geht:

sudo touch /home/www-sync.sh
sudo nano /home/www-sync.sh
#!/bin/bash
rsync -rtuog --chown=www-data:www-data --chmod=775 /mnt/nas_share/ /var/www/html



sudo chmod +x /home/www-sync.sh

Zum Starten der Synchronisierung genügt nun der Aufruf des Scriptes:
sudo /home/www-sync.sh

Optional kann man dazu auch noch die "inotify-tools" installieren, womit man dann den gesamten Ordner automatisch überwachen kann:

sudo apt-get install inotify-tools

while inotifywait -r -e modify,create,delete,move /mnt/nas_share; do
    rsync -rtuog --chown=www-data:www-data --chmod=775 /mnt/nas_share/ /var/www/html
done
  



Abschließend starten wird den Server einmal neu, damit auch alle Zeitzonen korrekt eingestellt sind:

sudo reboot

Konfiguration der Subdomain (Strato)

Konfiguration der Subdomain (Strato)
Autodiscovery: Aktiviert
NS Record: Strato Nameserver
A Record: Inaktiv
AAAA Record: Inaktiv
MX Record: Inaktiv
CNAME Record: Inaktiv
TXT- und CNAME Records:

Strato DMARC: Keine Strato DMARC Regeln
SPF: Standard Strato Mailserver

Typ: TXT
Präfix: _dmarc
Wert: v=DMARC1; p=reject; pct=100

Typ: TXT
Präfix: domain-dkim.domain-dkim
Wert: ********

Typ: TXT
Präfix: domain-dkim.domain-dkim
Wert: v=DKIM1;t=s;p=********

SRV Record: Deaktiviert
Dynamic DNS: DynDNS aktiviert

Router Konfiguration

Router Konfiguration
DynDNS Einstellungen

Router - DynDNS Einstellungen
Eine registrierte und funktionierende DynDNS Domain wird bereits vorausgesetzt. Hier aber noch mal kurz das passende Schema für die automatische Aktualisierung der IP Adresse (Strato):

Update-URL: https://<username>:<passwd>@dyndns.strato.com/nic/update?hostname=<domain>&myip=<ipaddr>,<ip6addr>
Domainname: server.domain.com
Benutzername: ****
Passwort: ****



Portfreigaben

Router - Portfreigabe
Für die Erreichbarkeit des virtuellen Ubuntu Servers von außen, müssen noch die üblichen IPv4 Ports für den http und https Dienst im Router geöffnet werden:

  1. Portfreigabe für virtuellen Ubuntu Server auf Port 80 einrichten.
  2. Portfreigabe für virtuellen Ubuntu Server auf Port 443 einrichten.

Sollte zusätzlich noch der WebDAV Dienst vom DXP2800 genutzt werden, dann muss noch der entsprechende Port für IPv4 und IPv6 freigegeben werden:

  1. Portfreigabe für WebDAV Dienst auf Port 5006 einrichten.

Zertifikat für DXP2800

Zertifikat für DXP2800
Ein selbstsigniertes Zertifikat für server.domain.com erstellen - Gute Idee?

Let's Encrypt - Zertifikat
Mit der unten stehenden Beschreibung kann ein selbstsigniertes Zertifikat erstellt werden und auf dem DXP2800 zum Beispiel für den WebDAV und FTPS Dienst genutzt werden, wenn man nicht das beiliegende Ugreen Zertifikat, oder das soeben frisch installierte Let's Encrypt Zertifikat nutzen möchte. Es wird aber ausdrücklich empfohlen, auch für alle Ugreen Dienste ein Let's Encrypt Zertifikat zu nutzen! Das Let's Encrypt Zertifikat befindet sich im Verzeichnis "/etc/letsencrypt/live/server.domain.com/", unter den Dateinamen "fullchain.pem" und "privkey.pem". Die Dateien können problemlos aus der virtuellen Umgebung, auf das DXP2800, in das "WWW" Verzeichnis, mittels "cp" Befehl kopiert werden und dann als Zertifikat für alle anderen Dienste genutzt werden.

  1. sudo cp /etc/letsencrypt/live/server.domain.com/fullchain.pem /var/www/html/
  2. sudo cp /etc/letsencrypt/live/server.domain.com/privkey.pem /var/www/html/

Achtung! Der private Schlüssel und das Zertifikat befinden sich nach dem Kopiervorgang im öffentlichen "WWW" Verzeichnis des Servers und sollten sofort auf dem DXP2800 in ein sicheres Verzeichnis verschoben werden.



Keine gute Idee - Ein selbstsigniertes Zertifikat erstellen

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout myRoot.key -out myRoot.crt

Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:Hessen
Locality Name (eg, city) []:Frankfurt
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompanyName
Organizational Unit Name (eg, section) []:.
Common Name (e.g. server FQDN or YOUR name) []:server.domain.com
Email Address []:info@domain.com