Iptables 和 Netfilter 架构深入解析

介绍

防火墙是一种重要的工具,可以配置来保护您的服务器和基础设施。在 Linux 生态系统中,iptables 是一个广泛使用的防火墙工具,它与内核的 netfilter 数据包过滤框架配合工作。由于复杂的语法和涉及的相关部分数量众多,创建可靠的防火墙策略可能令人望而生畏。

在本指南中,我们将深入探讨 iptables 架构,旨在使其更易于理解,以便需要构建自己防火墙策略的用户。我们将讨论 iptables 如何与 netfilter 交互,以及各个组件如何结合在一起,提供全面的过滤系统。

IPTables 和 Netfilter 是什么?

多年来,Linux 中最常用的防火墙软件被称为 iptables。在一些发行版中,它已被一个名为 nftables 的新工具所取代,但 iptables 语法仍然常被用作基线。iptables 防火墙通过与 Linux 内核网络堆栈中的数据包过滤挂钩进行交互来工作。这些内核挂钩被称为 netfilter 框架。

每个通过网络层的数据包(传入或传出)都会触发这些挂钩,允许程序在关键点与流量交互。与 iptables 相关的内核模块会注册到这些挂钩,以确保流量符合防火墙规则所规定的条件。

Netfilter 挂钩

有五个 netfilter 挂钩可以注册程序。随着数据包在堆栈中的进展,它们将触发已注册到这些挂钩的内核模块。数据包将触发的挂钩取决于数据包是传入还是传出、数据包的目的地以及数据包是否在先前的某个点被丢弃或拒绝。

以下挂钩代表网络堆栈中这些明确定义的关键点:

  • NF_IP_PRE_ROUTING:这个挂钩将在数据包进入网络堆栈后不久触发。在进行任何路由决策之前,就会处理这个挂钩。
  • NF_IP_LOCAL_IN:如果数据包的目的地是本地系统,这个挂钩将在传入数据包被路由后触发。
  • NF_IP_FORWARD:如果数据包要转发到另一个主机,这个挂钩将在传入数据包被路由后触发。
  • NF_IP_LOCAL_OUT:一旦本地创建的传出流量到达网络堆栈,这个挂钩就会触发。
  • NF_IP_POST_ROUTING:在路由完成后,数据包被发送到网络之前,这个挂钩将触发。

需要在这些挂钩注册的内核模块还必须提供一个优先级数字,以帮助确定触发挂钩时它们将被调用的顺序。这提供了多个模块(或同一模块的多个实例)连接到每个挂钩的确定顺序。每个模块将依次被调用,并在处理后向 netfilter 框架返回一个决定,指示应该对数据包采取什么操作。

IPTables 表和链

iptables 防火墙使用表来组织其规则。这些表根据它们用于做出决策的类型对规则进行分类。例如,如果一条规则涉及网络地址转换,它将被放入 nat 表中。如果规则用于决定是否允许数据包继续传输到其目的地,它可能会被添加到 filter 表中。

在每个 iptables 表中,规则在单独的“链”中进一步组织。虽然表由其持有的规则的一般目的来定义,但内置链代表触发它们的 netfilter 挂钩。链确定规则将在何时被评估。

内置链的名称与它们关联的 netfilter 挂钩的名称相同:

  • PREROUTING&#
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张无忌打怪兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值