[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

地址也可以用“非”来指定,例如:

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

goodguys 表将匹配除 192.0.2.5 以外 192.0.2.0/24 网段的所有地址。

注意表名总是在符号 < > 的里面。

表也可以由包含 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 可以与 -T show 一起使用,来显示每个地址的统计数据。 从表中删除地址:
# pfctl -t spammers -T delete 218.70.0.0/16

要获得更多使用 pfctl 操作表的信息,请参阅 pfctl(8) 手册页。

指定地址

除了使用 IP 地址来指定主机外,也可以使用主机名。当主机名被解析成 IP 地址时, 所有的 IPv4 和 IPv6 地址都会被插进表中。IP 地址也可以通过合法的接口名称或者 self 关键字输入表中。这样的表会分别包含接口或者机器上(包括 loopback 地址)上配置的所有 IP 地址。

一个限制就是当指定的地址是 0.0.0.0/00/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

任何进入 dc0 的数据包都会把它的源地址和表 <goodguys> 中的地址进行匹配:

[上页: 列表与宏] [索引] [下页: 包过滤]


[back] www@openbsd.org
$OpenBSD: tables.html,v 1.4 2008/11/26 08:25:03 tobias Exp $