Realizar backups en Palo Alto de los snapshots

Si no tenemos Panorama configurado y queremos realizar una automatización de los backups del Firewall (snapshots) podemos realizarlo con una tarea programada.

Necesitamos realizar unos pasos previos. 

  • Crear un usuario «backup» para esta tarea.
    • Lo recomendable es utilizar un usuario con los permisos limitados para esta tarea. Por seguridad es recomendable rebajar los permisos al mínimo posible. No es necesario permisos de administrador.
  • Extraer el usuario/contraseña cifrados para que no vayan en texto plano a través de la API de Palo Alto.
    • Aquí un ejemplo de como extraer la clave API desde la siguiente URL: https://10.8.11.152/api/?type=keygen&user=<user>&password=<Password>
    • Debería salirnos algo parecido a la siguiente captura.

    • Esa clave alfanumérica tan larga es la que utilizaremos en el script.

 

El siguiente script es en Powershell.

  • RUTA: Debemos sustituir la ruta donde queremos guardar el fichero que se generará.
  • IP_FIREWALL: Aquí debemos poner la IP de nuestro firewall
  • CLAVE_API: Aquí debemos introducir la clave alfanumérica que nos ha generado Palo Alto.

 

# Null variables.
$Date = $null
$dest = $null

# Date & Time
$Date = (Get-Date).ToString('MM_dd_yyyy')

# Make new Directory
mkdir "C:\temp\PAConfig_$Date"

# Set folder location.
$dest = "C:\temp\PAConfig_$Date"

# Move to directory.
Set-Location $dest

# Prevent error from Firewall self-signed certificate:
if (-not ([System.Management.Automation.PSTypeName]'ServerCertificateValidationCallback').Type)
{
$certCallback = @"
    using System;
    using System.Net;
    using System.Net.Security;
    using System.Security.Cryptography.X509Certificates;
    public class ServerCertificateValidationCallback
    {
        public static void Ignore()
        {
            if(ServicePointManager.ServerCertificateValidationCallback ==null)
            {
                ServicePointManager.ServerCertificateValidationCallback +=
                    delegate
                    (
                        Object obj,
                        X509Certificate certificate,
                        X509Chain chain,
                        SslPolicyErrors errors
                    )
                    {
                        return true;
                    };
            }
        }
    }
"@
    Add-Type $certCallback
 }
[ServerCertificateValidationCallback]::Ignore()

# Enforce TLS 1.2:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

# Download config and device state:
Invoke-WebRequest -uri "https://IP_SERVIDOR/api/?type=export&category=configuration&key=" -OutFile "$dest\API_RunningConfiguration.xml"

Invoke-WebRequest -uri "https://IP_FIREWALL/api/?type=export&category=device-state&key=CLAVE_API" -OutFile "$dest\DeviceState.tgz"

#Format downloaded xml correctly:
($xmlDoc = New-Object xml).Load($PWD.ProviderPath + '/API_RunningConfiguration.xml')
$xmlDoc.Save($PWD.ProviderPath + '/API_Format_RunningConfiguration.xml')

# Remove unformatted version.
#rm $dest\API_RunningConfiguration.xml