欢迎来到天天文库
浏览记录
ID:33617054
大小:191.00 KB
页数:10页
时间:2019-02-27
《netfilter 架构分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Netfilter架构分析--基于Linux3.2.0一、全局图在文件net/netfilter/core.c中定义了一全局变量nf_hooks,用于记录钩子点。nf_hooks第一维代表协议数,第二维代表钩子数。structlist_headnf_hooks[NFPROTO_NUMPROTO][NF_MAX_HOOKS]__read_mostly;net/netfilter/core.cnf_hooks中每个元素都是一个链表list_headEXPORT_SYMBOL(nf_hooks);nf_hookslistlistlist
2、listlistlistlistlistlistinclude/linux/netfilter.h钩子点结构体,其中的hook是钩子函数nf_register_hook()nf_hook_opsinclude/linux/netfilter.hxt_table结构体,用于管理过滤规则listnet/netfilter/core.c调用nf_register_hook()将钩子点挂载到全局变量nf_hooks的某个list上hookownerpfhooknumprioritylistvalid_hooksinclude/linux/
3、netfilter.hxt_table_info结构体,记录规则入口等信息privatemenet/netfilter/x_tables.c调用xt_hook_link(table,fn)将xt_table与nf_hook_ops关联起来,并挂载钩子点(xt_hook_link()内部调用了nf_register_hooks())。afprioritynamesizenumberinitial_entrieshook_entryunderflownet/ipv4/netfilter/ip_tables.c在ipt_do_table
4、()中,通过hook_entry与entries获得ipt_entry:get_entry(entries,hook_entry);stacksizestackptrjumpstackentriesipt_entryinclude/linux/netfilter_ipv4/ip_tables.hinclude/linux/netfilter/x_tables.h调用ipt_get_target(ipt_entry)获得xt_entry_target调用xt_ematch_foreach()查找匹配信息ipnfcachetarget
5、_offsetnext_offsetcomefromcounterselems[0]xt_entry_matchxt_entry_targetunionuunionusermatch_sizenamerevision;unionkernelmatch_sizematchmatch_sizeunionuunionusertarget_sizenamerevision;unionkerneltarget_sizetargettarget_sizeunsignedchardata[0]unsignedchardata[0]xt_matc
6、hxt_targetlistlistnamenamerevisionrevisioninclude/linux/netfilter/x_tables.hbool(*match)()uint(*target)()int(*checkentry)()int(*checkentry)()void(*destroy)()void(*destroy)()memetabletablematchsizetargetsizehookshooksprotoprotofamilyfamily一、钩子函数(hook)与过滤规则表(xt_table)前面
7、已经提到,钩子函数与过滤规则的管理是通过全局变量nf_hooks来实现的,那么,什么时候会调用钩子函数呢?钩子函数又是如何利用已经注册好的过滤规则的呢?在Linux内核中定义了网络数据包的流动方向,数据包被网卡捕获后,它在内核网络子系统里的传输路径是:pre-routingàroute(inorforward)à(out)àpost-routing。在netfilter上注册的钩子函数如下所示(这些钩子函数按它们被调用的顺序排列):--->PRE------>[ROUTE]--->FWD---------->POST------>
8、Conntrack
9、Mangle^MangleMangle
10、Filter
11、NAT(Src)NAT(Dst)
12、
13、Conntrack(QDisc)
14、[ROUTE]v
15、INFilterOUTConntrack
16、Conntrack^Mangle
17、Mangl
此文档下载收益归作者所有