- 论坛徽章:
- 36
|
一、连接跟踪的预备知识
连接跟踪的概念及作用,这里都不做介绍了。下面先说一下连接跟踪在Netfilter中起效的hook点以及对应的hook函数。- /* [color=Blue]Connection tracking may drop packets, but never alters them, so
- make it the first hook. */
- static struct nf_hook_ops ip_conntrack_in_ops
- = { { NULL, NULL }, ip_conntrack_in, PF_INET, NF_IP_PRE_ROUTING,
- NF_IP_PRI_CONNTRACK };
- static struct nf_hook_ops ip_conntrack_local_out_ops
- = { { NULL, NULL }, ip_conntrack_local, PF_INET, NF_IP_LOCAL_OUT,
- NF_IP_PRI_CONNTRACK };
- /* Refragmenter; last chance. */
- static struct nf_hook_ops ip_conntrack_out_ops
- = { { NULL, NULL }, ip_refrag, PF_INET, NF_IP_POST_ROUTING, NF_IP_PRI_LAST };
- static struct nf_hook_ops ip_conntrack_local_in_ops
- = { { NULL, NULL }, ip_confirm, PF_INET, NF_IP_LOCAL_IN, NF_IP_PRI_LAST-1 };[/color]
复制代码 以上是连接跟踪在Netfilter中注册的hook点,对应的hook函数,以及函数调用的优先级,也可以通过图ip_conntrack_hook直观的看出来.
二、链接跟踪建立的三条路径
根据上面注册的Hook点,可以总结出链接跟踪的建立有三条路径:
1. 转发的包,见图Foward.jpg
如果是新的包,在PREROUTING处生成连接记录,通过POSTROUTING后加到hash表
2. 本地接收的包,见图localin.jpg
在PREROUTING处生成连接记录,在LOCAL_IN处把生成的连接记录加到hash表
3. 本地发送的包,见图localout.jpg
在LOCAL_OUT处生成连接记录,在POSTROUTING处把生成的连接记录加到hash表
下面就按照本地发包和接收包的路径来分析连接跟踪的整个流程。
[ 本帖最后由 Godbach 于 2008-12-26 16:13 编辑 ] |
|