2.4 KiB
PyFRC2G
Script python de conversion de règles firewall PfSense en graphique.
👋 Présentation
Le script a été codé pour répondre à deux objectifs :
- Avoir une vision graphique globale des règles firewall (une image vaut mille mots).
- Fournir des preuves permettant de répondre à des exigences de sécurité édictées par les différents référentiels existants.
⚡ Caractéristiques
- Script basé sur Python (développé et testé sur GNU/Linux).
- Utilisation de l'API de pfSense fournie par pfSense REST API Package.
- Génération des flux graphiques avec la bibliothèque python Graphviz.
- Génération d'un fichier PNG par interface.
- Distinction entre un VLAN/réseau de destination et un hôte de destination.
- Mapping des interfaces, des ports et des destnations.
💾 Installation
- Prérequis
Installation des bibliothèques Python :
pip install requests graphviz
Installation de pfSense REST API Package : https://github.com/jaredhendrickson13/pfsense-api?tab=readme-ov-file#quickstart
Une fois le paquet pfSense REST API installé, configurez la ou les interface(s) d'écoute sur pfSense puis générez une clé qui nous servira pour l'authentification à l'API.
- Configuration du script
Récupérez les fichiers pyfrc2g.py et config.py.
Configurez l'URL de votre pfSense et vos credentials dans le fichier pyfrc2g.py.
Exemple :
# --- CONFIG ---
PFS_URL = "https://pfs01.domaine.lan/api/v2/firewall/rules"
PFS_TOKEN = "VOTRE_CLE_GENEREE_AVEC_PFSENSE_REST_API"
Configurez ensuite vos interfaces, les réseaux, les adresses des interfaces et les ports dans le fichier config.py. C'est certainement récupérable depuis pfSense mais je suis allé au plus facile à mettre en place.
Exemple :
# --- CONFIG ---
PFS_URL = "https://pfs01.domaine.lan/api/v2/firewall/rules"
PFS_TOKEN = "VOTRE_CLE_GENEREE_AVEC_PFSENSE_REST_API"
INTERFACE_MAP = { "wan": "WAN", "lan": "ADMINISTRATION", "opt1": "LAN", "opt2": "DMZ" }
NET_MAP = { "wan": "WAN SUBNET", "lan": "ADMINISTRATION SUBNET", "opt1": "LAN SUBNET", "opt2": "DMZ SUBNET" }
ADDRESS_MAP = { "wan:ip": "WAN ADDRESS", "lan:ip": "ADMINISTRATION ADDRESS", "opt1:ip": "LAN ADDRESS", "opt2:ip": "DMZ ADDRESS" }
PORT_MAP = { "WEB_ACCESS": "80/443" }