====== Sauvegarde d'un serveur pfsense avec BackupPC ====== Un des gros points forts de pfsense est de pouvoir être entièrement re-configuré via le fichier de configuration xml que l'on peut télécharger depuis l'interface web. Ce how-to a pour but d'expliquer comment automatiser cette sauvegarde à l'aide de BackupPC (déjà pour que ça soit automatique bien sûre, mais grâce au mode historique de BackupPC, on peut suivre facilement les modification de configurations). ===== Sur Pfsense ===== Il faut d'abord créer un groupe d'utilisateurs nommé par exemple backups, qui n'a accès qu'à la page de sauvegardes: {{:pfsense_group_backups.png|}} Puis il faut créer un utilisateur (par exemple backuppc) membre de ce groupe, avec un mot de passe solide. Dans cet exemple, on lui mettra comme mot de passe **secret** ===== Sur BackupPC ===== Sur le serveur BackupPC, on va créer un répertoire pour y mettre des scripts, et un répertoire pour y télécharger la configuration de pfsense: mkdir -p /var/lib/BackupPC/{bin,pfsense} chown :backuppc /var/lib/BackupPC/pfsense chmod 770 /var/lib/BackupPC/pfsense Puis on écrit le script qui sera utilisé en pre/post dump: cat <<'EOF' > /var/lib/BackupPC/bin/pfsense.sh #!/bin/bash -e OUT='/var/lib/BackupPC/pfsense' TMP=$(mktemp -d) URL='https://pfsense.domain.tld' LOGIN='backuppc' PASS='p@ssw0rd' # Save cookie and CSRF for the login form CSRF1=$(/usr/bin/wget -qO- --keep-session-cookies --save-cookies $TMP/cookies.txt --no-check-certificate $URL/diag_backup.php \ | grep "name='__csrf_magic'" \ | /usr/bin/perl -pe 's/.*value="(sid:[\da-z]+,[\d,a-z]+).*/$1/') # Submit the login form with the previous values, and save a new CSRF token CSRF2=$(/usr/bin/wget -qO- --keep-session-cookies --load-cookies $TMP/cookies.txt --save-cookies $TMP/cookies.txt --no-check-certificate \ --post-data "login=Login&usernamefld=$LOGIN&passwordfld=$PASS&__csrf_magic=$CSRF1" $URL/diag_backup.php \ | grep "csrfMagicToken" \ | /usr/bin/perl -pe 's/.*var\scsrfMagicToken\s=\s"(sid:[\da-z]+,[\d,a-z]+).*/$1/') # Save only the config, and retrieve a 3rd CSRF token /usr/bin/wget -q --keep-session-cookies --load-cookies $TMP/cookies.txt --save-cookies $TMP/cookies.txt --no-check-certificate \ --post-data "download=Download%20configuration%20as%20XML&donotbackuprrd=yes&__csrf_magic=$CSRF2" $URL/diag_backup.php -O $OUT/config-pfsense.xml \ rm -f $TMP/*.txt rmdir $TMP EOF chown :backuppc /var/lib/BackupPC/bin/pfsense.sh chmod 750 /var/lib/BackupPC/bin/pfsense.sh Et voilà, il ne reste plus qu'à ajouter un hôte à sauvegarder dans BackupPC, qui ressemblera à ça: $Conf{ClientNameAlias} = 'localhost'; $Conf{DumpPreUserCmd} = '/var/lib/BackupPC/bin/pfsense.sh'; $Conf{PingCmd} = '$pingPath -c 1 -w 3 pfsense.domain.tld'; $Conf{UserCmdCheckStatus} = 1; $Conf{RsyncClientCmd} = '$rsyncPath $argList+'; $Conf{RsyncClientRestoreCmd} = '$rsyncPath $argList+'; $Conf{RsyncShareName} = [ '/var/lib/BackupPC/pfsense' ]; $Conf{XferMethod} = 'rsync'; $Conf{XferLogLevel} = 6; Pour un serveur OPNSense, le principe est le même, mais le script est légèrement différent: #!/bin/bash -e OUT='/var/lib/BackupPC/pfsense' TMP=$(mktemp -d) URL='https://pfsense.domain.tld' LOGIN='backuppc' PASS='p@ssw0rd' # Submit the login form with the previous values, and save a new CSRF token /usr/bin/wget -q -O /dev/null --keep-session-cookies --save-cookies $TMP/cookies.txt --no-check-certificate \ --post-data "login=Login&usernamefld=$LOGIN&passwordfld=$PASS" $URL/diag_backup.php # Save only the config /usr/bin/wget -q --keep-session-cookies --load-cookies $TMP/cookies.txt --save-cookies $TMP/cookies.txt --no-check-certificate \ --post-data "download=Download%20Configuration&donotbackuprrd=yes" $URL/diag_backup.php -O $OUT/config-pfsense.xml \ rm -f $TMP/*.txt rmdir $TMP