Netfilter框架 完全解析.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Netfilter 框架 目录 网络通信 网络通信的基本模型 协议栈底层机制2 Netfilter Netfilter 介绍 钩子函数返回值 hook 点 协议栈切入 Netfilter 框架3 Netfilter 的实现方式 nf_hooks[][]结构 nf_hook_ops 增加新的钩子函数 基于源接口的数据包过滤钩子函数 iptables 防火墙内核模块 iptables Netfilter 框架防火墙 iptables hook 函数分类 iptables 基础 iptables 命令格式5 连接跟踪机制 5.1.重要数据结构 重要函数 链接跟踪建立的三条路径 IP 层接收和发送数据包进入连接跟踪钩子函数的入口 连接跟踪的流程分析 网络通信 网络通信的基本模型 在数据的发送过程中,从上至下依次是“加头”的过程,每到达一层数据就被会加上该 层的头部;与此同时,接受数据方就是个“剥头”的过程,从网卡收上包来之后,在往协议栈的上层传递过程中依次剥去每层的头部,最终到达用户那儿的就是裸数据了。 协议栈底层机制 “栈”模式底层机制基本就是像下面这个样子: 对于收到的每个数据包,都从“A”点进来,经过路由判决,如果是发送给本机的就经过“B”点,然后往协议栈的上层继续传递;否则,如果该数据包的目的地是不本机,那么就经过“C”点,然后顺着“E”点将该包转发出去。 对于发送的每个数据包,首先也有一个路由判决,以确定该包是从哪个接口出去,然后经过“D”点,最后也是顺着“E”点将该包发送出去。 协议栈那五个关键点A,B,C,D 和E 就是我们Netfilter 大展拳脚的地方了。 Netfilter 2.1Netfilter 介绍 Netfilter 是 Linux 2.4.x 引入的一个子系统,它作为一个通用的、抽象的框架,提供一整 套的 hook 函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能。Netfilter 在内核中位置如下图所示: 这幅图,很直观的反应了用户空间的iptables 和内核空间的基于Netfilter 的 ip_tables 模块之间的关系和其通讯方式,以及Netfilter 在这其中所扮演的角色。 Netfilter 在 netfilter_ipv4.h 中将那五个关键点“ABCDE”上来。重新命名,如下图所示。 钩子函数返回值 在每个关键点上,有很多已经按照优先级预先注册了的回调函数(这些函数称为“钩子 函数”)埋伏在这些关键点,形成了一条链。对于每个到来的数据包会依次被那些回调函数 “调戏”一番再视情况是将其放行,丢弃还是怎么滴。但是无论如何,这些回调函数最后必须向 Netfilter 报告一下该数据包的死活情况,因为毕竟每个数据包都是 Netfilter 从人家协议栈那儿借调过来给兄弟们 Happy 的,别个再怎么滴也总得“活要见人,死要见尸”吧。每个钩子函数最后必须向 Netfilter 框架返回下列几个值其中之一: n NF_ACCEPT 继续正常传输数据报。这个返回值告诉 Netfilter:到目前为止,该数据包还是被接受的并且该数据包应当被递交到网络协议栈的下一个阶段。 n NF_DROP 丢弃该数据报,不再传输。 n NF_STOLEN 模块接管该数据报,告诉 Netfilter“忘掉”该数据报。该回调函数将从此开始对数据包的处理,并且Netfilter 应当放弃对该数据包做任何的处理。但是,这并不意味着该数据包的资源已经被释放。这个数据包以及它独自的sk_buff 数据结构仍然有效, 只是回调函数从 Netfilter 获取了该数据包的所有权。 n NF_QUEUE 对该数据报进行排队(通常用于将数据报给用户空间的进程进行处理) n NF_REPEAT 再次调用该回调函数,应当谨慎使用这个值,以免造成死循环。 上面提到的五个关键点后面我们就叫它们为hook 点,每个 hook 点所注册的那些回调函数都将其称为 hook 函数。 hook 点 Linux 2.6 版内核的 Netfilter 目前支持 IPv4、IPv6 以及 DECnet 等协议栈,这里我们主要研究 IPv4 协议。关于协议类型,hook 点,hook 函数,优先级,通过下面这个图给大家做个详细展示: 对于每种类型的协议,数据包都会依次按照 hook 点的方向进行传输,每个 hook 点上 Netfilter 又按照优先级挂了很多 hook 函数。这些 hook 函数就是用来处理数据包用的。 Netfilter 使用 NF_HOOK(include/linux/netfilter.h)宏在协议栈内部切入到 Netfilter 框

文档评论(0)

hao187 + 关注
官方认证
文档贡献者

该用户很懒,什么也没介绍

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档