[上一小节: 地址池和负载均衡] [总目录] [下一小节: 记录]
给数据包贴标签是一种给数据包贴上内部标识符以便以后可以在过滤和转换规则标准中应用的一种方法。通过贴标签, 可实现这样的目的, 例如在接口间建立"信任"以及确认是否数据包经过转换规则处理。它还可以使过滤方式从基于规则的过滤变成基于策略的过滤。
pass in on $int_if all tag INTERNAL_NET
这条规则将给所有匹配上述规则的数据包贴上INTERNAL_NET标签。
一个标签也可以通过 macro 指派。例如:
name = "INTERNAL_NET" pass in on $int_if all tag $name
同样也可以使用一组预定义的macro。
这些macros将在规则集载入时被扩展, 而不是运行时才扩展。
为数据包贴标签遵循如下规则:
使用下面的规则集举例。
(1) pass in on $int_if tag INT_NET (2) pass in quick on $int_if proto tcp to port 80 tag INT_NET_HTTP (3) pass in quick on $int_if from 192.168.1.5
pass out on $ext_if tagged INT_NET
从$ext_if的出站数据包必须已经贴上了INT_NET 标签才能匹配上面的规则。相反地匹配也可以通过使用! 操作符实现:
pass out on $ext_if ! tagged WIFI_NET
注意策略是如何覆盖所有通过防火墙的通讯的。圆括号内是用于策略的标签。
需要编写过滤及转换规则以便按策略分类数据包。
block all pass out on $ext_if tag LAN_INET_NAT tagged LAN_INET nat-to ($ext_if) pass in on $int_if from $int_net tag LAN_INET pass in on $int_if from $int_net to $dmz_net tag LAN_DMZ pass in on $ext_if proto tcp to $www_server port 80 tag INET_DMZ pass in on $ext_if proto tcp fromto port smtp \ tag SPAMD rdr-to 127.0.0.1 port 8025
现在设置定义策略的规则。
pass in quick on $ext_if tagged SPAMD pass out quick on $ext_if tagged LAN_INET_NAT pass out quick on $dmz_if tagged LAN_DMZ pass out quick on $dmz_if tagged INET_DMZ
现在建立了完整的规则集, 修改也只是修改分类规则, 例如, 如果DMZ区增加了一台 POP3/SMTP 服务器, 就需要为POP3和SMTP通讯增加分类规则, 像这样:
mail_server = "192.168.0.10" ... pass in on $ext_if proto tcp to $mail_server port { smtp, pop3 } \ tag INET_DMZ
Email通讯现在作为 INET_DMZ 策略项的一部分会被放行。
完整的规则集:
# macros int_if = "dc0" dmz_if = "dc1" ext_if = "ep0" int_net = "10.0.0.0/24" dmz_net = "192.168.0.0/24" www_server = "192.168.0.5" mail_server = "192.168.0.10" table <spamd> persist file "/etc/spammers" # classification -- classify packets based on the defined firewall # policy. block all pass out on $ext_if tag LAN_INET_NAT tagged LAN_INET nat-to ($ext_if)
pass in on $int_if from $int_net tag LAN_INET
pass in on $int_if from $int_net to $dmz_net tag LAN_DMZ
pass in on $ext_if proto tcp to $www_server port 80 tag INET_DMZ pass in on $ext_if proto tcp from <spamd> to port smtp \
tag SPAMD rdr-to 127.0.0.1 port 8025
# policy enforcement -- pass/block based on the defined firewall policy. pass in quick on $ext_if tagged SPAMD pass out quick on $ext_if tagged LAN_INET_NAT pass out quick on $dmz_if tagged LAN_DMZ pass out quick on $dmz_if tagged INET_DMZ
# ifconfig bridge0 rule pass in on fxp0 src 0:de:ad:be:ef:0 \ tag USER1
然后在pf.conf里:
pass in on fxp0 tagged USER1
[上一小节: 地址池和负载均衡] [总目录] [下一小节: 记录]