# PyFRC2G Scripts python de conversion de règles firewall **PfSense** et **OPNSense** en vision graphique des flux. ![pfsense](./img/convert-rules-to-graph.png) ![opnsense](./img/opnsense.png) ## 👋 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é informatique é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](https://pfrest.org/). * Utilisation de l'API intégrée d'OPNSense. * Génération des flux graphiques avec la bibliothèque python **Graphviz**. * Génération d'un fichier PDF A4 avec une page par interface. * Distinction entre un VLAN/réseau de destination et un hôte de destination. * Mapping des interfaces, des ports et des destnations. * Coloration pour les actions PASS et BLOCK. * Coloration pour les règles présentes mais désactivées. ## 💾 Installation 1. Prérequis Installation des bibliothèques Python : ```Bash pip install requests graphviz reportlab ``` 2. pfSense Installation de **pfSense REST API Package** : [https://github.com/jaredhendrickson13/pfsense-api?tab=readme-ov-file#quickstart](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. 3. Configuration du script Récupérez les fichiers **pyfrc2g.py** et **config.py** correspondant à votre passerelle (pfSense ou OPNSense). Configurez l'**URL** de votre passerelle et vos **credentials** dans le fichier **pyfrc2g.py**. Exemple avec pfSense : ```python # --- CONFIG --- PFS_URL = "https://pfs01.domaine.lan/api/v2/firewall/rules" PFS_TOKEN = "VOTRE_CLE_GENEREE_AVEC_PFSENSE_REST_API" PASSERELLE = "PFS01" ``` Pour OPNSense vous devez également renseigner le nom des interfaces car l'API ne permet pas de récupérer les règles qu'interface par interface (elles sont visibles sur *Interfaces > Assignations*) Exemple avec OPNSense : ```python OPNS_URL = "https:///upload/" ``` 3. Remarques * Lors de la récupération des hôtes de destination, l'API de pfSense ne permet pas de connaitre le réseau dans lequel se situe celui-ci. J'ai donc commenté mes hôtes de destination sur pfSense en renseignant dans quel VLAN était celui-ci. * Pour les hôtes de destination se situant en dehors de mon infrastructure interne, j'ai renseigné dans pfSense *EXT_* devant chaque nom d'alias de ces hôtes. * OPNSense expose à travers son API les règles de manière complètement différente de celle de pfSense. À ce jour je n'ai pas trouvé comment récupérer les règles désactivées. Les règles flottantes auto-générée ne sont également pas simples à récupérer. ## 📝 Todo * Améliorer le code (je ne suis pas dev et ça se voit sur le côté bordélique). * Automatiser le script avec génération des graphiques uniquement pour les règles ayant changées. * Notification des admins quand génération des graphiques. * Insérer le VLAN de destination devant un hôte de destination. * ~~Faire la même chose avec OPNSense~~. * (en cours) Envoyez les preuves dans [CISO Assistant](https://intuitem.com/fr/ciso-assistant/).