linux netfilter IP层的HOOK点

netfilter的架构就是,在网络协议栈上放置一些检测点(HOOK),而在检测点放置一些处理函数,当数据经过这些检测点时触发这些处理函数。

ipv4在IP层的HOOK点有5个:

enum nf_inet_hooks {
	NF_INET_PRE_ROUTING,
	NF_INET_LOCAL_IN,
	NF_INET_FORWARD,
	NF_INET_LOCAL_OUT,
	NF_INET_POST_ROUTING,
	NF_INET_NUMHOOKS
};


他们的先后顺序如下图所示:

linux netfilter IP层的HOOK点_第1张图片
 

 

1、对于进入的数据包,首先触发NF_INET_PRE_ROUTING HOOK点;然后查找路由信息,判定是进入本机的数据包还是需要转发的数据包
   a)对于进入本机的数据包,触发NF_NET_LOCAL_IN HOOK点,交给上层协议继续进行处理
   b)对于需要转发的数据包,触发NF_INET_FORWARD HOOK点;然后根据路由信息决定怎样发出数据,并触发NF_INET_POST_ROUTING HOOK点,然后交给下层协议做数据包的发出操作
2、对于由本机发出的数据包,首先查找路由信息(决定怎样发出数据等);然后触发NF_INET_LOCAL_OUT HOOK点;根据路由信息决定怎样发出数据,并触发NF_INET_POST_ROUTING HOOK点,然后交给下层协议做数据包的发出操作


可使用netfilter框架在IP层的HOOK点上注册hook_operation,来完成不同的操作;如filter,nat,mangle,conntrack等

 

 

你可能感兴趣的:(linux netfilter IP层的HOOK点)