netfilter各个HOOK的关系简介(笔记中已经总结到函数调用流程中)

netfilter各个HOOK的关系


最近哥们儿们对网络内核问的问题逐渐增多,本人 从前分析过2。2的网络源代码,并且对BSD也有所了解。但是我也注意到由于2。4对于SMP更好的支持以及改写了防火墙部分代码,因而网络源码IP层的变化较大。本人在北京理工大学xumei_bit网友邀请下帮助他(她)分析防火墙部分。因此正好也可以借此机会,将自己的拙作与大家共享。

首先说一说netfilter的几个HOOK的关系。目前总共有5个HOOK:PREROUTING POSTROUTING INPUT FORWARD OUTPUT.与2。2的ipchains相比,多了PRTEROUTING和POSTROUTING,它们的出现与对NAT的支持有关。

现在假设物理网络上来了一个ip分组。这个分组有ip_rcv函数接收,该函数最后一个宏将控制权交给PREROUTING规则链处理。如果该分组没有被过滤,则ip_rcv_finish()函数查路由表,并且判断改分组是发给本地机器还是转发给另一个网络。
如果是发给本地机器,则调用ip_local_deliver()。该函数在最后调用防火墙宏,处理INPUT规则链。处理完后交给传输层,直至应用层中的用户进程。
如果是转发,在ip_rcv_finish(),会调用路由表函数ip_route_input()后将控制权交给ip_forward()。这个函数会通过防火墙宏将执行FORWARD规则链中的规则。最后由ip_forward_finish()函数负责调用ip_send()将分组发出。但是发出之前会通过防火墙宏执行POSTROUTING中的规则,然后将分组交给驱动程序放到物理网络上。
现在还有一个HOOK没有说,OUTPUT.。当本地机器要发送分组时,当然就会在POSTROUTING之前先处理OUTPUT规则连了。

你可能感兴趣的:(netfilter各个HOOK的关系简介(笔记中已经总结到函数调用流程中))