Ugreen DXP2800 als SSL Webserver
Ugreen DXP2800 als SSL Webserver
Vorkonfiguration auf dem DXP2800 NAS
LAN als virtuelle Brücke konfigurieren
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
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 SFTP (SSH) Dienst.
In diesem Beispiel wird davon ausgegangen, dass das Ugreen 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 Speicher für den Apache2 Webserver, in Verbindung mit PHP und MySQL.
In diesem Beispiel wird davon ausgegangen, dass das Ugreen 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 Speicher für den Apache2 Webserver, in Verbindung mit PHP und MySQL.
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:
Zunächst sollten die folgenden Punkte auf dem DXP2800 abgearbeitet werden:
- Auf DXP2800 die App "Virtuelle Maschine" installieren.
- Ubuntu 24.04.2 Live Server Edition ISO Image downloaden und auf DXP2800 kopieren.
- App "Virtuelle Maschine" öffnen und eine manuelle Einrichtung über die ISO Datei auswählen.
- Installation von Ubuntu auf Volume2 in VM
LAN als virtuelle Brücke konfigurieren
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
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
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, 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 cifs-utils
sudo a2enmod ssl
sudo a2enmod rewrite
sudo a2enmod expires
sudo a2enmod headers
sudo systemctl stop apache2
Als ersten Schritt legen wir zunächst den globalen Server Namen in der Apache Konfiguration an, indem wir die Zeile "ServerName server.domain.com" an die oberste Stelle der "apache2.conf" Datei setzen:
sudo nano /etc/apache2/apache2.conf
ServerName server.domain.com
Nun erfolgt noch die Konfiguration des Virtuellen Hosts für Port 80 (http) und Port 443 (https):
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>
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>
# Uncomment the following directory block for a password protected Log-Report.
# Don't forget to generate a ".htpasswd" file at your /home directory!
#<Directory /var/www/html/report/>
# AuthType Basic
# AuthName "Restriced Content"
# AuthUserFile /home/.htpasswd
# Require valid-user
#</Directory>
</VirtualHost>
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>
# Uncomment the following directory block for a password protected Log-Report.
# Don't forget to generate a ".htpasswd" file at your /home directory!
#<Directory /var/www/html/report/>
# AuthType Basic
# AuthName "Restriced Content"
# AuthUserFile /home/.htpasswd
# Require valid-user
#</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
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
www-data:noreply@domain.com:smtp.strato.de:587
localusername:noreply@domain.com:smtp.strato.de:587
SFTP Zugang zum Webserver einrichten
Um künftig Daten auf dem Webserver zu aktualisieren, muss noch der entsprechende SFTP Dienst eingerichtet werden. Die Datenverwaltung kann dann mit jedem beliebigen SFTP Client (z. B. FileZilla) erledigt werden. Für die vollständige Installation wird nur das OpenSSH Paket benötig und es muss ein spezieller SFTP-Benutzer "sftp_user", mit eingeschränkter Zugriffsberechtigung, angelegt werden:
sudo apt install ssh
sudo adduser sftp_user
sudo usermod -a -G www-data sftp_user
sudo usermod -s /usr/sbin/nologin sftp_user
sudo nano /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config
Match User sftp_user
ChrootDirectory /var/www
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
ChrootDirectory /var/www
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
sudo systemctl restart ssh
Log Analyse
Für den richtigen Durchblick auf dem Webserver, empfiehlt es sich noch einen guten Log-Analyzer zu installieren. Sehr hervorzuheben ist hier "goaccess". Die Einrichtung und Installation ist sehr schnell erledigt:
sudo apt install goaccess
sudo goaccess access.log -c
Der Log-Report wird im öffentlichen Verzeichnis des Webservers abgelegt und kann dann unter der URL server.domain.com/report/ abgerufen werden. Sollte noch kein "report" Verzeichnis auf dem Webserver bestehen, muss dieses zunächst angelegt werden:
Der Log-Report wird im öffentlichen Verzeichnis des Webservers abgelegt und kann dann unter der URL server.domain.com/report/ abgerufen werden. Sollte noch kein "report" Verzeichnis auf dem Webserver bestehen, muss dieses zunächst angelegt werden:
sudo mkdir /var/www/html/report
sudo chmod 775 /var/www/html/report
sudo chown www-data:www-data /var/www/html/report
Zum erzeugen eines aktuellen Log-Reports, der alle Apache access.log Dateien beinhaltet, werden nur drei Befehlsaufrufe benötigt, die wir aber der Einfachheit halber in ein ausführbares Bash Script, mit dem Namen "update-report.sh" verpacken:
sudo nano /usr/local/sbin/update-report.sh
Zum erzeugen eines aktuellen Log-Reports, der alle Apache access.log Dateien beinhaltet, werden nur drei Befehlsaufrufe benötigt, die wir aber der Einfachheit halber in ein ausführbares Bash Script, mit dem Namen "update-report.sh" verpacken:
sudo nano /usr/local/sbin/update-report.sh
#!/usr/bin/bash
/usr/bin/zcat -f /var/log/apache2/access.log* | /usr/bin/goaccess - -o /var/www/html/report/index.html --log-format=COMBINED
/usr/bin/chown www-data:www-data /var/www/html/report/index.html
/usr/bin/chmod 775 /var/www/html/report/index.html
/usr/bin/zcat -f /var/log/apache2/access.log* | /usr/bin/goaccess - -o /var/www/html/report/index.html --log-format=COMBINED
/usr/bin/chown www-data:www-data /var/www/html/report/index.html
/usr/bin/chmod 775 /var/www/html/report/index.html
Will man den Report nun künftig manuell aktualisieren, dann genügt ein einfaches "sudo /usr/local/sbin/update-report.sh" dazu.
Wenn man möchte, dann kann man den Report aber auch vollautomatisch durch einen Cronjob, nach einem bestimmten Zeitintervall aktualisieren lassen. In diesem Beispiel wird das Script täglich um 00:00 Uhr ausgeführt.
sudo crontab -e
0 0 * * * /usr/local/sbin/update-report.sh
Nun muss nur noch überprüft werden, ob der Benutzer "root" auch die Berechtigung für einen Cronjob hat. Erlaubte Benutzer werden in der Datei "/etc/cron.allow" festgelegt. Sollte die Datei noch nicht existieren, dann muss sie zunächst neu angelegt werden. Innerhalb der Datei muss, in einer eigenen Zeile, der Name "root" aufgeführt sein:
sudo nano /etc/cron.allow
root
Tipp! Wenn man die Paketquellen von goaccess hinzufügt, bekommt man eine aktuellere Version als die mitgelieferte aus dem Ubuntu Repository.
Optional: Log-Report mit Passwortschutz
Für einen eingeschränkten Zugriff auf den Log-Report, empfiehlt es sich zusätzlich noch den "report" Ordner mit einem sicheren Passwort zu schützen. Wenn die "default-ssl-conf" wie weiter oben abgebildet eingegeben wurde, dann genügt es den letzten Verzeichnis-Block (Directory) zu entkommentieren:
sudo nano /etc/apache2/sites-available/default-ssl.conf
Zusätzlich muss noch eine gültige ".htpasswd" Datei, unter dem Verzeichnis "/home/" angelegt werden:
sudo htpasswd -c /home/.htpasswd myusername
sudo chown www-data:www-data /home/.htpasswd
sudo chmod 775 /home/.htpasswd
Optional: Content Security Policy für Log-Report
Sollte die über dem Log-Report übergeordnete Website oder App eine Content Security Policy (CSP) aufweisen, dann muss im Verzeichnis "report" noch eine ".htaccess" Datei, mit einer eigenen Content Security Policy angelegt werden:
sudo nano /var/www/html/report/.htaccess
Header set Content-Security-Policy "default-src 'self' 'unsafe-inline'; \
media-src 'self' blob:; \
script-src-elem 'self' 'unsafe-inline'; \
script-src 'self' 'unsafe-inline' 'unsafe-eval'; \
style-src 'self' 'unsafe-inline'; \
font-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://fonts.gstatic.com data:; \
connect-src 'self'; \
worker-src 'self' blob:; \
frame-src 'self'; \
img-src 'self' data:"
media-src 'self' blob:; \
script-src-elem 'self' 'unsafe-inline'; \
script-src 'self' 'unsafe-inline' 'unsafe-eval'; \
style-src 'self' 'unsafe-inline'; \
font-src 'self' 'unsafe-inline' https://fonts.googleapis.com https://fonts.gstatic.com data:; \
connect-src 'self'; \
worker-src 'self' blob:; \
frame-src 'self'; \
img-src 'self' data:"
sudo chown www-data:www-data /var/www/html/report/.htaccess
sudo chmod 775 /var/www/html/report/.htaccess
sudo chmod 775 /var/www/html/report/.htaccess
Abschließend starten wird den Server einmal neu, damit auch alle Zeitzonen und Änderungen korrekt eingestellt sind:
sudo reboot
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 KonfigurationDynDNS 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
Für die Erreichbarkeit des virtuellen Ubuntu Servers von außen, müssen noch die üblichen IPv4 Ports für den http, https und sftp Dienst im Router geöffnet werden:
- Portfreigabe für virtuellen Ubuntu Server auf Port 80 (HTTP) einrichten.
- Portfreigabe für virtuellen Ubuntu Server auf Port 443 (HTTPS) einrichten.
- Portfreigabe für virtuellen Ubuntu Server auf Port 22 (SFTP) einrichten.
Zertifikat für DXP2800
Zertifikat für DXP2800Ein selbstsigniertes Zertifikat für server.domain.com erstellen - Gute Idee?

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 kopiert werden und dann als Zertifikat für alle anderen Dienste genutzt 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
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