首先说一说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规则连了。
阅读(1573) | 评论(0) | 转发(0) |