Vor einiger Zeit musste ich mehrfach hintereinander meine Systemlandschaft neu ausetzen.

Jedes einzelne Mal habe ich mir dabei vorgenommen:

"Gleich wenn ich fertig bin, kümmere ich mich um die Backups!"

Meist habe ich jedoch stattdessen anschließend wieder neu aufgesetzt, weil meine Hardwareplattform (Odroid C1) schon wieder die Daten auf den USB-Sticks zerstört hatte.

 

Ich habe mir während der Recherche verschiedene Backuptools angeschaut und mit dem verglichen, was ich nutzen wollte und was KO-Kriterien für den Einsatz waren.

Meine Anforderungen

  • Client-/Serverarchitektur
    • zentralisiertes Backup zur einfachen Administration
    • Clients für verschiedene Betriebssysteme (Windows und Linux ist zwingend, Android, IOS wäre schön)
    • Server unter Linux lauffähig
  • Web-basierte Verwaltung

 

Nach einigen Abwägungen kamen BURP und UrBackup in den Test. Dort gefiel mir die Optik und das Handling von BURP einfach besser.

Installation

apt-get update
apt-get install burp

An den Einstellungen in /etc/burp/burp-server.conf habe ich nur die SSL-Pfade angepasst.

ssl_key = /etc/burp/ssl_cert_backup.key
ssl_cert = /etc/burp/ssl_cert_backup.crt
ssl_cert_ca = /etc/burp/CA/CA_ca.mydomain.crt
ca_name = ca.mydomain
ca_server_name = ca.mydomain

Der Speicherort ist auf eine nach /var/spool/burp eingebundene USB-Festplatte ausgelagert.

Zum einfachen Hinzufügen von Clients habe ich mir eine kleine Bash-Datei geschrieben, die neue Clients anlegt (Zertifikate generiert) und die Client-Konfiguration auf den Geräte gleich anpasst.

nano /root/burp-add-client.sh

#!/bin/bash
SERVER="backup.mydomain"
HOSTNAME=$1
PASSWORD=`< /dev/urandom tr -dc a-zA-Z-0-9 | head -c 16 ; `
CANAME="ca.mydomain"
CACERT="CA_ca.mydomain.crt"

if [ $2 = "sent" ]; then
        echo "use existing certificates";
else
        # create client certs
        burp_ca --name ${HOSTNAME} --ca ${CANAME} --key --request --sign --batch
fi

scp /etc/burp/CA/${HOSTNAME}.key root@${HOSTNAME}:/etc/burp/ssl_cert_${HOSTNAME}.key
scp /etc/burp/CA/${HOSTNAME}.crt root@${HOSTNAME}:/etc/burp/ssl_cert_${HOSTNAME}.crt
scp /etc/burp/CA/${CACERT} root@${HOSTNAME}:/etc/burp/${CACERT}

# create client config on server
echo "cname = ${HOSTNAME}" > /etc/burp/clientconfdir/${HOSTNAME}
echo "password = ${PASSWORD}" >> /etc/burp/clientconfdir/${HOSTNAME}
echo "server = ${SERVER}" >> /etc/burp/clientconfdir/${HOSTNAME}

# create client config on client
ssh root@${HOSTNAME} "echo \"\
	mode = client
	ssl_peer_cn = ${SERVER}
	server = ${SERVER}
	password = ${PASSWORD}
	cname = ${HOSTNAME}
	port = 4971
	pidfile = /var/run/burp.client.pid

	# SSL certificate authority - same file on both server and client
	ssl_cert_ca = /etc/burp/${CACERT}

	# Client SSL certificate
	ssl_cert = /etc/burp/ssl_cert_${HOSTNAME}.crt

	# Client SSL key
	ssl_key = /etc/burp/ssl_cert_${HOSTNAME}.key

	#backup_script_pre=/BACKUP/preBackup.sh
	#backup_script_post=/BACKUP/postBackup.sh
	#restore_script_pre=/BACKUP/preRestore.sh
	#restore_script_post=/BACKUP/postRestore.sh

\" > /etc/burp/burp.conf"

Die Pfade, die von den Clients gesichert werden sollen, werden per "include = /PFAD/" hinzugefügt. Unerwünschte Unterordner können per "exclude = /PFAD/" ausgeschlossen werden.

 

Hinzufügen eines Clients

(Linux-)Client

Installation

apt-get update
apt-get install burp

Anpassung des daemons

nano /etc/default/burp
	RUN=yes

Start per cronjob

crontab -e
	*/20    *       *       *       *       /usr/sbin/burp -a t

Server

sh /root/burp-add-client.sh [HOSTNAME]

Client (nochmal)

nano /etc/burp/burp.conf
    include = /opt/fhem/
    exclude = /opt/fhem/backup/
    exclude = /opt/fhem/demolog/
    exclude = /opt/fhem/log/
    exclude = /opt/fhem/restoreDir/
    include = /root/
    include = /etc/
    include = /var/spool/cron/
    include = /BACKUP/
    include = /usr/local/share/zabbix/

Quellen: