1
0
Fork 0
scripts-admin-quickndirty-p.../oldies/sauvegarde_pfsense.sh

115 lines
3.6 KiB
Bash
Executable file

#!/bin/sh
# Ce script sert à la sauvegarde de notre firewall pfSense
# Très inspiré du script http://www.scribd.com/doc/92371725/pfsense
# Configuration
BASE_DIR="$HOME/backups"
PREFIXE="sauv_pfsense_"
SUFFIXE=$( date +%Y%m%d-%H%M )
DUREE_DE_VIE=0
USERNAME="backuppc"
PASSWORD="toto123"
COOKIES_FILE=$( mktemp )
CSRF_MAGIC=""
# Arrêt à la première erreur non-catchée
set -e
# Fonctions
# affiche le message d'aide
usage() {
cat <<EOF
$0 [-b base_dir] [-p prefixe] [-s suffixe] [-d duree_de_vie] hostname/IP
$0 -h
-b base_dir : répertoire de sauvegarde (defaut: $BASE_DIR),
-p prefixe : prefixe des fichiers de sauvegarde (defaut: $PREFIXE),
-s suffixe : suffixe des fichiers de sauvegarde (default basé sur la date, ex: $SUFFIXE),
-d duree_de_vie : age en nb de jours a partir duquel les anciennes archives sont supprimees. Si 0, pas de suppression. (defaut: $DUREE_DE_VIE),
hostname/IP : nom d'hôte ou IP du firewall pfsense à sauvegarder.
EOF
}
clean_up_and_exit() {
test -f "$COOKIES_FILE" && rm -f "$COOKIES_FILE"
exit $1
}
# Début du code
# gestion des options de lancement
while getopts b:p:s:d:h o; do
case $o in
'b')
BASE_DIR="$OPTARG"
;;
'p')
PREFIXE="$OPTARG"
;;
's')
SUFFIXE="$OPTARG"
;;
'd')
DUREE_DE_VIE="$OPTARG"
;;
'h')
usage
exit 0
;;
\?)
usage >&2
exit 1
;;
esac
done
shift $( expr $OPTIND - 1 )
HOSTNAME_PFSENSE="$1"
BASE_NAME=$( printf "%s" $( basename "$REPDRUPAL" ) | tr -c "a-zA-Z" "-" )
if [ -z "$HOSTNAME_PFSENSE" ]; then
echo "ERREUR: veuillez indiquer un hostname (ou une IP)." >&2
clean_up_and_exit 1
fi
if [ ! -d "$BASE_DIR" ]; then
echo "ERREUR: repertoire de destination '$BASE_DIR' inexistant." >&2
clean_up_and_exit 1
fi
# Récupération du CSRF
CSRF_MAGIC="$( wget -q -O - --keep-session-cookies --save-cookies "$COOKIES_FILE" https://$HOSTNAME_PFSENSE/index.php | sed -n "s/.*<input type='hidden' name='__csrf_magic' value=\"\([^\"]\+\)\".*/\1/p" || echo "" )"
if [ -z "$CSRF_MAGIC" ]; then
echo "ERREUR: erreur lors de la récupération du __csrf_magic." >&2
clean_up_and_exit 1
fi
# Authentification
if ! wget -q -O /dev/null --keep-session-cookies --save-cookies "$COOKIES_FILE" --load-cookies "$COOKIES_FILE" --post-data "__csrf_magic=$CSRF_MAGIC&usernamefld=$USERNAME&passwordfld=$PASSWORD&login=Login" https://$HOSTNAME_PFSENSE/index.php; then
echo "ERREUR: echec a la premiere connexion." >&2
clean_up_and_exit 1
fi
# On vérifie que l'on est bien connecté
if [ $( wget -q -O - --keep-session-cookies --save-cookies "$COOKIES_FILE" --load-cookies "$COOKIES_FILE" https://$HOSTNAME_PFSENSE/diag_backup.php | grep -c "Diagnostics: Backup/restore" ) -lt 1 ]; then
echo "ERREUR: impossible d'accéder à la page de backup." >&2
clean_up_and_exit 1
fi
#Config. seule
wget -q -O "$BASE_DIR/$PREFIXE$BASE_NAME$HOSTNAME_PFSENSE-conf_$SUFFIXE.xml" --keep-session-cookies --save-cookies "$COOKIES_FILE" --load-cookies "$COOKIES_FILE" --post-data "Submit=Download%20configuration&donotbackuprrd=on" https://$HOSTNAME_PFSENSE/diag_backup.php
#Config + données RRD
wget -q -O "$BASE_DIR/$PREFIXE$BASE_NAME$HOSTNAME_PFSENSE-confrrd_$SUFFIXE.xml" --keep-session-cookies --save-cookies "$COOKIES_FILE" --load-cookies "$COOKIES_FILE" --post-data "Submit=Download%20configuration" https://$HOSTNAME_PFSENSE/diag_backup.php
# Suppression des vieux backups
if [ "$DUREE_DE_VIE" -ne "0" ]; then
find $BASE_DIR -name "$PREFIXE$BASE_NAME$HOSTNAME_PFSENSE-conf_*.xml" -mtime "+$DUREE_DE_VIE" -print0 | xargs -n 200 -r -0 rm -f
find $BASE_DIR -name "$PREFIXE$BASE_NAME$HOSTNAME_PFSENSE-confrrd_*.xml" -mtime "+$DUREE_DE_VIE" -print0 | xargs -n 200 -r -0 rm -f
fi
clean_up_and_exit 0