Cette bibliothèque est générée automatiquement, si vous souhaitez prendre en charge une version plus récente, veuillez ouvrir un ticket.
Bibliothèque PHP utilisée pour interagir avec les API du pare-feu Fortigate (FortiOS) (CMDB (Configuration), Log et Monitor). Cette bibliothèque peut récupérer, créer, mettre à jour et supprimer la configuration sur le pare-feu.
Vous pouvez trouver toutes les méthodes prises en charge sur le site Web des développeurs de Fortinet. Vous aurez besoin d'un compte pour parcourir les informations.
composer require benclerc/fortinet-fortiosapi
.require 'vendor/autoload.php';
.$configConnection = new FortinetFortiOSAPIConfig('123.123.123.123', 'admin', 'password');
.$firewallConf = new FortinetFortiOSAPIConfiguration($configConnection);
.$staticRoutes = $firewallConf->getAllRouterStatic();
. Vous pouvez trouver une documentation complète ici.
Cette classe Config est utilisée pour préparer les informations de configuration obligatoires pour instancier et utiliser les classes FortiOSAPI.... Dans le constructeur vous devez passer :
Paramètres optionnels :
setTimeout()
pour changer.setSSLVerifyPeer()
pour modifier.setSSLVerifyHost()
pour modifier.setAPIVersion()
pour modifier. // Basic configuration
$ configConnection = new Fortinet FortiOSAPI Config ( ' 123.123.123.123 ' , ' admin ' , ' password ' );
// Configuration for very slow firewalls/long requests
$ configConnection = new Fortinet FortiOSAPI Config ( ' 123.123.123.123 ' , ' admin ' , ' password ' );
$ configConnection -> setTimeout ( 20000 );
// Unsecure configuration
$ configConnection = new Fortinet FortiOSAPI Config ( ' 123.123.123.123 ' , ' admin ' , ' password ' );
$ configConnection -> setSSLVerifyPeer ( FALSE )-> setSSLVerifyHost ( FALSE );
// Special API version
$ configConnection = new Fortinet FortiOSAPI Config ( ' 123.123.123.123 ' , ' admin ' , ' password ' );
$ configConnection -> setAPIVersion ( 1 );
// The class logins to the firewall when being instanciated hence the try/catch statement.
// Here I use the class Configuration for the example but it the same for Log and Monitor classes.
try {
$ firewallConf = new Fortinet FortiOSAPI Configuration ( $ configConnection );
} catch ( Exception $ e ) {
echo ( ' Handle error : ' . $ e -> getMessage ());
}
Ces classes utilisent Exception pour gérer les erreurs. Pour une exécution nominale, vous devez instancier et demander des méthodes dans les instructions try/catch.
// Get one particular static route
try {
$ res = $ firewallConf -> getRouterStatic ( 1 );
echo ( ' Gateway is : ' . $ res -> results [ 0 ]-> gateway );
} catch ( Exception $ e ) {
echo ( ' Handle error : ' . $ e -> getMessage ());
}
// Get routes using filters
try {
// Will return fields dst and status of default gateways
$ res = $ firewallConf -> getAllRouterStatic ( NULL , NULL , NULL , NULL , NULL , NULL , [ ' dst ' , ' status ' ], [ ' dst==0.0.0.0 0.0.0.0 ' ]);
// For obvious reasons, it would be a charm to use the new PHP 8.0 syntax to call the method :
// $firewallConf->getAllRouterStatic(format: ['dst', 'status'], filter: ['dst==0.0.0.0 0.0.0.0'])
} catch ( Exception $ e ) {
echo ( ' Handle error : ' . $ e -> getMessage ());
}
// Set a static route
// Define the route
$ staticRoute = new stdClass ;
$ staticRoute -> status = ' enable ' ;
$ staticRoute -> dst = ' 1.1.1.1 255.255.255.255 ' ;
$ staticRoute -> src = ' 198.168.1.0 255.255.255.0 ' ;
$ staticRoute -> gateway = ' 198.168.1.254 ' ;
$ staticRoute -> device = ' lan ' ;
$ staticRoute -> distance = 20 ;
// Send the request to the firewall
try {
$ res = $ firewallConf -> addRouterStatic ( $ staticRoute );
if ( $ res -> status == ' success ' ) {
echo ( ' Route added ' );
} else {
echo ( ' Route adding failed ' );
}
} catch ( Exception $ e ) {
echo ( ' Handle error : ' . $ e -> getMessage ());
}
Cette bibliothèque prend également en charge les transactions : démarrez une transaction, créez, mettez à jour, supprimez et, en fonction du résultat, validez ou abandonnez vos modifications.
// Start transaction
$ firewallConf -> startTransaction ();
// Create many IP objects
$ error = FALSE ;
for ( $ i = 1 ; $ i < 50 ; $ i ++) {
// Create body object
$ ip = new stdClass ;
$ ip -> name = ' IP ' . $ i ;
$ ip -> type = ' subnet ' ;
$ ip -> subnet = ' 10.1. ' . $ i . ' .0/24 ' ;
// Create object on the firewall
try {
$ firewallConf -> addFirewallAddress ( $ ip );
echo ( " [SUCCESS] Created IP " . $ ip -> name . " . n" );
} catch ( Exception $ e ) {
echo ( " [ERROR] Unable to create IP : " . $ ip -> name . " . Details : " . $ e -> getMessage (). "n" );
$ error = TRUE ;
}
}
// Check error
if ( $ error === FALSE ) {
// No errors, commit
$ firewallConf -> commitTransaction ();
} else {
// Errors, abort and rollback
$ firewallConf -> abortTransaction ();
}