pfsense_backups_auto.sh
pfsense_backups_auto.sh
pfsense_backups_auto.sh
Este script automatiza la descarga de backups de configuracion de varios pfSense mediante login web, cookies y token CSRF.
Ejecucion programada
00 10 * * * /ruta/origen/scripts/pfsense/pfsense_backups_auto.sh
00 04 * * * /ruta/origen/scripts/pfsense/pfsense_backups_auto.sh
Flujo
- Abre la pagina de login de cada pfSense.
- Extrae
__csrf_magic. - Hace login con usuario y password.
- Abre
diag_backup.phppara obtener un nuevo CSRF. - Descarga el backup XML.
- Guarda el fichero en una ruta destino de backups.
- Llama a
depura_ficheros.shpara borrar backups antiguos.
Version saneada
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env bash
set -euo pipefail
PFSENSE_USER="${PFSENSE_USER:?}"
PFSENSE_PASS="${PFSENSE_PASS:?}"
BACKUP_DESTINO="/ruta/destino/backups/pfsense"
firewalls=(
"fw1|https://<IP_INTERNA_1>:444"
"fw2|https://<IP_INTERNA_2>:444"
"fw3|https://<IP_INTERNA_3>:444"
)
for item in "${firewalls[@]}"; do
nombre="${item%%|*}"
url="${item#*|}"
cookie_file="$(mktemp)"
csrf_file="$(mktemp)"
trap 'rm -f "$cookie_file" "$csrf_file"' EXIT
curl -L -k --cookie-jar "$cookie_file" "$url/" \
| grep "name='__csrf_magic'" \
| sed 's/.*value="\(.*\)".*/\1/' > "$csrf_file"
curl -L -k --cookie "$cookie_file" --cookie-jar "$cookie_file" \
--data-urlencode "login=Login" \
--data-urlencode "usernamefld=$PFSENSE_USER" \
--data-urlencode "passwordfld=$PFSENSE_PASS" \
--data-urlencode "__csrf_magic=$(cat "$csrf_file")" \
"$url/" >/dev/null
fecha="$(date +%Y%m%d%H%M%S)"
curl -L -k --cookie "$cookie_file" --cookie-jar "$cookie_file" \
--data-urlencode "download=download" \
--data-urlencode "donotbackuprrd=yes" \
--data-urlencode "backupdata=yes" \
--data-urlencode "backupssh=yes" \
"$url/diag_backup.php" > "$BACKUP_DESTINO/config-${nombre}-${fecha}.xml"
done
/ruta/origen/scripts/pfsense/depura_ficheros.sh
Riesgos y mejoras
- No dejar usuario y password escritos en el script.
- Usar
mktemppara cookies y CSRF. - Borrar temporales con
trap. - Validar que el XML descargado no esta vacio.
- Evitar
-ksi se puede validar certificado correctamente.
This post is licensed under CC BY 4.0 by the author.