rss logo

Comment bloquer des IP avec une liste noire grâce aux tables PF sur OpenBSD

OpenBSD Logo

Ce tutoriel explique comment utiliser le Packet Filter d’OpenBSD (PF) pour bloquer des adresses IP et des plages CIDR chargées depuis une liste noire externe. Le résultat est comparable, dans l’esprit, à PeerBlock sous Windows : les adresses présentes dans un fichier sont chargées dans une table PF puis bloquées par des règles du pare-feu.

Configuration

  • Système : OpenBSD 7.8
  • Pare-feu : Packet Filter (PF)
  • HĂ´te protĂ©gĂ© (exemple) : 192.168.1.10
  • Fichier de liste noire : /etc/blocklist

💡 Note : Les commandes ci-dessous doivent être exécutées en tant que root. Adaptez les macros d’interface, les adresses IP et les ports à votre configuration réseau.

Commandes

Télécharger une liste noire

Vous pouvez télécharger des listes de blocage depuis iBlocklist. Par exemple, téléchargez la liste PrimaryThreats ici. Une fois téléchargée, extrayez et formatez le fichier afin de le rendre compatible avec le Packet Filter d’OpenBSD (PF).

  • TĂ©lĂ©charger la liste :
root# wget "URLtomyremotelist" -O list.zip
  • Extraire la liste :
root# unzip file.zip
  • Formater la liste :
root# cut -d ":" -f2 list.txt | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" > blocklist.tmp
root# sed -i 's/-/:/' blocklist.tmp
root# for i in $(cat blocklist.tmp); do echo "$i"; ipcalc -r "$i" | grep "/" >> blocklist; done
  • Copier le fichier blocklist vers /etc/blocklist :
root# cp blocklist /etc/blocklist

Configuration de Packet Filter

Ajoutez une table ainsi que les règles associées dans /etc/pf.conf. Cet exemple bloque le trafic provenant des adresses de la liste noire vers l’hôte protégé, ainsi que le trafic sortant de cet hôte vers ces mêmes adresses.

wan = "em0"
lan = "em1"
protected_host = "192.168.1.10"

# Augmente le nombre maximal d’adresses stockables dans les tables PF.
set limit table-entries 1000000

# Charge la liste noire externe dans une table persistante.
table <blocklist> persist file "/etc/blocklist"

pass out on $wan
pass in quick on $lan inet proto tcp from $protected_host to any port { 80 443 }

block in  quick log on $wan from <blocklist> to $protected_host
block out quick log on $wan from $protected_host to <blocklist>

Valider et recharger PF

  • VĂ©rifier la syntaxe avant de charger la configuration :
root# pfctl -nf /etc/pf.conf
  • Recharger PF si la vĂ©rification est correcte :
root# pfctl -f /etc/pf.conf
  • Afficher le contenu de la table chargĂ©e :
root# pfctl -t blocklist -T show | more

Mettre à jour la liste noire sans recharger toutes les règles

Après avoir généré un nouveau fichier /etc/blocklist, vous pouvez remplacer uniquement le contenu de la table :

root# pfctl -t blocklist -T replace -f /etc/blocklist

Journalisation

Les règles d’exemple utilisent le mot-clé log, ce qui permet de surveiller les paquets correspondants via l’interface pflog0 avec tcpdump :

  • -n : ne pas rĂ©soudre les adresses IP en noms d’hĂ´tes
  • -e : afficher les en-tĂŞtes de couche liaison
  • -ttt : afficher les horodatages avec la date et l’heure
root# tcpdump -n -e -ttt -i pflog0
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

contact mail address