浅谈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个。这个二维数组是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_OUTFORWARD

   NAT表:与本机无关。主要处理源与目的地址IP和端口的转换。有三种链:PRE_ROUTINGLOCAL_OUTPOST_ROUTING

   Mangle表:用于高级路由信息包,如包头的更改。

   

    这就是netfilter的整一个框架了。

1.2浅析连接跟踪及连接跟踪辅助模块

1.2.1 连接跟踪hook点的函数分布

 

图一  连接跟踪hook点的函数分布图

 

利用上图及代码可知整个数据包有三个流向:(1PRE_ROUTING → FORWARD → POST_ROUTING;(2)PRE_ROUTING → LOCAL_IN;(3)LOCAL_OUT →POST_ROUTING。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值