TP 7 : OPNsense – Provisioning Zero-Touch

Module : 2 – Fondamentaux des API REST et de l’embarqué Durée indicative : 1h30 Prérequis : TP 5 et 6 terminés, une VM OPNsense accessible, pip install requests

Objectifs

  • Générer des clés API sur OPNsense.
  • Automatiser le déploiement d’un serveur DHCP.
  • Automatiser la création de règles NAT via l’API REST native.

Contexte

Vous simulez un scénario zero-touch provisioning : un nouvel équipement OPNsense doit être configuré entièrement par script, sans intervention manuelle sur l’interface web.

Étape 1 – Clé API

  1. Sur OPNsense : System → Access → Users, éditez votre utilisateur, section API keys, générez une clé.
  2. Stockez la clé et le secret dans .env :
OPNSENSE_HOST=192.168.1.1
OPNSENSE_KEY=xxxx
OPNSENSE_SECRET=yyyy

Étape 2 – Premier appel authentifié

L’API OPNsense utilise l’authentification HTTP Basic avec la clé comme identifiant et le secret comme mot de passe :

import os, requests
from dotenv import load_dotenv

load_dotenv()
BASE_URL = f"https://{os.getenv('OPNSENSE_HOST')}/api"
AUTH = (os.getenv('OPNSENSE_KEY'), os.getenv('OPNSENSE_SECRET'))

resp = requests.get(f"{BASE_URL}/core/system/status", auth=AUTH, verify=False, timeout=5)
resp.raise_for_status()
print(resp.json())

Étape 3 – Configuration du serveur DHCP

Via le module dhcpv4 de l’API :

  1. Récupérez la configuration actuelle (GET /dhcpv4/settings/get).
  2. Modifiez la plage d’adresses et le DNS distribué (POST /dhcpv4/settings/set).
  3. Appliquez la configuration (POST /dhcpv4/service/reconfigure).

Lire, préparer, puis appliquer Lire, préparer, puis appliquer Sur OPNsense, un changement n’est actif qu’après un appel explicite d’application (“stage puis apply”).

Étape 4 – Règle NAT

Créez une règle de redirection de port (port forward) rendant accessible un serveur interne sur le port 8080 :

  1. POST /firewall/source_nat/... ou module NAT équivalent selon la version,
  2. appliquez les changements (POST /firewall/filter/apply).

Étape 5 – Script d’orchestration

Regroupez les étapes 3 et 4 dans un script zero_touch_provision.py prenant en paramètres (variables Python ou fichier YAML) : plage DHCP, DNS, règle NAT à créer. Le script doit être ré-exécutable sans erreur (vérifier l’existant avant de créer).

Rendu attendu

  • Script(s) Python versionnés (.env exclu).
  • Captures de la configuration DHCP et de la règle NAT dans l’interface OPNsense.
  • Un README.md décrivant le scénario zero-touch simulé.

Points de vérification

  • Le DHCP et la règle NAT sont appliqués et fonctionnels après exécution du script.
  • La clé et le secret API ne sont jamais committés.
  • Le script gère les erreurs HTTP (raise_for_status ou équivalent).