网络协议分析技术除了应用到对捕获的网络数据进行分析得到数据包的协议内容外,还可以应用到网络流量统计、网络监视、网络入侵检测、网络安全扫描等,可见网络协议分析是网络数据捕获技术之后的各种网络安全策略的基础。
2.2 Netfilter框架
2.2.1 Netfilter概述
Netfilter是2.4.x内核引入的一个新的网络包过滤框架,提供了对2.0.x内核中的ipfw以及2.2.x内核中的Ipchains的兼容和改进,工作在内核空间中,通常结合ip_table内核模块一起使用以构造linux下的防火墙。通俗的说,Netfilter的 架构就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理。
Linux 内核中,Netfilter将对网络代码的直接干涉降到最低,并允许用规定的接口将其他包处理代码以模块的形式添加到内核中,具有极强的灵活性。默认地,它在这个框架上实现了包过滤、状态检测、网络地址转换和包标记等多种功能,因为它设计的开放性,任何有内核开发经验的开发人员,也可以很容易地利用它提供接口,在内核的数据链路层、网络层,实现自己的功能模块。
Netfilter技术只是提供了一种框架,而没有提供任何过滤报文的代码。对于防火墙而言要实现其对网络进行保护的目的就必须有数据包的过滤规则,因此必须编写相应的代码以提供包过滤以及状态检测等。一般而言基于Netfilter的应用开发有两种:从用户空间的角度进行开发,这种开发主要是如何充分发挥内核所提供的防火墙功能,它不能为防火墙增加基本功能模块;另外就是从内核空间的角度进行开发。这种方法不仅能充分发挥现有功能,而且还能添加新的功能模块。
2.2.2 Netfilter特点
Netfilter包含以下特点:
(1)为每种网络协议(IPv4,IPv6等)定义一套钩子函数,这些钩子函数在数据包流过协议栈的几个关键点调用。在这几个点中,协议栈将数据包及钩子函数标号作为参数调用Netfilter框架。
(2)内核的任何模块可以对每种协议的一个或多个钩子进行注册,实现挂接,这样当某个数据包被传递给Netfilter框架时,内核能检测是否有任何模块对该协议和钩子函数进行了注册。若注册了,则调用该模块注册时使用的回调函数,这样这些模块就有机会检查、修改或丢弃该数据包及指示netfilter将该数据包传入用户空间队列。
(3)对Netfilter的任何扩展都很简单,只需要将实现某项功能的模块编译到Linux内核中,并利用该模块的守护进程便可实现对该模块的动态加载。动态加载的内核模块的目标代码一旦链接到内核,作用和静态链接的内核目标代码完全等价。
Netfilter的最大优点就是,Netfilter具有良好的框架和拓展性,这使得编程人员只需在一个或多个Netfilter钩子挂载点上注册内核模块,在数据包经过挂载点时能通过注册的模块捕获它们,然后进行处理。
Netfilter还有一个优点就是,它可以配置有状态的防火墙,有状态的防火墙能够指定并记住为发送或接收信息包所建立的连接的状态。Netfilter的另一个优点是它使用户可以完全控制防火墙配置和信息包过滤,可以根据自己的规则来满足特定需求,从而只允许想要的网络流量进入系统。而且Netfilter是免费的,恶意替代昂贵的防火墙解决方案。
2.2.3 Netfilter核心思想
Netfilter架构是在Linux内核层实现负载均衡的关键,通过在相应的HOOK点注册自己的负载均衡模块,来决定每一个进入负载均衡器的数据包的命运。
Netfilter提供一个可加载网络服务的通用框架,其核心思想包括以下三点: 基于Netfilter的网络数据包捕获与分析(4):http://www.751com.cn/jisuanji/lunwen_7270.html