Bloquer une liste de réseaux - pfsense

De Wiki doc


Cette documentation a pour but d'expliquer une méthode d'ajout de règles bloquant une liste de réseaux.

Contexte

Imaginons que l'on ai besoin de bloquer un ensemble de réseaux dans pfSense. Le faire via l'interface WEB relèverai du supplice si la liste est longue car il n'existe pas d'option pour un ajout massif dans celle-ci. L'idée va être d'automatiser la génération de commandes pour configurer le pare-feu à partir de deux listes en fichier texte:

  • ip.txt, qui contient les adresses de réseaux à bloquer
  • cidr.txt, qui contient les CIDR associés aux adresses

Moyen

L'utilitaire easyrule en ligne de commande permet d'ajouter des règles dans le pare-feu mais il comporte plusieurs limitations qui vont nous imposer d'ajouter des étapes dans nos manipulations. En effet, les seules règles pouvant êtres ajoutées par ce biais sont des règles d’acceptation (pass). Il faudra donc ruser pour toutes les passer en block.

Une règle easyrule se présente comme suite:

easyrule pass <interface> <ip source> <ip destination>

Nous allons donc avoir des règles ressemblant à cela:

easyrule pass lan any 192.168.1.0/24 219.56.171.0/24

192.168.1.0/24 étant notre réseau local et 219.56.171.0/24, le réseau à interdire.

ASTUCE

Il est possible de remplacer <ip source> ou <ip destination> par le mot clé lan pour parer un éventuel changement de réseau local.

Solution

Script de génération

J'ai développé un petit script (pfsense-règles.sh) pour générer automatiquement l'ensemble des commandes permettant de créer les règles de filtrage. Il prend en source les deux fichiers texte ip.txt et cidr.txt pour renvoyer dans la sortie stdout les x lignes de commandes permettant d'ajouter les règles de pare-feu (il suffit alors de les copier/coller dans le shell de pfSense).

bash pfsense-règles.sh

Nous appliquons ces commandes à l'issue.

Ceci fait, l'ensemble des règles interdisant les IP demandées est ajouté dans le pare-feu, elles sont donc visibles dans l'interface WEB. Il ne reste plus qu'à les passer en block pour les rendre effectives.

Blocage des flux

L'interface WEB ne permettant pas de modifier plusieurs règles simultanément, il va falloir une fois de plus utiliser la ligne de commande pour régler le problème sans y passer la journée.

La configuration du pare-feu de pfSense est située dans le fichier /conf/config.xml.

Il va falloir substituer l'ensemble des occurrences <type>pass</type> par <type>block</type> via la commande suivante:

sed -e 's/<type>pass<\/type>/<type>block<\/type>/' /config/config.xml

INFORMATION

Si vous avez mis une règle d’acceptation du trafic en fin de liste comme expliqué dans le premier point de cette page. Il faudra mettre la dernière occurrence à pass (puisque c'est elle qui autorise tout le reste) pour que le trafic soit autorisé vers Internet.

Un redémarrage de pfSense applique le changement au système (ne pas oublier de vérifier que la règles d’acceptation globale soit placée après les règles de blocage pour ne pas rendre ce dernier caduc).

Sources du script