- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Netfilter框架的分析
摘要 防火墙作为一种网络或系统之间强制实行的访问控制机制,是确保网络安全的重要手段,有基于通用操作系统设计的防火墙,也有基于专用操作系统设计的防火墙。由于Linux源代码的开放性,所以,Linux成为研究防火墙技术的一个很好的平台。?本文介绍 Linux 的防火墙技术 netfilter/iptables 在 Linux etfilter框架的分析
1.1.1介绍
Netfilter是Linux2.4实现的防火墙框架,Netfilter提供了一个抽象、通用化的框架定义一个子功能实现的就是包过滤子系统。Netfilter由一系列基于协议栈的钩子组成,这些钩子都对应某一具体的协议。每一个协议对应的钩子函数都定义在协议具体的头文件中,如对应于IPv4的钩子函数就定义在内核头文件:/Linux/netfilter_ipv4.h中。
下面一副图概括了装在网关上的NetFilter的框架结构图,从图中可以看到一个数据包可能经过的路径,其中用[]扩起来的称为检查点,当数据包到达这个点时,就要停下来进行一些检查。这里检查点的名称使用的是iptables中名称,具体到NetFilter中可能就要改为那些所谓的钩子(Hook)函数了。1.1.2 Linux IP网络协议栈分析
为了更好的了解Netfilter的工作机理,非常有必要先来分析一下Linux2.4系列内核对于网络数据是如何处理的。以下的分析全部基于以太网和IPv4协议。 1 收到数据,中断发生 通常的,当一块网卡接收到属于其自己MAC地址或者广播的以太网络数据帧时,就会引发一个中断,网卡驱动的中断处理程序获得机会,通过I/O,DMA复制网络帧数据到内存中。然后网络驱动程序将创建一个skb结构,将网络帧数据填充,设置时间戳,区分类型后,将skb送入对应的包接收队列(其实就是添加到系统中的一个双向链表中)。在新的2.4内核中,通过软中断(softirq)方式实现将数据包从队列中提取,传递到协议处理堆栈。和以前2.2/2.0内核采用方式相比,软中断方式的最大的优点是支持针对多处理器的优化。在这里,网卡驱动的中断处理程序将调用include/linux/interrupt.h:__cpu_raise_softirq()发起一个软中断,然后完成使命,退出。 2数据接收软中断 内核调用kernel/softirq.c:do_softirq()执行数据包接收软中断(NET_RX_SOFTIRQ),将skb从CPU的接收队列中取出来,交给对应IPv4协议处理程序。协议处理程序将对传入的数据包进行一些完整性监测,如果监测失败,则将数据包丢弃。通过完整性监测以后,将进行一些必要的清理操作,去掉可能多余的填充数据,并且重新计算数据包的长度。接下来,数据包将进入Netfilter的第一个HOOK函数NF_IP_INPUT的控制范围。从Hook函数出来以后,程序流程将转移到net/ipv4/ipv_input.c:ip_rcv_finish(),进行数据包的目的地址的判断,送给路由选择程序,决定数据包是(1)送往本地的应用进程(ip_local_deliver);(2)转发到其他主机(ip_forward);(3)多播转发(ip_mr_input);(4)错误,丢弃(ip_error)。 5 我们来看那些需要转发的数据包。 对于数据包的转发工作,将由net/ipv4/ip_forward.c:ip_forward()来完成。首先检查IP包的TTL,如果小于0,则丢弃之,并且向源主机发送TTL超时错的ICMP包,否则,将TTL减1。然后比较包大小和目标网络接口的MTU,如果IP包标记不允许分包,则丢弃该数据包,并向源主机发送ICMP包,告知数据需要分包。接下来是Netfilter要处理的另一个HOOK地点:NF_IP_FORWARD Hook。 如果我们在iptables规则中跳转到ACCEPT,则这里的HOOK将返回NF_ACCEPT,于是数据包将会顺利的通过ip_forward_finish(),准备发送到另外的网络。而数据包在最终发送之前,将会落入Netfilter的第三个Hook陷阱,那就是NF_IP_POST_ROUTING,满足规则的数据包最终被送入网卡驱动程序发送到另外的网络。
1.1.3 Netfilter框架分析
通俗的说,Netfilter的框架就是在整个网络流程的若干位置放置了一些检查点(HOOK),而在每个检测点上登记了一些处理函数进行处理(如包过滤、NAT等,甚至可以是用户自定义的功能)。
通过上面的分析,可以确定,Netfilter事实上是内核网络协议栈中的一些HOOK集合。 如图所示上图的数字分别代表了Netfilter安插在内核中的5个HOOK
数据报从左
原创力文档


文档评论(0)