[OpenBSD]

[上一小节: 列表和宏] [总目录] [下一小节: 包过滤]

PF: 表格


目录


介绍

一个表格被用来保存一组 IPv4 和/或 IPv6 地址。查询一个表格比查询几个列表快很多,并且消耗更少的内存及处理器时间。基于这个原因, 表格是保存大量地址的理想方案, 当你查询一个包含50, 000个地址的表格时仅比查询包含50个地址的表格稍微多用一点时间。表格可以被用于以下方式:

表格可以在 pf.conf 中或通过使用 pfctl(8) 创建。

配置

pf.conf中, 使用table指令创建表格。 每个表格全可以指定为下面的这些属性:

例子:

table <goodguys> { 192.0.2.0/24 }
table <rfc1918> const { 192.168.0.0/16, 172.16.0.0/12, \
   10.0.0.0/8 }
table <spammers> persist

block in on fxp0 from { <rfc1918>, <spammers> } to any pass  in on fxp0 from <goodguys> to any

地址可以使用否定(或 "not") 修饰符来指定, 例如:

table <goodguys> { 192.0.2.0/24, !192.0.2.5 }

goodguys表格将匹配所有 192.0.2.0/24 网络内的地址, 除了192.0.2.5。

注意, 表格名总是在< > 符号内。

表格也可以放置在一个包含了一系列IP地址和网络地址的文本文件中:

table <spammers> persist file "/etc/spammers"

block in on fxp0 from <spammers> to any

这个 /etc/spammers 文件包含了一系列将被阻止的IP地址和/或 CIDR 网络地址, 一个地址用一行。所有以 # 开头的行会被认为是注释并忽略。

pfctl调控

表格可以在运行中使用 pfctl(8) 进行操控。例如, 为上面创建的 <spammers> 表格增加一些项目:
# pfctl -t spammers -T add 218.70.0.0/16

如果这个 <spammers> 表格不存在, 上面的命令也会创建它。要列出一个表格内的地址:

# pfctl -t spammers -T show
-v 变量可以与 -Tshow 一同使用, 它用来显示每个表格项目的统计。从表格中删除一个地址:
# pfctl -t spammers -T delete 218.70.0.0/16

使用pfctl调控表格的更多信息请参阅 pfctl(8) 用户手册。

指定地址

除了用IP地址进行指定外, 主机也可以通过它们的主机名来进行指定。当主机名被解析成一个IP地址后, 所有的IPv4 和 IPv6地址全被置入这个表格内。也可以通过一个有效的接口名或self关键字将IP地址加入到一个表格中, 那么这个表格就会 分别包含那个接口或机器(包含loopback地址在内)的所有IP地址。

一个限制是当你在表格中指定 0.0.0.0/0 0/0 这样的地址时是无法工作的, 你可以直接写出这个地址或者使用一个

地址匹配

在一个表格中检查一个地址时将会返回一个最贴近的匹配项。它允许产生像这样的表格:

table <goodguys> { 172.16.0.0/16, !172.16.1.0/24, 172.16.1.100 }

block in on dc0 all pass  in on dc0 from <goodguys> to any

只有来自与表格<goodguys>相匹配的那些地址的数据包才可以通过 dc0 进入:

[上一小节: 列表和宏] [总目录] [下一小节: 包过滤]


[back] www@openbsd.org
$OpenBSD: tables.html, v 1.24 2008/10/31 16:49:34 nick Exp $