【Linux 驱动】netfilter/iptables (一) 基础概念

在介绍netfilter/iptables之前,我们先来了解下防火墙:

防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性。它通过访问控制机制,确定哪些内部服务允许外部访问,以及允许哪些外部请求可以访问内部服务。它可以根据网络传输的类型决定IP包是否可以传进或传出内部网。

防火墙通过审查经过的每一个数据包,判断它是否有相匹配的过滤规则,根据规则的先后顺序进行一一比较,直到满足其中的一条规则为止,然后依据控制机制做出相应的动作。如果都不满足,则将数据包丢弃,从而保护网络的安全。

防火墙可以被认为是这样一对机制:一种机制是拦阻传输流通行,另一种机制是允许传输流通过。一些防火墙偏重拦阻传输流的通行,而另一些防火墙则偏重允许传输流通过。
参考资料:http://www.ha97.com/4082.html

防火墙的任务简单描述就是“放行合法”或者“封锁不合法”的数据包。至于哪些合法,哪些不合法就在于防火墙上规则(rule)的定义了。

Netfilter可以说是Linux的第三代防火墙。netfilter/iptables组成Linux平台下的包过滤防火墙。

【Linux 驱动】netfilter/iptables (一) 基础概念_第1张图片

我们需要弄清楚netfilter跟iptables是什么关系。
iptables是用户态的,是一个规则编辑工具,防火墙管理员通过这个工具对内存中的规则执行添加、删除及修改操作,它使插入、修改和除去信息包过滤表中的规则变得容易。

netfilter则是内核态的(其实Linux和netfilter是两个相互独立的组织,Linux每隔段时间就会下载最新版的netfilter源码加入到自己所开发的Linux系统中),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。。我们上面用iptables编辑的规则最终是通过netfilter机制来实现的。

简而言之,就是防火墙管理员通过iptables工具,将“防火墙规则”写入到netfilter的规则数据库中。所以Linux防火墙比较正确的名称应该是netfilter/iptables。

【Linux 驱动】netfilter/iptables (一) 基础概念_第2张图片

上图,很直观的反应了用户空间的iptables和内核空间的基于Netfilter的ip_tables模块之间的关系和其通讯方式,以及Netfilter在这其中所扮演的角色。

回过头,我们看看iptables
iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。
这里我们主要介绍下iptables传输数据包的过程。因为我们后面的netfilter机制主要围绕这个来介绍。

iptables传输数据包的过程:

  1. 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去;
  2. 如果数据报就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它;
  3. 本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出;
  4. 如果数据报是要转发出去的,且内核允许转发,数据包就会如下图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。

【Linux 驱动】netfilter/iptables (一) 基础概念_第3张图片

需要清楚的是,上面这幅图及其说明是针对iptables的。netfilter机制对此有重新命名,不要搞混了。

iptables命令(请参考相关资料如《Linux网络安全技术与实现》)配下去的每一条规则,最终都是通过netfilter机制实现的。
所以如果iptables不能满足我们当下的需求,我们可以针对netfilter去对其进行扩展。这也是我们需要额外的研究netfilter机制的一个重要原因。

netfilter使用户可以完全控制防火墙配置和信息包过滤。您可以定制自己的规则来满足您的特定需求,从而只允许您想要的网络流量进入系统。

未完,待续,后面我们将着重分析netfilter机制。

你可能感兴趣的:(Linux,Driver)