现在您可能觉得创建规则集的系统有些过分的死板和僵化。总之,在一个给定的时间内有一些相关过滤和重定向的类似数据并没有必要在配置文件里重新为它们写类似的规则! 非常正确, 而PF也提供了处理这类情况的方法。
表格(Tables)就具有这样的特性, 它被用来表示一些IP地址的列表,使用表格避免了重新导入整个的规则集,而且它便于快速检查。
Table名称总是用“<”和“>”括起来 (< Table name >), 像这样:
代码: 全选
table <clients> persist { 192.168.2.0/24, !192.168.2.5 }
这里的关键字 persist 用来确认该表格的存在,即便当前没有任何规则引用它。值得一提的是你也可以从文件里导入表格,在这些文件中每项单独占用一行, 就像这个文件 /etc/clients
代码: 全选
192.168.2.0/24
!192.168.2.5
代码: 全选
table <clients> persist file "/etc/clients"
代码: 全选
pass inet proto tcp from <clients> to any port $client_out
代码: 全选
$ sudo pfctl -t clients -T add 192.168.1/16
你可以通过一个cron任务opt维护这个表格的在磁盘上的拷贝,也就是在一个固定的时间后将这个表格的内容写入(dump)磁盘, 可以通过命令
代码: 全选
$ sudo pfctl -t clients -T show >/etc/clients
代码: 全选
$sudo pfctl -t clients -T replace -f /etc/clients
一个很常见的例子就是你可以通过cron任务在指定的时间内替换表格的内容以便实现根据IP地址对网络访问进行强制性限制。在某些网络内你甚至可能为每周的每一天设置不同访问规则。所有的限制全基于你的要求以及规则编写。
我们将马上回来介绍一些方便的表格应用, 包括表格与其它一些程序相互呼应的好用法。详说明5
说明5 一个可以与PF的table配合很好的程序就是 DHCP 的进程 dhcpd. 在OpenBSD里, 请参阅dhcpd的用户手册,并着重看一下 -A 和 -L 选项。