ipfw可以从协议堆里的很多地方被调用,在个别系统参数的控制下,最重要的要明白,何时为了设计固有的规则表才发生。ipfw被调用的如下表示,一起的还有
控制它的sysctl 变量
^ to upper layers V
| |
+----------->;-----------+
^ V
[ip_input] [ip_output] net.inet.ip.fw.enable=1
| |
^ V
[ether_demux] [ether_output_frame] et.link.ether.ipfw=1
| |
+-->;--[bdg_forward]-->;--+ net.link.ether.bridge_ipfw=1
^ V
| to devices |
有图所示,数据包穿过防火墙的次数可以在0-4之间变化,这依赖于数据包的源,目的地和系统配置。在每一个位置里,包只被属于自己所在层区域的配置检验。也就是说,来访的数据包包含MAC头,当ipfw在
规则表总是在执行的,无论是ipfw的调用的地方,还是包来源的地方。如果一个规则包含一些匹配模式或对调用地方无效的行为(例如当ipfw在ip_input处被调用,去匹配一个MAC头)匹配模式将不匹配。无论如何,一个没有操作数的模式将导致,此模式永远匹配那些有歹意的数据包。这是程序员的责任,如果需要,写一个恰当的规则表,以区分有可能涉及到的地方,skipto(跳转)可以被使用,例如:
# packets from ether_demux or bdg_forward
ipfw add 10 skipto 1000 all from any to any layer2 in
# packets from ip_input
会员注册
会员登录
个人空间