pan-python è un pacchetto Python per interagire con i next-generation firewall ed altri prodotti/servizi di Palo Alto Networks (come Wildfire e Autofocus). Il pacchetto comprende i seguenti componenti:
- interfaccia Python e da riga di comando per le API XML di PAN-OS e Panorama
- programma da riga di comando per gestire le configurazioni XML di PAN-OS
- interfaccia Python e da riga di comando per le API WildFire
- interfaccia Python e da riga di comando per le API AutoFocus
- interfaccia Python e da riga di comando per le licensing API di PAN-OS
pan-python è disponibile su GitHub, come pacchetto PyPi o tramite pip e supporta sia Python 2.7 che 3.x senza necessità di modifiche e senza ulteriori dipendenze.
Installazione
Per installare pan-python via pip per l’utente corrente è sufficiente digitare il comando:
$ pip install --user pan-python
Se sul proprio sistema sono presenti sia Python 2.7 che Python 3.x, per installare pan-python e renderlo disponibile tramite Python 3.x sarà probabilmente necessario installare ed usare pip3. Ad esempio, su un sistema Debian 10 (Buster) dovrete eseguire:
# apt-get install python3-pip
$ pip3 install --user pan-python
Dopo l’installazione, nella directory .local/bin
della home directory del vostro utente dovreste avere a disposizione il comando panxapi.py
. Se tale directory non è inclusa nel vostro search path, aggiornate la variabile PATH
di conseguenza.
$ echo $PATH
/home/gianluca/.local/bin:/home/gianluca/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
$ which panxapi.py
/home/gianluca/.local/bin/panxapi.py
Eseguendo il comando con l’opzione --help
si ottengono le istruzioni di uso dello stesso:
$ panxapi.py --help
panxapi.py [options] [xpath]
Generare una API key
Supponendo di avere il nostro firewall all’IP 192.168.1.1, possiamo generare l’api-key (opzione -k
) per un amministratore (per esempio l’utente admin avente password admin, opzione -l
) tramite il comando:
$ panxapi.py -h 192.168.1.1 -l admin:admin -k
Se non volete scrivere la password in chiaro sulla riga di comando, potete ometterla e vi verrà chiesta interattivamente. Inoltre è buona norma creare un utente dedicato al quale associare un Admin Role che preveda i permessi minimi indispensabili da concedere per la gestione via API invece di usare un utente con ruolo Superuser.
L’output del comando precedente è costituito da due coppie chiave=valore che rappresentano l’hostname e la api-key generata. E’ possibile redirigere queste informazioni all’interno di un file denominato .panrc
in modo da collezionare in un unico posto le api-key relative ai firewall che si gestiscono. E’ anche possibile associare un tag (opzione -t
) a ciascuna api-key in modo da poterle referenziare quando si invocano le chiamate API. Esempio:
$ panxapi.py -t laboratorio -h 192.168.1.1 -l admin:admin -k >> ~/.panrc
Data la criticità del contenuto del file .panrc
, è opportuno impostare per esso dei permessi di accesso particolarmente restrittivi (ad esempio 0600):
chmod 0600 ~/.panrc
Per testare che il file .panrc funzioni come atteso, proviamo ad eseguire un comando di show:
$ panxapi.py -t laboratorio -Xxo 'show system disk-space'
Il significato delle opzioni usate è il seguente:
-t <tag>
: per referenziare il dispositivo e l’api-key col tag specificato-X
: per convertire il comando specificato in notazione XML-x
: per stampare il risultato XML sullo standard output-o
: per specificare un comando di tipo operazionale (op)
Questo esempio conclude questo primo test con gli strumenti forniti dal pacchetto pan-python.