分类:
2012-04-21 20:37:01
netfilter/iptables的体系结构可以分为以下三个大部分:
1)netfilter的HOOK机制
netfilter的通用框架不依赖于具体的协议,而是为每种网络协议定义一套HOOK函数。这些HOOK函数在数据报经过协议栈的几个关键点时被调用,在这几个点中,协议栈将数据报及HOOK函数标号作为参数,传递给netfilter框架。
对 于它在网络堆栈中增加的这些HOOK,内核的任何模块可以对每种协议的一个或多个HOOK进行注册,实现挂接。这样当某个数据报被传递给 netfilter框架时,内核能检测到是否有任何模块对该协议和HOOK函数进行了注册。若注册了,则调用该模块的注册时使用的回调函数,这样这些模块 就有机会进行检查、修改、丢弃该数据报及指示netfilter将该数据报传入用户空间的队列等操作。
由此可见,HOOK提供了一种方便的机制:在数据报通过Linux内核网络协议栈的不同位置上截获和操作处理数据报。
HOOK在netfilter框架中至关重要,后面将会对其进行详细分析。
2)iptables基础模块
iptables基础模块实现了三个表来筛选各种数据报,具体地讲,Linux2.4内核提供的这三种数据报的处理功能是相互间独立的模块,都基于netfilter的HOOK函数和各种表、链实现。这三个表包括:filter表,nat表以及mangle表。
本文主要分析具有包过滤功能的filter表,对nat表及mangle表只做简要介绍。
3)具体功能模块
①数据报过滤模块;
②连接跟踪模块(Conntrack);
③网络地址转换模块(NAT);
④数据报修改模块(mangle);
⑤其它高级功能模块。
具有包过滤功能的filter表是在数据报过滤模块中实现的,所以后面的内容会对该模块做详细分析,但对其它模块只做简单介绍。
netfilter/iptables总体架构如图2-1所示: