Superviser la synchronisation HA de Palo Alto via API REST : Script Perl pour Icinga/Nagios

Superviser la synchronisation HA de Palo Alto via API REST : Script Perl pour Icinga/Nagios

Superviser la synchronisation HA de Palo Alto est une étape clé pour assurer la fiabilité, la cohérence et la sécurité de votre infrastructure réseau. Grâce à l’API REST et à la clé API Palo Alto, il est possible d’automatiser cette supervision à l’aide d’un script Perl dédié, conçu pour vérifier l’état de la synchronisation entre les membres du cluster HA.

Ce script facilite le monitoring Palo Alto en identifiant rapidement les désynchronisations de configuration. Il peut s’intégrer facilement dans des outils de supervision comme Icinga ou Centreon, offrant une solution simple, efficace et adaptable pour renforcer vos politiques de haute disponibilité.

Comment récupérer votre API Key sur un cluster Palo Alto

Palo Alto ne fournit pas d’OID SNMP standardisé (publié) qui retourne exactement l’état "Running Config: Synchronized" d’un cluster Palo.

La première étape sera de générer une API KEY sur vos Palo. Malheureusement, Palo Alto ne fournit pas d’OID SNMP standardisé (publié) qui retourne exactement l’état « Running Config: Synchronized » d’un cluster Palo.

 Générer une clé API sur un Palo (API Key)

Avant d’utiliser les requêtes API, vous devez obtenir une clé d’authentification.

Requête :

https://<IP_DU_FIREWALL>/api/?type=keygen&user=<UTILISATEUR>&password=<MOT_DE_PASSE>

Exemple :

https://192.168.1.1/api/?type=keygen&user=admin&password=SuperPassw0rd

Réponse :

<response status="success">  <result>    <key>LUFRPT0yQkZ6bGhFcE1...etc</key>  </result></response>
Vous devez garder cette clé précieusement et en sécurité car elle sera nécessaire pour interroger les 2 Palo de votre cluster pour toutes tes requêtes API suivantes.

Générer une clé API sur un Palo (API Key)

Requête pour vérifier l’état HA (y compris “Running Config”)

Si tu veux interroger le state HA et vérifier si tu peux interroger l’API de ton Palo  (équivalent CLI : show high-availability state), voici la requête :

https://<IP_DU_FIREWALL>/api/?type=op&cmd=<show><high-availability><state></state></high-availability></show>&key=<TA_CLÉ_API>

Cette requête retourne un XML contenant, entre autres : <enabled>yes</enabled><state>active</state><running-sync>Synchronised</running-sync><config-sync>Configuration is synchronized</config-sync>

Tu peux donc parser les groupes <running-sync> et/ou <config-sync>.

Requête pour vérifier l’état HA (y compris “Running Config”)

Exemple en ligne de commande (curl)

Tu peux aussi utiliser la commande CURL, pour récupérer les informations sur un Palo.

curl -k 'https://192.168.1.1/api/?type=op&cmd=<show><high-availability><state></state></high-availability></show>&key=LUFRPT0yQkZ6bGhFcE1...'

Astuces

  • L’API est disponible par défaut, tant que l’utilisateur a les droits API.
  • La bonne pratique est d’utiliser un compte admin read-only si tu veux juste monitorer ton Palo.
  • L’API est XML-based par défaut, mais on peut aussi utiliser le mode JSON (à partir de PAN‑OS 9.1+ avec l’option &format=json)

Format XML-Based

Cette requête retourne un XML contenant, entre autres : <enabled>yes</enabled><state>active</state><running-sync>Synchronised</running-sync><config-sync>Configuration is synchronized</config-sync>

Superviser la synchronisation HA de Palo Alto avec le script check_palo_sync.pl

Vous retrouverez l’intégralité du script sur mon github: script check_palo_sync.pl

Objectif

Le script check_palo_sync.pl est un plugin de supervision compatible Icinga/Nagios, utilisé pour vérifier l’état de synchronisation HA (High Availability) entre les membres d’un cluster Palo Alto (physique ou virtuel), via l’API XML du pare-feu.

Il vérifie deux indicateurs fournis par l’API :

  • running-sync: indique si les configurations sont synchronisées
  • running-sync-enabled: indique si la synchronisation est activée

Fonctionnement

Le script :

  1. Interroge l’API Palo Alto via HTTPS.
  2. Désactive la vérification SSL pour accepter les certificats auto-signés.
  3. Parse la réponse XML.
  4. Évalue les deux champs HA.
  5. Retourne un code de sortie Nagios/Icinga (OK, WARNING, CRITICAL, UNKNOWN).

API utilisée

Le script utilise l’URL suivante :

https://<firewall_ip>/api/?type=op&cmd=<show><high-availability><state></state></high-availability></show>&key=<api_key>

Le résultat XML contient une structure de ce type :

<result>  <group>    <running-sync>synchronized</running-sync>    <running-sync-enabled>yes</running-sync-enabled>  </group></result>

Conditions de sortie pour le plugin

État HA Code Icinga Message renvoyé
Sync activée et à jour OK (0) OK – Configuration HA synchronisée
Sync désactivée WARNING (1) WARNING – Synchronisation HA désactivée
Sync activée mais pas synchro CRITICAL (2) CRITICAL – Synchronisation HA NON synchronisée
Erreur de requête/API CRITICAL (2) CRITICAL – Erreur HTTP …
Mauvais usage ou paramètre UNKNOWN (3) UNKNOWN – Paramètres manquants

Paramètres requis

  • –host : IP ou FQDN du pare-feu
  • –apikey : Clé API générée pour un utilisateur du firewall

Exemple:

./check_palo_sync.pl --host 192.0.2.1 --apikey abc1234567890

Dépendances

Modules Perl nécessaires :

  • LWP::UserAgent (requêtes HTTPS)
  • XML::Simple (parsing XML)
  • Getopt::Long (gestion des arguments)

Explication détaillée du script check_palo_sync.pl

Chargement des modules nécessaires

use strict;
use warnings;
use LWP::UserAgent;
use XML::Simple;
use Getopt::Long;
  • strict et warnings : bonnes pratiques Perl, elles empêchent les erreurs de codage courantes.
  • LWP::UserAgent : permet d’envoyer des requêtes HTTP/HTTPS.
  • XML::Simple : convertit le XML renvoyé par l’API Palo Alto en une structure Perl.
  • Getopt::Long : permet de gérer les arguments de ligne de commande (–host, –apikey).

Déclaration et récupération des arguments

my ($host, $apikey);
GetOptions(    'host=s'   => \$host,    'apikey=s' => \$apikey,);
  • Initialise deux variables $host (IP du firewall) et $apikey (clé API).
  • GetOptions lit les arguments fournis en ligne de commande avec –host et –apikey.

Vérification des paramètres

if (!$host || !$apikey) {    
print "UNKNOWN - Paramètres manquants. Utilisation : --host <ip> --apikey <clé>\n";    
exit 3;
}

Si un argument est manquant, le script affiche une erreur UNKNOWN (code de sortie 3) avec un message d’aide.

Construction de l’URL API

my $url = "https://$host/api/?type=op&cmd=<show><high-availability><state></state></high-availability></show>&key=$apikey";
  • Compose l’URL pour appeler la commande show high-availability state via l’API XML.
  • $apikey est inclus dans l’URL pour authentifier la requête.

Création de l’agent HTTP (avec SSL désactivé)

my $ua = LWP::UserAgent->new(        
         ssl_opts => { verify_hostname => 0,        
                       SSL_verify_mode => 0x00,    
                     },    
         timeout => 10,);

Crée un objet UserAgent avec :

    • verify_hostname => 0 : n’exige pas que le nom du certificat SSL corresponde à l’IP.
    • SSL_verify_mode => 0x00 : désactive toute vérification du certificat.
    • timeout => 10 : le script échoue si le pare-feu ne répond pas en 10 secondes.

Envoi de la requête API

my $response = $ua->get($url);
  • Envoie une requête GET à l’URL construite.
  • La réponse est stockée dans $response.

Vérifie si la requête a échoué

if (!$response->is_success) {    
      print "CRITICAL - Erreur HTTP : " . $response->status_line . "\n";    
      exit 2;
}

Si le code HTTP n’est pas 200 OK, le script renvoie un CRITICAL (code 2) avec l’erreur HTTP.

Conversion du XML en structure Perl

my $xml = XMLin($response->decoded_content, ForceArray => 0);
  • Convertit la réponse XML en une structure de hash Perl accessible comme un dictionnaire.
  • ForceArray => 0 évite que les éléments soient mis dans des tableaux si ce n’est pas nécessaire.

Extraction des valeurs HA

my $running_sync         = $xml->{result}->{group}->{'running-sync'}         // '';
my $running_sync_enabled = $xml->{result}->{group}->{'running-sync-enabled'} // '';

Accède aux deux champs HA :

    • running-sync : indique si la config est synchronisée (synchronized ou unsynchronized)
    • running-sync-enabled : indique si la sync HA est activée (yes ou no)
    • Le //  » évite les erreurs si une des clés est absente (valeur par défaut : chaîne vide).

Analyse et retour du statut

if (lc($running_sync) eq 'synchronized' && lc($running_sync_enabled) eq 'yes') {    
   print "OK - Configuration HA synchronisée\n";    
   exit 0;
} elsif (lc($running_sync_enabled) eq 'no') {    
  print "WARNING - Synchronisation HA désactivée\n";    
  exit 1;
} else {    
  print "CRITICAL - Synchronisation HA NON synchronisée : running_sync='$running_sync'\n";    
  exit 2;
}
  • Si la synchronisation est activée et réussie → OK (code 0).
  • Si la sync est désactivée → WARNING (code 1).
  • Si elle est activée mais désynchronisée → CRITICAL (code 2).
  • Le script utilise lc() pour éviter les problèmes de casse (par ex. Yes vs yes).

Voici un exemple d’utilisation dans le logiciel Icinga :

Vous retrouverez l’intégralité du script sur mon github: script check_palo_sync.pl

Voici un exemple d’utilisation dans le logiciel Icinga 

FAQ – Superviser la synchronisation HA de Palo Alto via API

Comment générer une clé API Palo Alto pour le monitoring ?

Pour superviser vos pare-feux via l’API, vous devez d’abord générer une clé API Palo Alto en appelant l’URL suivante :

https://<IP_FIREWALL>/api/?type=keygen&user=<UTILISATEUR>&password=<MOT_DE_PASSE>

Cette clé sera utilisée dans toutes les requêtes API pour authentifier votre script de supervision.

Pourquoi superviser la synchronisation HA de Palo Alto est-il crucial ?

Superviser la synchronisation HA de Palo Alto permet de détecter rapidement toute désynchronisation entre les nœuds d’un cluster. Cela garantit que les configurations actives sont toujours alignées, ce qui est essentiel pour assurer la haute disponibilité et la sécurité de l’environnement réseau.

Quels outils peuvent être utilisés pour le monitoring Palo Alto ?

Le monitoring Palo Alto peut être intégré dans des solutions comme Icinga, Nagios ou Centreon. Le script check_palo_sync.pl est compatible avec ces outils et permet un contrôle automatisé de l’état de synchronisation HA via l’API XML.

Quels indicateurs sont vérifiés par le script de supervision ?

Le script analyse deux indicateurs clés renvoyés par l’API :

  • running-sync : indique si la configuration est synchronisée (synchronized / unsynchronized)
  • running-sync-enabled : indique si la synchronisation HA est activée (yes / no)

Faut-il désactiver la vérification SSL dans le script ?

Oui, le script désactive la vérification SSL pour accepter les certificats auto-signés souvent présents sur les pare-feux Palo Alto. Cela permet de garantir la compatibilité, même sans infrastructure PKI complète.

En bref

En résumé, superviser la synchronisation HA de Palo Alto est une démarche incontournable pour garantir l’intégrité et la disponibilité de votre infrastructure réseau. L’utilisation d’un script basé sur l’API REST, combinée à une clé API Palo Alto correctement générée et sécurisée, permet de mettre en place une supervision automatisée, fiable et réactive.

Que ce soit via Icinga, Centreon ou tout autre outil, ce type de solution s’intègre parfaitement dans une stratégie de monitoring Palo Alto moderne et efficace. En adoptant cette approche, vous assurez un suivi constant de l’état HA de vos pare-feux et réduisez les risques liés aux désynchronisations critiques.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *