根据 OpenBSD 关于“Tables”的常见问题解答(http://www.openbsd.org/faq/pf/tables.html),没有persist
属性,
当引用该表的最后一条规则被刷新时,内核将自动删除该表。
我不明白这意味着什么,希望能举几个例子来说明它。
答案1
我不是专家,但我相信事情是这样的:
如果你的 pf 规则是静态的,那么我看不到使用 persist 的好方法,但如果它们是动态的(意味着你在规则中使用锚点),那么规则就会出现和消失。当规则集发生更改并且不再有任何规则引用它们时,持久性是使表保持活动状态的原因。
我认为锚点是您的 pf 规则集的一种“导入”语句,因此根据您使用该锚点引入的内容,您定义的表可能会被引用,也可能不会被引用。
作为如何动态使用锚点的一个示例,请考虑:
$ echo "my super cool pf rule that uses table 'foo' that I want inserted" | pfctl -a nameOfAnchor -f -
这将直接从标准输入读取新规则,并将“我想要插入的超级酷的 pf 规则”放入您的规则集中,作为锚点“nameOfAnchor”的替换。现在,在您使用 pfctl 动态添加此规则之前,之前在规则集中定义的表“foo”可能不会被任何内容引用。如果“foo”使用了 persist 关键字,那么你就可以开始了。否则,当您即时插入此新规则时,“foo”将不存在,一切都会崩溃。 :)
顺便说一句,第二版。 Michael Lucas 的 Absolute OpenBSD 在接近尾声时有一个很好的章节。您将从那里获得有关如何使用锚点的更多详细信息。
而且,有关 OpenBSD 的 PF 防火墙及其功能的更集中的参考,您可以参考 Peter M. Hansteen 的“PF 之书”第 3 版。 他还有关于 PF 的在线材料。