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
- Sur OPNsense : System → Access → Users, éditez votre utilisateur, section API keys, générez une clé.
- 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 :
- Récupérez la configuration actuelle (
GET /dhcpv4/settings/get). - Modifiez la plage d’adresses et le DNS distribué (
POST /dhcpv4/settings/set). - Appliquez la configuration (
POST /dhcpv4/service/reconfigure).
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 :
POST /firewall/source_nat/...ou module NAT équivalent selon la version,- 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 (
.envexclu). - Captures de la configuration DHCP et de la règle NAT dans l’interface OPNsense.
- Un
README.mddé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_statusou équivalent).