浅谈Netfilter框架原理(一)
1.1浅谈Netfilter框架原理1.1.1 撑起netfilter的结构数据 这个二维数组是在Linux2.6.34\include\linux\netfilter.h中定义的。第一维的NFPROTO_NUMPROTO是表示Linux下的协议簇,总共有32个吧。第二维的NF_MAX_HOOKS是表示有几个hook点,虽然系统给定义了8个,但是常用到这有5个。
1.1浅谈Netfilter框架原理
1.1.1 撑起netfilter的结构数据
这个二维数组是在Linux2.6.34\include\linux\netfilter.h中定义的。第一维的NFPROTO_NUMPROTO是表示Linux下的协议簇,总共有32个吧。第二维的NF_MAX_HOOKS是表示有几个hook点,虽然系统给定义了8个,但是常用到这有5个。这个二维数组是netfilter对应的协议所挂载的hook点的入口地址,每个二维数组还会维护一条链表,每个链表上都是一些钩子函数,数据包要通过这些钩子函数的遍历检测匹配才能决定数据的流向。
1.1.2 Hook点的分布
这几个hook点对应了上面所讲的二维数组的第二维,它们分别是:
注:在Linux2.6.34\include\linux\netfilter.h中定义的
看着就很明白了,只要对号入座就可以了。而每个hook点又会有一个链表,链表上有好几个钩子函数,这些函数的执行是有优先级,优先级越高越先执行(优先级值越小,优先级越高)。下面就附上一张大牛绘制的一张图吧,这张图像已经非常详细了,我就这边转载用用了。
再附上一张Linux内核对优先级定义图吧,这样可以对比的理解:
注:该优先级在Linux2.6.34\include\linux\netfilter_ipv4.h中定义的
从图中可以看出netfilter主要是包含三张表,分别是filter表、NAT表、mangle表。
Filter表:处理与本机有关的数据包,是默认表,包含有三种链:LOCAL_IN、
LOCAL_OUT、FORWARD。
NAT表:与本机无关。主要处理源与目的地址IP和端口的转换。有三种链:PRE_ROUTING、LOCAL_OUT、POST_ROUTING。
Mangle表:用于高级路由信息包,如包头的更改。
这就是netfilter的整一个框架了。
1.2浅析连接跟踪及连接跟踪辅助模块
1.2.1 连接跟踪hook点的函数分布
图一 连接跟踪hook点的函数分布图
利用上图及代码可知整个数据包有三个流向:(1)PRE_ROUTING → FORWARD → POST_ROUTING;(2)PRE_ROUTING → LOCAL_IN;(3)LOCAL_OUT →POST_ROUTING。
更多推荐
所有评论(0)