
图5.1 IPV4的功能点在各检查点上注册的结构
(图中conntrack代表连接跟踪;Filter代表包过滤;NAT(src)代表源地址转换,NAT(dst)代表目的地址转换;Mangle是LINUX2.4.x中新增的一个功能,完成对数据包的检查,但是不对数据包做禁止或放行的判断,与Filter不同。Mangle在LINUX2.4.18之前的实现中只在NF_IP_PRE_ROUTING,NF_IP_LOCAL_OUT两个检查点上注册了nf_hook_ops结构,在LINUX2.4.18之后的实现中在五个检查点上都注册了nf_look_ops结构。)
图中在每个检查点上,nf_hook_ops结构按调用的先后顺序从上而下排列。可以看到相同的功能点在不同的检查点上它的调用顺序并不相同,这与功能点所做的动作有关。比如在NF_IP_LOCAL_IN上假设Conntrack在Filter之前,如果数据包的状态在Conntrack中被记录而在Filter中被禁止,那么与这个数据包相关的状态就不会完整,浪费了一个Conntrack的结构,所以应该先调用Filter,如果它的返回值是NF_ACCEPT才调用Conntrack。
功能点上注册的ipt_table,ipt_match,ipt_target,nf_sockopt_ops结构如下表所示:
| 功能点名称 |
ipt_table |
ipt_match |
ipt_target |
nf_sockopt_ops |
| Filter |
packet_filter |
|
|
|
| Nat |
nat_table |
|
ipt_snat_reg ipt_dnat_reg |
|
| Conntrack |
|
|
|
so_getorigdst |
| Mangle |
packet_mangler |
|
|
|
表5.1 功能点注册的数据结构
值得指出的是连接跟踪(Conntrack)没有注册任何规则表,说明它不需要规则来决定是否要作连接跟踪。同时它又注册了一个nf_sockopt_ops结构,这个结构处理参数SO_ORIGINAL_DST,用于得到透明代理的目的地址。有关地址转换和连接跟踪的详细分析会在以后的文章中介绍。
6. 小结
LINUX2.4.x中的网络安全实现比LINUX2.2.x有了明显的进步。首先是IPV4协议栈中的检查点的安排更加合理,避免在实现各功能点时不必要的函数调用。其次它的架构可扩展性很强。把功能实现和框架分离,使功能实现时不必修改框架而只是注册相应的结构就可完成。还有就是在这个网络安全框架中实现的功能也比LINUX2.2.x丰富,支持的协议栈的数量也比LINUX2.2.x多。在这里我们只分析了LINUX2.4.x网络安全实现的大概情况,具体的某个功能的实现会在后面的文章中分析,通过这些分析,我们将学会如何在LINUX2.4.x的网路安全框架中添加自己想要实现的功能,如何利用现有实现中的资源而有避免与现有的实现冲突。
作者简介:林风,独立撰稿人。熟悉LINUX网络安全技术。比较感兴趣的方向是网络协议栈的实现。写文章,是为整理思路,发现问题,与更多人分享经验,知识,或者教训。邮件地址是droplet@163.net,欢迎批评,鼓励或指正。
(责任编辑:宋红伟)
如果您对本文有任何疑问或者建议,请到讨论区发表您的意见:
>>
论坛入口 <<
上一篇:
分级防御对Linux服务器的攻击 下一篇:
黑客高级技巧 Linux后门技术及实践
【文章评论】
【收藏本文】
【推荐好友】
【打印本文】
【我要投稿】 【论坛讨论】