Linux系统中的Netfilter提供了一个抽象、通用化的框架,该框架定义的一个子功能的实现就是包过滤子系统,框架包含以下五部分:1. 为每种网络协议(IPv4、IPv6等)定义一套钩子函数(IPv4定义了5个钩子函数), 这些钩子函数在数据报流过协议栈的几个关键点被调用。在这几个点中,协议栈将把数据报及钩子函数标号作为参数调用Netfilter框架。

Linux体系中的Netfilter供给了一个笼统、通用化的结构,该结构界说的一个子功用的完成便是包过滤子体系,结构包含以下五部分:1. 为每种网络协议(IPv4、IPv6等)界说一套钩子函数(IPv4界说了5个钩子函数), 这些钩子函数在数据报流过协议栈的几个要害点被调用。在这几个点中,协议栈将把数据报及钩子函数标号作为参数调用Netfilter结构。

从五方面解析Linux防火墙结构(简述linux防火墙的分类)  Linux 防火墙 第1张

2. 内核的任何模块能够对每种协议的一个或多个钩子进行注册,完成挂接,这样当某个数据包被传递给Netfilter结构时,内核能检测是否有任何模块对该协议和钩子函数进行了注册。若注册了,则调用该模块的注册时运用的回调函数,这样这些模块就有时机查看(或许还会修正)该数据包、丢掉该数据包及指示Netfilter将该数据包传入用户空间的行列。

3 .那些排队的数据包是被传递给用户空间的异步地进行处理。一个用户进程能查看数据包,修正数据包,乃至能够从头将该数据包经过脱离内核的同一个钩子函数中注入到内核中。 4. 任安在IP层要被扔掉的IP数据包在真实扔掉之前都要进行查看。例如答应模块查看IP-Spoofed包(被路由扔掉)。

5.IP层的五个HOOK点的方位如下所示:(1)NF_IP_PRE_ROUTING:刚刚进入网络层的数据包经过此点(刚刚进行完版本号,校验 和等检测),源地址转化在此点进行;IP_Input.c中IP_Rcv调用;(2)NF_IP_LOCAL_IN:经路由查找后,送往本机的经过此查看点,INPUT包过滤在此点进行,IP_local_deliver中调用;(3)NF_IP_FORWARD:要转发的包经过此检测点,FORWORD包过滤在此点进行; (4)NF_IP_POST_ROUTING:一切立刻便要经过网络设备出去的包经过此检测点,内置的意图地址转化功用(包含地址假装)在此点进行;(5)NF_IP_LOCAL_OUT:本机进程宣布的包经过此检测点,OUTPUT包过滤在此点进行。

这些点是已经在内核中界说好的,内核模块能够注册在这些HOOK点进行的处理,可运用nf_register_hook函数指定。在数据报经过这些钩子函数时被调用,然后模块能够修正这些数据报,并向Netfilter回来如下值:

NF_ACCEPT 持续正常传输数据报
NF_DROP 丢掉该数据报,不再传输
NF_STOLEN 模块接收该数据报,不要持续传输该数据报
NF_QUEUE 对该数据报进行排队(一般用于将数据报给用户空间的进程进行处理)
NF_REPEAT 再次调用该钩子函数

一个依据Netfilter结构的、称为IPtables的数据报挑选体系在Linux2.4内核中被运用,其实它便是IPchains的后继东西,但却有更强的可扩展性。内核模块能够注册一个新的规矩表(table),并要求数据报流经指定的规矩表。这种数据报挑选用于完成数据报过滤(filter表),网络地址转化(Nat表)及数据报处理(Mangle表)。 Linux2.4内核供给的这三种数据报处理功用都依据Netfilter的钩子函数和IP表。它们是独立的模块,相互之间是独立的。它们都***的集成到由Netfileter供给的结构中。
包过滤

Filter表格不会对数据报进行修正,而只对数据报进行过滤。IPtables优于IPchains的一个方面便是它更为细巧和快速。它是经过钩子函数NF_IP_LOCAL_IN、NF_IP_FORWARD及NF_IP_LOCAL_OUT接入Netfilter结构的。因而关于任何一个数 报只要一个当地对其进行过滤。这相对IPchains来说是一个巨大的改善,因为在IPchains中一个被转发的数据报会遍历三条链。

NAT

NAT表格监听三个Netfilter钩子函数:NF_IP_PRE_ROUTING、NF_IP_POST_ROUTING及NF_IP_LOCAL_OUT。 NF_IP_PRE_ROUTING完成对需求转发的数据报的源地址进行地址转化而NF_IP_POST_ROUTING则对需求转发的数据包的意图地址进行地址转化。关于本地数据报的意图地址的转化则由NF_IP_LOCAL_OUT来完成。NAT表格不同于filter表格,因为只要新衔接的***个数据报将遍历表格,而随后的数据报将依据***个数据报的成果进行相同的转化处理。NAT表格被用在源NAT、意图NAT,假装(其是源NAT的一个特例)及通明署理(其是意图NAT的一个特例)。

数据报处理(Packet Mangling)

Mangle表格在NF_IP_PRE_ROUTING和NF_IP_LOCAL_OUT钩子中进行注册。运用 mangle表,能够完成对数据报的修正或给数据报附上一些带外数据。当时mangle表支撑修正TOS位及设置skb的nfmard字段。

假如咱们想参加自己的代码,便要用nf_register_hook函数。咱们的作业便是生成一个struct nf_hook_ops结构的实例,并用nf_register_hook将其HOOK上。其间list项咱们总要初始化为{NULL,NULL};因为一般在IP层作业,pf总是PF_INET;hooknum便是咱们挑选的HOOK点;一个HOOK点或许挂多个处理函数,谁先谁后,便要看优先级,即priority的指定了。Netfilter_IPv4.h顶用一个枚举类型指定了内置的处理函数的优先级。

【修改引荐】

  1. 巧用Recent模块加固Linux安全
  2. Linux安全拜访操控模型运用及方案设计
  3. Linux安全设置 全面巩固体系安稳安全
转载请说明出处
知优网 » 从五方面解析Linux防火墙结构(简述linux防火墙的分类)

发表评论

您需要后才能发表评论