netfilter框架

转载 2011年01月18日 23:47:00

netfilter框架

Linux内核包含了一个强大的网络子系统,名为netfilter,它可以为iptables内核防火墙模块提供有状态或无状态的包过滤服务,如NAT、IP伪装等,也可以因高级路由或连接状态管理的需要而修改IP头信息。netfilter位于Linux网络层和防火墙内核模块之间,如图9-1所示。

 
(点击查看大图)图9-1  netfilter在内核中的位置
虽然防火墙模块构建在Linux内核,并且要对流经IP层的数据包进行处理,但它并没有改变IP协议栈的代码,而是通过netfilter模块将防火墙的功能引入IP层,从而实现防火墙代码和IP协议栈代码的完全分离。netfilter模块的结构如图9-2所示。
 
(点击查看大图)图9-2  netfilter结构框架图

对IPv4协议来说,netfilter在IP数据包处理流程的5个关键位置定义了5个钩子(hook)函数。当数据包流经这些关键位置时,相应的钩子函数就被调用。从图9-2中可以看到,数据包从左边进入IP协议栈,进行IP校验以后,数据包被第一个钩子函数PRE_ROUTING处理,然后就进入路由模块,由其决定该数据包是转发出去还是送给本机

若该数据包是送给本机的,则要经过钩子函数LOCAL_IN处理后传递给本机的上层协议;若该数据包应该被转发,则它将被钩子函数FORWARD处理,然后还要经钩子函数POST_ROUTING处理后才能传输到网络本机进程产生的数据包要先经过钩子函数LOCAL_OUT处理后,再进行路由选择处理,然后经过钩子函数POST_ROUTING处理后再发送到网络。

说明:内核模块可以将自己的函数注册到钩子函数中,每当有数据包经过该钩子点时,钩子函数就会按照优先级依次调用这些注册的函数,从而可以使其他内核模块参与对数据包的处理。这些处理可以是包过滤、NAT以及用户自定义的一些功能.

 

iptables防火墙内核模块

netfilter框架为内核模块参与IP层数据包处理提供了很大的方便,内核的防火墙模块正是通过把自己的函数注册到netfilter的钩子函数这种方式介入了对数据包的处理。这些函数的功能非常强大,按照功能来分的话主要有4种,包括连接跟踪、数据包过滤、网络地址转换(NAT)和对数据包进行修改。其中,NAT还分为SNAT和DNAT,分别表示源网络地址转换和目的网络地址转换,内核防火墙模块函数的具体分布情况如图9-3所示。

由图9-3可以看出,防火墙模块在netfilter的LOCAL_IN、FORWARD和LOCAL_OUT 3个位置分别注册了数据包过滤函数,数据包经过这些位置时,防火墙模块要对数据包进行过滤。这三个位置也称为三条链,名称分别为INPUT、FORWARD和OUTPUT,它们共同组成了一张过滤表,每条链可以包含各种规则,每一条规则都包含0个或多个匹配以及一个动作。当数据包满足所有的匹配时,则过滤函数将执行设定的动作,以便对数据包进行过滤的。

 
(点击查看大图)图9-3  iptables防火墙内核模块结构框架图

注意:这些规则的次序是很重要的,过滤函数对数据包执行了某一规则动作后,对数据包的处理即告结束,即使这个数据包还满足后面其他规则的所有匹配,也不会执行那些规则所设定的动作。

从图9-3中可以看出,除了过滤表以外,在PRE_ROUTING、LOCAL_OUT和POST_ ROUTING 3个位置各有一条有关NAT的链,名称分别为PREROUTING、OUTPUT和POSTROUTING,它们组成了NAT表。NAT链里面也可以包含各种规则,它指出了如何对数据包的地址进行转换。

此外,5个钩子函数位置的mangle链还组成了一张mangle表,这个表的主要功能是根据规则修改数据包的一些标志位,例如TTL、TOS等,也可以在内核空间为数据包设置一些标志。防火墙内的其他规则或程序(如tc等)可以利用这种标志对数据包进行过滤或高级路由。

以上介绍的是iptables防火墙的内部结构,Linux系统还提供了iptables防火墙的用户接口,它可以在上述各张表所包含的链中添加规则,或者修改、删除规则,从而可以根据需要构建自己的防火墙。具体来说,用户是通过输入iptables命令来实现上述功能的。

Netfilter返回值
    返回值                含义
NF_DROP                丢弃该数据包
NF_ACCEPT            保留该数据包
NF_STOLEN            忘掉该数据包
NF_QUEUE            将该数据包插入到用户空间
NF_REPEAT            再次调用该hook函数

iptables命令格式(1)

 

在RHEL 5中,iptables命令由iptables-1.3.5-1.2.1软件包提供,默认时,系统已经安装了该软件包,因此,用户可以直接输入iptables命令对防火墙中的规则进行管理。iptables命令相当复杂,具体格式如下所示。

  1. iptables [-t 表名] <命令> [链名] [规则号] [规则] [-j 目标]  

-t选项用于指定所使用的表,iptables防火墙默认有filter、nat和mangle 3张表,也可以是用户自定义的表。表中包含了分布在各个位置的链,iptables命令所管理的规则就是存在于各种链中的。该选项不是必需的,如果未指定一个具体的表,则默认使用的是filter表。

命令选项是必须要有的,它告诉iptables要做什么事情,是添加规则、修改规则还是删除规则。有些命令选项后面要指定具体的链名称,而有些可以省略,此时,是对所有的链进行操作。还有一些命令要指定规则号。具体的命令选项名称及其与后续选项的搭配形式如下所示。

示例1:

  1. -A  <链名>  <规则>  

功能:在指定链的末尾添加一条或多条规则。

示例2:

  1. -D  <链名>  <规则> 
  2. -D  <链名>  <规则号> 

功能:从指定的链中删除一条或多条规则。可以按照规则的序号进行删除,也可以删除满足匹配条件的规则。

示例3:

  1. -R  <链名>  <规则号>  <规则> 

功能:在指定的链中用新的规则置换掉某一规则号的旧规则。

示例4:

  1. -I  <链名>  [规则号]  <规则> 

功能:在给出的规则序号前插入一条或多条规则,如果没有指定规则号,则默认是1。

示例5:

  1. -L  [链名] 

功能:列出指定链中的所有规则,如果没有指定链,则所有链中的规则都将被列出。

示例6:

  1. -F  [链名]  

功能:删除指定链中的所有规则,如果没有指定链,则所有链中的规则都将被删除。

示例7:

  1. -N  <链名> 

功能:建立一个新的用户自定义链。

示例8:

  1. -X  [链名]  

功能:删除指定的用户自定义链,这个链必须没有被引用,而且里面也不包含任何规则。如果没有给出链名,这条命令将试着删除每个非内建的链。

示例9:

  1. -P <链名> <目标> 

功能:为指定的链设置规则的默认目标,当一个数据包与所有的规则都不匹配时,将采用这个默认的目标动作。

示例10:

-E  <旧链名>  <新链名> 

 

 iptables命令格式(2)

功能:重新命名链名,对链的功能没有影响。

以上是有关iptables命令格式中有关命令选项部分的解释。iptables命令格式中的规则部分由很多选项构成,主要指定一些IP数据包的特征。例如,上一层的协议名称、源IP地址、目的IP地址、进出的网络接口名称等,下面列出构成规则的常见选项。

-p<协议类型>:指定上一层协议,可以是icmp、tcp、udp和all。

-s<IP地址/掩码>:指定源IP地址或子网。

-d<IP地址/掩码>:指定目的IP地址或子网。

-i<网络接口>:指定数据包进入的网络接口名称。

-o<网络接口>:指定数据包出去的网络接口名称。

注意:上述选项可以进行组合,每一种选项后面的参数前可以加"!",表示取反。

对于-p选项来说,确定了协议名称后,还可以有进一步的子选项,以指定更细的数据包特征。常见的子选项如下所示。

-p tcp --sport <port>:指定TCP数据包的源端口。

-p tcp --dport <port>:指定TCP数据包的目的端口。

-p tcp --syn:具有SYN标志的TCP数据包,该数据包要发起一个新的TCP连接。

-p udp --sport <port>:指定UDP数据包的源端口。

-p udp --dport <port>:指定UDP数据包的目的端口。

-p icmp --icmp-type <type>:指定icmp数据包的类型,可以是echo-reply、echo-request等。

上述选项中,port可以是单个端口号,也可以是以port1:port2表示的端口范围。每一选项后的参数可以加"!",表示取反。

上面介绍的这些规则选项都是iptables内置的,iptables软件包还提供了一套扩展的规则选项。使用时需要通过-m选项指定模块的名称,再使用该模块提供的选项。下面列出几个模块名称和其中的选项,大部分的选项也可以通过"!"取反。

  1. -m multiport --sports <port, port, …>  

功能:指定数据包的多个源端口,也可以以port1:port2的形式指定一个端口范围。

  1. -m multiport --dports <port, port, …> 

功能:指定数据包的多个目的端口,也可以以port1:port2的形式指定一个端口范围。

  1. -m multiport --ports <port, port, …> 

功能:指定数据包的多个端口,包括源端口和目的端口,也可以以port1:port2的形式指定一个端口范围。

  1. -m state --state <state> 

功能:指定满足某一种状态的数据包,state可以是INVALID、ESTABLISHED、NEW和RELATED等,也可以是它们的组合,用","分隔。

  1. -m connlimit  --connlimit-above <n> 

功能:用于限制客户端到一台主机的TCP并发连接总数,n是一个数值。

  1. -m  mac  --mac-source  <address> 

功能:指定数据包的源MAC地址,address是xx:xx:xx:xx:xx:xx形式的48位数。

-m选项可以提供的模块名和子选项内容非常多,为iptables提供了非常强大、细致的功能,所有的模块名和子选项可以通过"man iptables"命令查看iptables命令的手册页获得。

最后,iptables命令中的-j选项可以对满足规则的数据包执行指定的操作,其后的"目标"可以是以下内容。

-j ACCEPT:将与规则匹配的数据包放行,并且该数据包将不再与其他规则匹配,而是跳向下一条链继续处理。

-j REJECT:拒绝所匹配的数据包,并向该数据包的发送者回复一个ICMP错误通知。该处理动作完成后,数据包将不再与其他规则匹配,而且也不跳向下一条链。

-j DROP:丢弃所匹配的数据包,不回复错误通知。该处理动作完成后,数据包将不再与其他规则匹配,而且也不跳向下一条链。

-j REDIRECT:将匹配的数据包重定向到另一个位置,该动作完成后,会继续与其他规则进行匹配。

-j LOG:将与规则匹配的数据包的相关信息记录在日志(/var/log/message)中,并继续与其他规则匹配。

-j <规则链名称>:数据包将会传递到另一规则链,并与该链中的规则进行匹配。

除了上述目标动作外,还有一些与NAT有关的目标,将在9.4节中讲述。所有的目标也可以通过查看iptables命令的手册页获得.




 

 

 

 原文地址 http://http://book.51cto.com/art/200912/169244.htm

相关文章推荐

Linux协议栈-netfilter(1)-框架

1. netfilter框架 Netfilter 是内核中进行数据包过滤,连接跟踪,地址转换等的主要实现框架。当我们希望过滤特定的数据包或者需要修改特定数据包的某些内容再发送出去,这些动作主要都在n...

Linux协议栈-netfilter(4)-期望连接

传统的conntrack和NAT处理只对IP层和传输层头部进行转换处理,但是一些应用层协议,在协议数据报文中包含了地址信息。为了使得这些应用也能透明地完成NAT转换,NAT使用一种称作ALG的技术,它...

Netfilter的使用和实现

本文主要内容:Netfilter的原理和实现浅析,以及示例模块。 内核版本:2.6.37 Author:zhangskd @ csdn blog   概述   Netfilter为多种网络...

Linux协议栈-netfilter(5)-iptables

iptables是用户态的配置工具,用于实现网络层的防火墙,用户可以通过iptables命令设置一系列的过滤规则,来截获特定的数据包并进行过滤或其他处理。 iptables命令通过与内核中的netfi...

Linux协议栈-netfilter(3)-NAT

本文对netfilter中NAT部分的源码进行分析,读者需要先对NAT的基本概念有一个大致了解。 1. NAT模块的初始化 NAT模块的初始化过程主要是初始化一些全局变量以及注册NAT相关的hook...

Netfilter 概述及其hook点

Netfilter概述         Netfilter/IPTables是Linux2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)