ipfw规则( 八 )


控制bridged的包是否允许ipfw,默认为"不是" 。

IPFW2 ENHANCEMENTS
这部分介绍在ipfw1里没涉及到的一些重要的特性 。列举的是对你设置规则有一定影响的内容 。你可以考虑使用这些特性,以便你设置规则的时候有更多的有效途径 。

Handling of non-IPv4 packets
ipfw1将依照规则接受所有非IPv4 的包(仅当net.link.ether.bridge_ipfw=1的时候)像ipfw1一样完成同样的行为,你可以使用以下条例,可以当作你规则栏里的第一条:

ipfw add 1 allow layer2 not mac-type ip

layer2选项可能被看作多余的,但是由是必需的,从layer3到防火墙的包没有了MAC头,则MAC类型的ip模式总要舍去,并且非操作数将使这个规则变成全部通过 。

Address sets
ipfw1不支持地址设置 (看addr/masklen{num,num,...} ).

ipfw1 and ipfw2较小的区别就是,以前指定的允许的地址,像ipno:mask,这里的mask可以是代替bit设置的任意的bitmask。ipfw2不再支持此语法 。

Port specifications
ipfw1 仅允许一个端口范围,当指定TCP and UDP端口时,ipfw2将限制由15个变为10个 。同样在ipfw1里,你只能定义端口,在规则被请求tcp or udp包的时候,用ipfw2你可以提出一个端口的详细说明在匹配所有包的规则里,并且匹配将被尝试仅仅在那些包所带的协议里包括端口的标识符 。

ipfw1里要求第一个端口的进入,是被指定的,就像port:mask,mask可以是任意的16-bit mask.这个语法也是在ipfw2里不用的 。

Or-blocks
ipfw1 不支持 Or-blocks.

keepalives
ipfw1 不产生keepalives为数据 。像一个因果关系,它可以导致一个空闲区域的停止,因为
动态规则的存活时间终止了 。

Sets of rules
ipfw1 不执行规则的设置 。

MAC header filtering and Layer-2 firewalling.
ipfw1 不在MAC头区域进行过滤,也不被调用当包从ether_demux()和ether_output_frame()过来 。sysctl变量net.link.ether.ipfw在这里也不起作用 。

Options
以下设置在ipfw1不支持:

dst-ip, dst-port, layer2, mac, mac-type, src-ip, src-port.

还有ipfw1规则里不支持的:

ipid, iplen, ipprecedence, iptos, ipttl, ipversion, .Cm tcpack,
tcpseq, tcpwin.

Dummynet options
以下设置为dummynet pipes/queues不支持:
The following option for dummynet pipes/queues is not supported:

noerror.

EXAMPLES
这里仅仅给出很小的一个例子的设置 。

BASIC PACKET FILTERING
这个命令加进一个条目,拒绝所有来自cracker.evil.org telnet wolf.tambov.su的端口的tcp包:

ipfw add deny tcp from cracker.evil.org to wolf.tambov.su telnet

这个是拒绝所有的来自此网的用户访问我的主机:

ipfw add deny ip from 123.45.67.0/24 to my.host.org

第一个有效限制访问的办法是使用以下规则:

ipfw add allow tcp from any to any established
ipfw add allow tcp from net1 portlist1 to net2 portlist2 setup
ipfw add allow tcp from net3 portlist3 to net3 portlist3 setup
...
ipfw add deny tcp from any to any

第一条规则会马上匹配普通的TCP包,但是不匹配最开始的SYN包,这些包只由setup规则匹配,也仅仅对source/destination有选择性的 。所有其它的SYN包将由最后的拒绝规则丢弃掉 。

如果你管理一个或更多的子网,你可以用ipfw2语法的优势去指定地址 。如下:

goodguys="{ 10.1.2.0/24{20,35,66,18} or 10.2.3.0/28{6,3,11} }"
badguys="10.1.2.0/24{8,38,60}"

ipfw add allow ip from ${goodguys} to any
ipfw add deny ip from ${badguys} to any
... normal policies ...

ipfw1 语法只能为没一个ip独立设置要求,不能像上面那样 。

DYNAMIC RULES
为了保护TCP包的溢出攻击,安全的使用此动态规则:

ipfw add check-state
ipfw add deny tcp from any to any established

推荐阅读