LOG de PF:

https://www.openbsd.org/faq/pf/logging.html

Manipulation en ligne de commande avec pfctl

La commande pfctl accepte en paramètre exactement les mêmes types d'informations comme adresse (adresses IP, noms DNS, interfaces, …) que cité précédemment. Ajoutons que celle-ci n'est d'ailleurs pas cantonnée à l'unique manipulation des tables.

Les exemples qui suivent seront basés sur la déclaration d'une table nommée blacklist visant à interdire les paquets de certaines adresses IP suite à des activités plus ou moins obscures :

table <blacklist> { 125.60.86.214 208.159.106.199 81.237.54.31 76.89.10.213 }

Limitations de pfctl

Il faut savoir que pfctl est soumis à certaines restrictions de la part du système et de l'implémentation de la commande elle-même :

La commande pfctl n'altère que le contenu des tables en mémoire et ne répercute en aucun cas les différents changements demandés sur un quelconque fichier de configuration. Si vous avez besoin de synchroniser ces modifications en vue de les réappliquer au prochain démarrage de Packet Filter vous devrez le faire manuellement ou éventuellement à l'aide d'un script.

Il vous sera impossible d'agir sur les tables à l'aide de pfctl si le niveau de sécurité du noyau atteint la valeur 2 sur NetBSD ou OpenBSD et la valeur 3 pour FreeBSD. Cette restriction concerne de manière plus générale les règles de filtrage qui sont ainsi chargées une bonne fois pour toutes avant le changement de ce niveau de sécurité.

Lister les adresses d'une table

Vous pouvez à tout moment consulter le contenu d'une table à l'aide de pfctl. Illustration avec notre table blacklist :

pfctl (-v) -t blacklist -T show

Qui produira la sortie suivante :

76.89.10.213

81.237.54.31

125.60.86.214

208.159.106.199

Ajouter des adresses à une table

Imaginons maintenant que nous voulions ajouter de nouvelles adresses à notre liste noire :

pfctl (-v) -t blacklist -T add 216.194.109.203 88.240.211.27

Notre table sera désormais composée des six adresses suivantes :

76.89.10.213

81.237.54.31

88.240.211.27

125.60.86.214

208.159.106.199

216.194.109.203

La table sera créée si celle-ci n'existe pas déjà.

Supprimer des adresses à une table

Nous avons besoin de supprimer deux adresses de celle-ci :

pfctl (-v) -t blacklist -T delete 125.60.86.214 76.89.10.213

Cette table contiendra de nouveau quatre adresses :

81.237.54.31

88.240.211.27

208.159.106.199

216.194.109.203

Recharger le contenu de la table

Nous souhaitons réinitialiser une table à partir de sa déclaration :

pfctl (-v) -t blacklist -T load -f /root/pf.conf

L'option -f est nécessaire pour indiquer le fichier où est définie la table en question.

Nous obtenons bien le contenu tel que la table a été déclarée :

76.89.10.213

81.237.54.31

125.60.86.214

208.159.106.199

Remplacer l'ensemble des adresses

Il est possible d'aller un peu plus loin en remplaçant l'intégralité des adresses actuelles d'une liste par de nouvelles. Pour cela on utilise la sous-commande replace, exemple :

pfctl (-v) -t blacklist -T replace 115.79.79.48 143.59.174.112 139.102.183.50

Le contenu sera désormais le suivant :

115.79.79.48

139.102.183.50

143.59.174.112

La sous-commande replace, comme add, crée la table si cette dernière n'existe pas.

Tester si une adresse fait partie de la table

pfctl vous permet même de savoir si une adresse est actuellement définie dans la table donnée :

pfctl (-vv) -t blacklist -T test 115.79.79.48 www.developpez.com

Indiquera qu'il y a correspondance avec l'une des deux adresses (sur 115.79.79.48 et aucune avec www.developpez.com).