Borgmatic auf QNAP ¶
Borgmatic (als einfach zu bedienender Wrapper um Borg) betreibt man auf einem QNAP am besten in einem Container - entsprechende Guides stehen auf der Borgmatic-Seite zur Verfügung.
Ist der Backup-Server jedoch dezentral (was er ja sein sollte) und per VPN verbunden, entsteht in Verbindung mit den Einschränkungen bei Netbird eine etwas vertrackte Situation: eine outgoing-Verbindung vom QNAP zum Backup-Server ist nicht möglich und ein Pull- statt Push-Backup geht zwar irgendwie bei Borg, aber wirklich vorgesehen ist es dafür auch nicht.
Container-Setup ¶
Repo-Management ¶
Backup via Jump-Host ¶
Da die Backups mit Borg eh über SSH laufen, ist die Lösung hierfür ein Jump-Host. Da ich über verschiedene VPS (z.B. den "Netbird-Server") verfüge, die direkt über das Internet erreichbar sind und gleichzeitig im Netbird-VPN verbunden sind, nutze ich diesen als Jump-Host und route die Verbindung zum Backup-Server darüber - letztlich ist der beschränkende Faktor beim Backup eh mein lokaler Upload. Als Grundlage für das Setup diente der Guide von milkandhoney - der vollständigen Dokumentation halber mein Vorgehen:
$ groupadd --system sshjump
$ _random_password=$( openssl rand -base64 48 )
$ useradd --comment "SSH Jump Client" --system \
--password "$_random_password" \
--user-group --groups sshjump \
--no-create-home --shell /bin/false jumper
To be fair: ob der Teil mit dem Random-Passwort notwendig war oder nicht, weiß ich nicht - er hat mir nicht wehgetan ;-) Den folgenden Teil des Guides bezüglich dem Jail habe ich weggelassen, da dieser die Auflösung des VPN-DNS verhindert - ob es da eine elegantere Lösung gibt, ist eine tiefere Betrachtung sicherlich noch wert.
Den public key für den Jump-Host habe ich in der /etc/ssh/authorized_keys/jumper hinterlegt. SSH-Hardening mache ich bereits beim initialen Ansible-Setup des Systems, sodass ich nur den Match-Teil für die sshjump-Gruppe in der /etc/ssh/sshd_config hinterlegt habe:
# --------------------------------------------------
# Restrictions for Client just junping through here
# --------------------------------------------------
Match Group sshjump
# Allow SSH agent forwarding
AllowAgentForwarding yes
# Allow StreamLocal (Unix-domain socket) forwarding
# Needed for SSH connections multiplexing from the client to the jump host
AllowStreamLocalForwarding yes
# TCP port forwarding is necessary for the SSH jump host functionality
AllowTcpForwarding yes
# Authorized keys file outside of the user's home directory and chroot
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
# Don't allow file system access
# ChrootDirectory /var/jail # auskommentiert, da kein jail
# Don't allow ports forwarded back to the client, being accessible by other
# clients
# GatewayPorts no
# Don't allow ports forwarded back to the client at all
PermitListen none
# Don't allow clients to access any terminals
PermitTTY no
# Don't allow clients to create (VPN) tunnels
# PermitTunnel no
# Don't allow user-defined environment files on the jump host
# PermitUserEnvironment no
# Don't allow execution of user-defined startup files on the jump host.
PermitUserRC no
# Remove any existing Unix-domain socket file for local or remote port
# forwarding before creating a new one. The default is no.
StreamLocalBindUnlink yes
# Don't allow X11 forwarding
# X11Forwarding no
Nach einem Neustart des SSH-Servers sudo systemctl restart sshd muss nur noch die <Container-Basedir>/borgmatic/ssh (im Container als /root/.ssh gemounted) angepasst werden:
# On top of the file - This is how we connect to our jump host
Host jump.example.net
User jumper
ForwardAgent yes
# At the end of the file - Use the jump host, for all our netbird hosts,
# except for the jump host itself.
Match host !jump.example.net,*.your-netbird.url
ProxyJump jump.example.net
Auf diesem Weg kann auch auf dem QNAP-Host die "ganz normale" Netbird-URL als Server-URL des Backup-Servers genutzt werden.
Der erste run sollte manuell ausgeführt werden - oder man muss noch auf seine known_hosts aufpassen.
Kommentare
Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.
Noch keine Kommentare. Seien Sie der Erste, der kommentiert!