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).