广告

浅析网络安全的“守门神”-iptables

2024-07-18 阅读:
在重大活动及节假日期间的网络安全保障工作中,为了以“最小化”原则收敛暴露面资产规模,经常要跟iptables打交道。iptables作为Linux系统防火墙的核心,通过精确控制网络流量,可有效应对各种网络威胁。为了帮助大家更好地理解和应用iptables,本文将深入剖析其工作原理与机制。

一、iptables前世今生

iptables最早可以追溯到ipfirewall,这是在Linux内核1.x时代的一个简易访问控制工具,能够工作在内核中,对数据包进行检测。然而,ipfirewall的功能非常有限,因为它需要将所有的规则都放进内核中才能运行。随着内核技术的发展,进入2.x时代后,ipfirewall更名为ipchains,它可以定义多条规则,并将这些规则串联起来,共同发挥作用,这使得防火墙的配置和管理变得更加灵活和强大。

而现在,我们所说的iptables是在ipchains基础上的进一步发展。iptables可以将规则组成一个列表,实现绝对详细的访问控制功能。与ipfirewall和ipchains一样,iptables本身并不算是防火墙,而是工作在用户空间中定义规则的工具。这些规则会被内核空间中的netfilter读取,从而实现防火墙的功能。

换句话说,netfilter才是防火墙真正的安全框架,iptables其实是一个命令行工具,位于用户空间,我们通过它操作真正的安全框架netfilter。

、iptables基础理解

当客户端希望与服务器上的某个进程通信时,它会将数据包发送到网卡。在这个过程中,数据包的目标指向了该进程的特定套接字,即特定的IP地址和端口号。当该进程需要回应客户端的请求时,它会生成响应数据包,此时数据包的目的地址变为客户端的地址,而原本进程所监听的IP与端口则转变为数据包的发送起点。

之前我们提到过,防火墙的实质是内核中的netfilter模块。为了确保防火墙的“防护”功能得以实现,我们需要在内核中设置安检口,即“input安检口”和“output安检口”。所有进出服务器的数据包都必须通过这些安检口接受严格的审查。符合放行标准的数据包将被允许通过,而满足拦截条件的数据包则会被拦截,如下图1所示。

图1  防火墙示意图1

当然,客户端发来的数据包访问的目标地址可能并不是本机,而是其他机器,这时服务器就可以进行对数据包进行转发。这类转发的数据包就会先后通过“prerouting安检口”、“forward安检口”和“postrouting安检口”进行检查,即“路由前”、“转发”与“路由后”,如下图2所示。

图2  防火墙示意图2

在iptables中,上述安检口被称为链(chain),规则被定义在这些链上,而规则又因功能的不同被划分到不同的表(table)中。iptables配置防火墙的主要工作就是添加、修改和删除这些规则。

、iptables常见概念

1.链的概念

每当数据包通过这些安检口,安检口会立即启动规则匹配机制,针对传入的数据包逐一比对预设的规则,并根据匹配结果执行相应的操作。通常情况下,安检口上并非仅设置单一规则,而是整合了众多规则以满足不同的安全需求。当这些规则按照特定的顺序紧密排列,就构建起了我们所说的“链”。因此,我们可以将每个安检口视为如图3所示的结构模型,每一个通过安检口的数据包,都必须严格按照顺序,逐一与这条“链”上的所有规则进行比对。一旦数据包与某条规则相匹配,就会立即执行该规则所规定的动作。

图3 链的结构模型

如上图所示,iptables提供了五个基础链,分别是prerouting,input,forward,output,postrouting,它们的使用场景有所不同。

input 链:当收到访问本机地址的数据包时,将应用此链中的规则。

output链:当本机向外发送数据包时,将应用此链中的规则。

forward链:当收到需要转发给其他地址的数据包时,将应用此链中的规则。

prerouting链:在对数据包做路由选择之前,将应用此链中的规则。

postrouting链:在对数据包做路由选择之后,将应用此链中的规则。

2.表的概念

之前我们提到每个“链”上都配置了一系列规则,然而这些规则中有些具有相似的功能。例如,A类规则主要用于对IP地址或端口进行过滤,而B类规则则负责修改数据包内容。为了更高效地管理这些规则,iptables在ipchains的基础上进行了优化升级,将具有相同功能的规则集合称为“表”。iptables提供了四个主要的表,分别是filter表、mangle表、nat表和raw表,其中默认使用的是filter表。这样的设计使得规则的管理和配置更加条理化和系统化。

filter表:对数据包进行过滤,具体规则决定如何处理一个数据包。

nat表:修改数据包的 IP 地址、端口号信息。

mangle表:修改数据包的服务类型,生存周期,为数据包设置标记。

raw表:决定是否对数据包进行状态跟踪。

3.表链关系

由于五种链使用场景的不同,注定了某些链不具备某类规则,相对应地,某类规则不一定在所有链里存在。在iptables中,表和链之间的关系如下图4所示。

图4 表链关系

上图还反映了一个规律,就是链中不同表的规则匹配的先后。拿prerouting链举例,prerouting链中的规则存放于三张表中,而这三张表中的规则执行的优先级如下:raw - mangle - nat。事实上,iptables为我们定义了4张”表”,当他们处于同一条”链”时,执行的优先级如下:raw - mangle - nat - filter。

4.规则的概念

在iptables规则中,匹配条件和处理动作是定义规则行为的两个关键组成部分。匹配条件用于确定规则适用于哪些数据包,可以是数据包源地址、目的地址、端口、协议等;而处理动作则定义了对匹配的数据包采取的操作,可以是放行(accept)、拒绝(reject)和丢弃(drop)等。通过灵活组合这些匹配条件和处理动作,管理员可以构建出复杂而精细的规则,以实现网络安全防护、路由管理、地址转换等多种网络操作。

规则的基本命令操作,强烈建议大家去学习朱双印的博客:

,本文主要为大家剖析iptables的工作原理。

、iptables数据流向

结合上述信息,我们可以将数据包通过防火墙的流程总结为下图5所示,在配置iptables规则时,该图应该了然于胸。

图5 数据处理流程图

发送数据包过程:先进入output链处理,如果没有被拦截则根据路由选择出网口,再进入postrouting链处理,最后从网卡出去。

接收数据包过程:先进入prerouting链处理,根据路由判断数据包发给本机,报文进入input链处理,如果没有被拦截则被进程处理。

转发场景的数据包处理过程:先进入prerouting链处理,根据路由判断数据包是不是发给本机,是则进入forward链处理,如果没有被拦截则进入postrouting链处理,最后从网卡出去。

、总结

网络安全防护是不可或缺的一环,特别是在构建大型网络时,在实际使用中iptables有着灵活且强大的防火墙功能。深入理解iptables,不仅有助于更全面地理解整个网络架构,还能精准把握内核空间中的数据流向,并深刻洞悉Linux的安全机制。希望今天的技术分享能为大家带来启发。

作者:万伟潇,缪云海

单位:中国移动智慧家庭运营中心

本文为EET电子工程专辑 原创文章,禁止转载。请尊重知识产权,违者本司保留追究责任的权利。
您可能感兴趣的文章
相关推荐
    广告
    近期热点
    广告
    广告
    可能感兴趣的话题
    广告
    广告
    向右滑动:上一篇 向左滑动:下一篇 我知道了