pfSense backups automaticos con curl
pfSense backups automaticos con curl
pfSense backups automaticos con curl
Este post sirve para automatizar la descarga de backups de configuracion pfSense usando curl, cookies temporales y token CSRF.
Flujo general
- Crear ficheros temporales para cookies y respuesta HTML.
- Obtener la pagina de login para capturar CSRF.
- Enviar usuario, password y CSRF.
- Descargar
diag_backup.php. - Purgar backups antiguos.
- Borrar cookies temporales aunque falle el script.
Variables recomendadas
1
2
3
4
PFSENSE_URL="https://<IP_PFSENSE>"
PFSENSE_USER="<USUARIO_ADMIN>"
PFSENSE_PASS="<PASSWORD>"
BACKUP_DIR="/ruta/backup/pfsense"
Ficheros temporales seguros
1
2
3
cookie_file="$(mktemp)"
login_page="$(mktemp)"
trap 'rm -f "$cookie_file" "$login_page"' EXIT
Obtener CSRF
1
2
curl -k -s -c "$cookie_file" "$PFSENSE_URL/" -o "$login_page"
csrf="$(grep -oE 'name="__csrf_magic" value="[^"]+' "$login_page" | sed 's/.*value="//')"
Login
1
2
3
4
5
6
curl -k -s -b "$cookie_file" -c "$cookie_file" \
--data-urlencode "login=Login" \
--data-urlencode "usernamefld=$PFSENSE_USER" \
--data-urlencode "passwordfld=$PFSENSE_PASS" \
--data-urlencode "__csrf_magic=$csrf" \
"$PFSENSE_URL/" >/dev/null
Descargar backup
1
2
3
4
fecha="$(date +%Y%m%d_%H%M%S)"
curl -k -s -b "$cookie_file" \
"$PFSENSE_URL/diag_backup.php?download=download" \
-o "$BACKUP_DIR/pfsense_${fecha}.xml"
Rotacion
1
find "$BACKUP_DIR" -type f -name 'pfsense_*.xml' -mtime +15 -delete
Recomendaciones
- Usar un usuario dedicado para backup.
- Guardar credenciales fuera del script, por ejemplo en
.envcon permisos600. - Evitar persistir cookies o tokens CSRF.
- Validar periodicamente que el XML descargado no esta vacio.
- Probar restauracion en entorno controlado antes de confiar en la copia.
Scripts relacionados
pfsense_backups_auto.sh: automatiza login, descarga de XML y llamada a depuracion.depura_ficheros.sh: elimina backups antiguos en rutas destino.
This post is licensed under CC BY 4.0 by the author.