Administration / Webmaster, German, Linux, QNAP, Wordpress

Backup vom eigenen Server auf einem QNAP NAS zu Hause über OpenVPN am Beispiel WordPress

Der eigene Backupserver mit QNAP

Wir haben also einen Rootserver oder VServer und wollen ein Backup nach zuhause einspielen. Zuerst sollte man sich Gedanken machen, ob die Bandbreite dafür ausreicht. Ich habe eine Leitung mit 1000 MBit Downstream und 50 MBit Upstream. Das sollte auch für größere Belange voll ausreichen, da im Wesentlichen der Downstream zählt. Der zu versorgende VServer hat (leider) nur 100 MBit Downstream und ist damit also voll ausgereizt.

Nun ist zu überlegen, wie man vorgehen will, denn es gibt mehrere Möglichkeiten. Ich persönlich habe mich dafür entschieden von meinem QNAP NAS einen OpenVPN Server aufspannen zu lassen, auf den sich dann der Server verbinden kann. Den Speicher habe ich als NFSv4 freigegeben, sodass der Server hier mounten kann. Aus Sicherheitsgründen sollte man beachten, dass für diesen NAS-Zugang ein eigener Account und ein eigener Freigabeordner erstellt wird. Schließlich gibt es für Backupzwecke keinen guten Grund, warum diese Daten einfach verfügbar sein sollten.

Warnung: Ein NFSv4 sollte niemals ins Internet hinein freigegeben werden, da es bei diesem Protokoll arge Sicherheitsbedenken gibt. Schließlich ist NFSv4 für interne Netzwerke konzipiert und hält hohen Sicherheitsanforderungen nicht stand. Das Tunneln über ein VPN ist daher das Mittel der Wahl.

Bedenkt, dass ihr für folgende Schritte in der Regel eine statische IPv4-Adresse benötigt. Fragt ggf. euren Internetprovider. Bei Unitymedia/Vodafone kann man sich diese auf Anfrage z.B. einfach einrichten lassen, wenn man das Komfort-Paket hat.

OpenVPN auf QNAP einrichten

Wir installieren zuerst die App “QVPN Service” auf unserem QNAP NAS. Dieses konfigurieren wir wie auf dem folgenden Screenshot gezeigt. Wir haben hier als DNS-Server die zensurfreie und offene Variante vom Digitalcourage e.V. (IP 46.182.19.48). Man beachte außerdem, dass die Checkbox “Nutzen Sie diese Verbindung als Standard-Gateway für externe Geräte” deaktiviert ist. Dies ist erforderlich, damit der Server nicht jeglichen Traffic über das QNAP NAS leitet, was wir bei einem Server idr. nicht haben wollen. Stattdessen werden wie später auf dem Server konfigurieren, dass IP-Adressen des lokalen Netzwerks an eben dieses weitergeleitet werden. Alle anderen Einstellungen können so belassen werden. Wir laden uns noch die Konfigurationsdatei herunter (QVPN v1.1 or newer), weil diese diese später für den Server benötigen.

Nun legen wir einen neuen Freigabeordner an. Dazu gehen wir unter SystemsteuerungFreigabeordner auf ErstellenFreigabeordner. Wir geben dem Ordner z.B. den Ordnernamen ServerBackup. Unter Zugangsrechte hat aktuell nur der Benutzer admin Zugriff auf den Freigabeordner. Falls gewünscht, können hier noch weiteren Nutzern der Zugang gewährt werden. Wir werden gleich noch einen separaten Nutzer für unsere Backupzwecke erstellen.

Nun wäre es sinnvoll einen neuen Benutzer mit beschränkten Rechten einzurichten. Für den Fall, dass der Server kompromittiert wird, wäre es sicherlich am Besten den Schaden zu minimieren und nicht das gesamte NAS freizugeben. Ganz nach dem Motto: So wenig Rechte wie möglich, so viele Rechte wie nötig. Gehen wir also unter Benutzer auf ErstellenEinen Benutzer erstellen. Nennen wir den Benutzer beispielsweise serverbackup und vergeben ein Passwort. Als Benutzergruppe wählen wir everyone. Unter Freigabeordnerrecht setzen wir alle Freigabeordner auf Deny und den Ordner ServerBackup auf RW, damit wir Lese- und Schreibrechte erhalten. Erstellen wir nun den Nutzer.

Sofern das noch nicht passiert ist, müssen wir in der Systemsteuerung den NFS-v4-Dienst aktivieren:

Einrichtung auf dem Server

Das OpenVPN einrichten

Wir müssen zunächst OpenVPN installieren:

sudo apt-get install openvpn

Nun konfigurieren wir das VPN. Dazu legen wir zunächst die Datei /etc/openvpn/passwords.conf an, in der wir in der ersten Zeile unseren Benutzernamen und in der zweiten Zeile unser Passwort ablegen:

serverbackup
unserPasswort123

Nun nehmen wir die zuvor als vom QNAP NAS gespeicherte Konfigurationsdatei für das VPN und legen diese als /etc/openvpn/client.conf ab. Wir müssen diese noch so anpassen, dass Benutzername und Passwort aus unserer Datei ausgelesen werden. Ursprünglich ist es so vorgesehen, dass beim Herstellen der VPN-Verbindung per Prompt nach Benutzername und Passwort gefragt werden. Da wir eine automatisierte Lösung benötigen, müssen wir den Benutzernamen und das Passwort natürlich hinterlegen. Das haben wir bereits getan. Also modifizieren wir die client.conf an der Stelle auth-user-pass wie folgt:

auth-user-pass /etc/openvpn/passwords.conf

Die Datei client.conf sollte nun in etwa wie folgt aussehen:

client
dev tun
script-security 3
remote 42.42.42.42 1194
resolv-retry infinite
nobind
auth-nocache
auth-user-pass /etc/openvpn/passwords.conf
remote-cert-tls server
reneg-sec 0
cipher AES-256-CBC
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-256-$
float
proto udp
explicit-exit-notify 1
<ca>
...
</ca>

Eine sinnvolle Methode die VPN Verbindung herzustellen, wäre natürlich beim Systemstart. Daher legen wir nun die Datei /etc/init.d/iproute.sh
für den init-Prozess an:

!/bin/sh
service openvpn@client start
sleep 30s
ip route add 192.168.178/24 dev tun0
sleep 5s
mount -a

Hier wird erst die VPN-Verbindung hergestellt. Zur Sicherheit warten wir 30 Sekunden. Die interne IP-Adresse meines NAS lautet 192.168.178.46. Daher legen wir das Netz 192.168.178.* auf das VPN um, also auf tun0. Wir warten noch mal 5 Sekunden. Dann mounten wir alle Laufwerke, was insbesondere unser NFSv4 einschließt. Den entsprechenden Eintrag für die fstab besprechen wir gleich.

Wir müssen das Skript noch für den Systemstart verlinken. Dies ist für Runlevel 3 (Multi-User Mode mit Netzwerk) und Runlevel 5 (mit GUI) erforderlich, auch wenn für Server im Regelfall Runlevel 3 reichen würde:

ln -s ../init.d/iproute.d /etc/rc3.d/S07iproute.sh
ln -s ../init.d/iproute.d /etc/rc5.d/S07iproute.sh

Leider ist es aus meiner persönlichen Erfahrung so, dass die VPN-Verbindung auch mal abbrechen kann und dann nicht wieder erneut aufgebaut wird. Ich habe mich deshalb dafür entschlossen, das Skript zusätzlich per Cronjob auszuführen und zwar jeweils wenige Minuten bevor das Backup erfolgen soll. Wenn wir das Backup z.B. um kurz nach 3:00 Uhr ausführen möchten, können wir die Cronjobdatei /etc/cron.d/openvpn z.B. wie folgt definieren:

0 3 * * * root /etc/init.d/iproute.sh

NFSv4 Filesystem mounten

Um die nötigen Voraussetzungen zu schaffen, müssen wir zuerst nfs-common installieren:

sudo apt-get install nfs-common

Nun konfigurieren wir /etc/fstab:

192.168.178.46:/ServerBackup /mnt/RemoteServerBackup nfs rw 0 0

Hierbei ist 192.168.178.46 die lokale IP unseres NAS und ServerBackup der Name unseres Freigabeordners, den wir für das Backup konfiguriert haben. Wir mounten das Ganze nach /mnt/RemoveServerBackup und zwar als nfs-Dateisystem mit Lese- und Schreibrechten (rw).

Nicht vergessen, den Mountpoint auch zu erstellen:

mkdir /mnt/RemoteServerBackup

WordPress Backup einrichten

Wir installieren das Plugin BackWPup und erstellen einen neuen Auftrag. Hier wählen wir unter Allgemein “Backup in Verzeichnis” und unter Planen stellen wir z.B. täglich um 3:25 Uhr ein. Unter “Ziel: Verzeichnis” habe ich für meinen Blog z.B. /mnt/RemoteServerBackup/the_digital_native/wordpress/ eingestellt. Da ich noch weitere Backups auf diese Weise erstelle, macht es Sinn einen entsprechenden Unterordner zu wählen.

Konfiguration und Backup testen

Um das Ganze zu testen, stellen wir auf dem Server erst mal testweise die VPN-Verbindung her und mounten das Dateisystem:

service openvpn@client start
ip route add 192.168.178/24 dev tun0
mount -a

Wir gehen nun unter BackWPup in die Liste der Aufträge und wählen für den eben neu erstellten Auftrag Jetzt starten aus. Der Auftrag sollte nun durchlaufen. Nach Abschluss des Auftrags prüfe einfach, ob das entsprechende Backup auf deinem NAS liegt.

So, wir sind fertig! Wir können nun über VPN automatisiert ein WordPress Backup auf unserem QNAP NAS erstellen.