rss logo

OpenBSD : Filtrage géographique avec PacketFilter

OpenBSD Logo

J'utilise souvent l'OS robuste et sécurisé OpenBSD, avec le pare-feu PacketFilter pour protéger mes services. Étant donné que de nombreuses solutions commerciales prennent en charge le filtrage géographique, j'ai trouvé intéressant de l'implémenter moi-même sur ce système.

En activant le filtrage géographique, nous pouvons par exemple masquer nos services à certaines parties du monde et ainsi améliorer la sécurité.

Pour ce faire, nous utiliserons les tables PacketFilter et les listes de blocs IP de pays disponibles sur le site web https://www.ipdeny.com/.

Choses à savoir

Les listes d'adresses ip des pays sont disponibles sur https://www.ipdeny.com/ et sont téléchargeables en respectant le format d'URL suivant : https://www.ipdeny.com/ipblocks/data/countries/CODE_PAYS.zone.

Par exemple, si nous voulons accéder à la liste des États-Unis, qui ont le code de pays us, nous devons aller sur https://www.ipdeny.com/ipblocks/data/countries/us.zone.

  • Pour télécharger la liste dans le dossier /etc/tables, nous pouvons utiliser la commande wget :
root# wget --no-check-certificate https://www.ipdeny.com/ipblocks/data/countries/us.zone -O /etc/tables/us.zone
  • Nous pouvons vérifier le nombre de lignes présentes dans le fichier en utilisant la commande suivante :
root# wc -l /etc/tables/us.zone 65296 /etc/tables/us.zone

Règles PacketFilter

Maintenant que nous avons notre liste de Filtrage IP, nous pouvons ajouter nos règles de filtrage.

  • Par exemple, ici, nous n'autorisons que les adresses des États-Unis à accéder à notre serveur web :
wan = "em0" # Assigns the network interface 'em0' to the variable 'wan' # Sets the maximum number of entries allowed in the PF table to 200,000 (which is already the default) set limit table-entries 200000 # Creates a new PF table named 'USA' and loads its contents from the file '/etc/tables/us.zone' table <USA> persist file "/etc/tables/us.zone" # Allows incoming HTTP traffic from the 'USA' table to the IP address 192.168.1.10 on ports 80 and 443 pass in quick on { $wan } proto tcp from <USA> to 192.168.1.10 port { 80, 443 } # Blocks incoming HTTP traffic from any source to the IP address 192.168.1.10 on ports 80 and 443 block in quick on { $wan } proto tcp from any to 192.168.1.10 port { 80, 443 }
  • Recharger la configuration de PacketFilter :
root# pfctl -f /etc/pf.conf

La suite?

Nous pouvons ajouter une entrée de crontab pour mettre à jour automatiquement le fichier /etc/tables/us.zone. Pour cela, vous pouvez vous référer à mon autre tutoriel ici.

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

contact mail address