# 🔧 pfSense API scripts ![Bash](https://img.shields.io/badge/Bash-5.x-4EAA25?logo=gnubash&logoColor=white) ![pfSense](https://img.shields.io/badge/pfSense-REST_API_v2-212121?logo=pfsense&logoColor=white) ![curl](https://img.shields.io/badge/curl-required-073551?logo=curl&logoColor=white) ![jq](https://img.shields.io/badge/jq-required-black) ![License](https://img.shields.io/badge/licence-MIT-blue) Scripts Bash pour interagir avec pfSense via le paquet REST API v2. ## 📁 Arborescence ```text pfsense-api/ ├── README.md ├── .gitignore ├── .env.example └── scripts/ ├── add-ip-alias.sh ├── add-port-forward.sh ├── manage-port-forwards.sh └── test-api-connection.sh ``` ## ✅ PrĂ©requis - đŸ–„ïž pfSense avec le paquet REST API v2 installĂ© et activĂ©. - 🔑 Authentification Basic activĂ©e cĂŽtĂ© API. - đŸ‘€ Un utilisateur pfSense ayant accĂšs Ă  l'endpoint de test. - 🌐 `curl` installĂ© localement. - 🔍 `jq` installĂ© localement pour gĂ©nĂ©rer les payloads JSON. ## ⚙ Configuration Copier l'exemple puis adapter les valeurs localement : ```bash cp .env.example .env ``` Variables principales : ```bash PFSENSE_URL="https://pfsense.example.local" PFSENSE_USER="api-user" PFSENSE_PASSWORD="change-me" ``` Si pfSense utilise un certificat auto-signĂ© : ```bash PFSENSE_INSECURE=true ``` ## đŸ©ș Tester la connexion API ```bash ./scripts/test-api-connection.sh ``` Par dĂ©faut, le script teste : ```text /api/v2/status/system ``` Pour tester un autre endpoint en lecture seule : ```bash PFSENSE_ENDPOINT="/api/v2/firewall/rules" ./scripts/test-api-connection.sh ``` ## ➕ CrĂ©er une redirection de port En mode interactif, lancer simplement : ```bash ./scripts/add-port-forward.sh ``` Le script demandera les valeurs manquantes : port WAN, IP interne, port interne, protocole, interface, description, rĂšgle firewall associĂ©e et application des changements. Exemple : exposer le port TCP `8443` de l'adresse WAN pfSense vers le port `443` de la machine interne `192.168.1.50` : ```bash ./scripts/add-port-forward.sh \ --external-port 8443 \ --target 192.168.1.50 \ --target-port 443 \ --protocol tcp \ --description "WAN 8443 vers serveur web interne" ``` Par dĂ©faut, le script : - crĂ©e la rĂšgle sur l'interface `wan` ; - utilise la destination `wan:ip`, c'est-Ă -dire l'adresse WAN pfSense ; - crĂ©e une rĂšgle firewall associĂ©e avec `associated_rule_id=new` ; - applique explicitement les changements via `/api/v2/firewall/apply`. Pour crĂ©er la rĂšgle sans appliquer tout de suite : ```bash ./scripts/add-port-forward.sh \ --external-port 2222 \ --target 192.168.1.20 \ --target-port 22 \ --no-apply ``` ## đŸ·ïž CrĂ©er un alias IP En mode interactif : ```bash ./scripts/add-ip-alias.sh ``` Exemple avec une seule IP : ```bash ./scripts/add-ip-alias.sh \ --name SRV_WEB \ --addresses 192.168.1.50 \ --description "Serveur web interne" ``` Exemple avec plusieurs entrĂ©es : ```bash ./scripts/add-ip-alias.sh \ --name SERVEURS_WEB \ --addresses 192.168.1.50,192.168.1.51 \ --details "web-01,web-02" ``` Par dĂ©faut, le script crĂ©e un alias de type `host` et applique explicitement les changements via `/api/v2/firewall/apply`. ## 🔀 GĂ©rer les redirections NAT Lister les redirections NAT, puis en sĂ©lectionner une pour la modifier ou la supprimer : ```bash ./scripts/manage-port-forwards.sh ``` Le script appelle `/api/v2/firewall/nat/port_forwards` pour lister les rĂšgles, puis `/api/v2/firewall/nat/port_forward` en `PATCH` ou `DELETE` selon l'action choisie. Les changements sont appliquĂ©s via `/api/v2/firewall/apply`, sauf avec `--no-apply`.