TP 6 : Fortinet FortiGate (FortiOS VM) – Sécurité Programmatique
Module : 2 – Fondamentaux des API REST et de l’embarqué
Durée indicative : 2h
Prérequis : TP 5 terminé, une VM FortiGate (FortiOS) accessible, pip install requests
Objectifs
- Générer et utiliser une clé API FortiOS.
- Créer dynamiquement des objets réseau et des VIPs.
- Automatiser des règles de filtrage via la FortiOS REST API.
Contexte
Vous outillez une équipe sécurité qui doit ouvrir rapidement des accès contrôlés vers des serveurs internes, sans passer par l’interface web à chaque demande.
Étape 1 – Génération d’une clé API
- Sur FortiGate : System → Administrators → REST API Admin.
- Créez un profil avec les droits nécessaires (lecture/écriture sur
firewall). - Récupérez le token généré et stockez-le dans
.env:
FORTIGATE_HOST=192.168.1.99
FORTIGATE_TOKEN=xxxxxxxxxxxxÉtape 2 – Authentification et premier appel
import os, requests
from dotenv import load_dotenv
load_dotenv()
BASE_URL = f"https://{os.getenv('FORTIGATE_HOST')}/api/v2/cmdb"
HEADERS = {"Authorization": f"Bearer {os.getenv('FORTIGATE_TOKEN')}"}
resp = requests.get(f"{BASE_URL}/firewall/address", headers=HEADERS, verify=False, timeout=5)
resp.raise_for_status()
print(resp.json())Étape 3 – Création d’un objet réseau (address)
payload = {"name": "SRV-WEB-01", "subnet": "10.0.10.50/32"}
resp = requests.post(f"{BASE_URL}/firewall/address", json=payload, headers=HEADERS, verify=False)
resp.raise_for_status()Étape 4 – Création d’une VIP
Créez une Virtual IP redirigeant le port 443 externe vers SRV-WEB-01 en interne (POST /firewall/vip).
Étape 5 – Règle de filtrage
Écrivez un script qui :
- crée les objets adresse nécessaires (source, destination) s’ils n’existent pas,
- crée une règle de pare-feu (
POST /firewall/policy) autorisant le flux HTTPS vers la VIP, - affiche le résultat et gère les erreurs (
raise_for_status, capture des exceptions).
Address, VIP et policy ne sont utiles qu’ensemble : c’est leur combinaison qui ouvre le flux HTTPS vers le serveur interne.
Rendu attendu
- Script Python versionné (
.envexclu du dépôt). - Capture de la politique de pare-feu créée, visible dans l’interface FortiGate.
- Un court compte-rendu des objets créés (adresses, VIP, policy).
Points de vérification
- Le token API n’apparaît jamais en clair dans le code versionné.
- Les objets adresse, la VIP et la policy sont créés et cohérents entre eux.
- Le script vérifie l’existence d’un objet avant de le recréer.