114 lines
3.6 KiB
Bash
Executable file
114 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
|