linux防火墙实现技术比较
2006-04-03 12:36:40 来源:WEB开发网此部分详细的分析可参见我早期的一份文章【9】。
3.2 iptables
A Packet Traversing the Netfilter System:
--->PRE------>[ROUTE]--->FWD---------->POST------>
Conntrack | Filter ^ NAT (Src)
Mangle | | Conntrack
NAT (Dst) | [ROUTE]
(QDisc) v |
IN Filter OUT Conntrack
| Conntrack ^ Mangle
| | NAT (Dst)
v | Filter
2.4内核中的防火墙系统不是2.2的简单增强,而是一次完全的重写,在结构上发生了非常大的变化。相比2.2的内核,2.4的检测点变为了五个。
在每个检测点上登记了需要处理的函数(通过nf_register_hook()保存在全局变量nf_hooks中),当到达此检测点的时候,实现登记的函数按照一定的优先级来执行。严格的从概念上将,netfilter便是这么一个框架,你可以在适当的位置上登记一些你需要的处理函数,正式代码中已经登记了许多处理函数(在代码中搜nf_register_hook的调用),如在NF_IP_FORWARD点上登记了装发的包过滤功能。你也可以登记自己的处理函数,具体例子可参看【8】与【10】。
3.3 FW1
FW1是chekpoint推出的用于2.2内核的防火墙。由于其发布的模组文件带了大量的调试信息,可以从反汇编的代码中窥探到到许多实现细节。
FW1通过dev_add_pack的办法加载输入过滤函数,如果对这个函数不熟悉,请参看【14】。但是此处有个问题:在net_bh()中,传往网络层的skbuff是克隆的,即
skb2=skb_clone(skb, GFP_ATOMIC);
if(skb2)
pt_prev->func(skb2, skb->dev, pt_prev);
这样的话如果你想丢弃此包的话,光将其free掉是不够的,因为它只是其中的一份拷贝而已。
更多精彩
赞助商链接