iptables防火墙的工作原理如何
介绍
在保护任何现代操作系统的安全过程中,设置防火墙是必不可少的一步。大多数Linux发行版都自带几种不同的防火墙工具,可用于配置防火墙。在本指南中,我们将详细介绍iptables防火墙。
iptables是大多数Linux发行版默认包含的标准防火墙。它是与内核级别的netfilter钩子进行交互的命令行接口,可以操作Linux网络堆栈。它通过将每个穿过网络接口的数据包与一组规则进行匹配,决定如何处理。
在本指南中,您将了解Iptables的工作原理。如果您需要更深入的了解,可以阅读关于Iptables和Netfilter体系结构的深入研究。
Iptables的工作原理如何
首先,让我们回顾一些术语并讨论iptables的工作原理。
iptables 防火墙通过将网络流量与一组规则进行比较来运行。这些规则定义了网络数据包需要满足的特征以及匹配数据包应该采取的操作。
有多种选项可以确定哪些数据包符合特定的规则。您可以匹配数据包的协议类型、源地址或目的地址或端口,使用的接口,与先前数据包的关系等等。
当定义的模式匹配时,所发生的行为称为目标。目标可以是数据包的最终策略决策,比如接受或丢弃。它也可以将数据包移动到不同的链进行处理,或记录该过程。有很多选项。
这些规则被组织成称为链的群组。链是一系列按顺序检查数据包的规则集。当数据包与某个规则匹配时,它执行相关的操作并跳过链中剩余的规则。
一个用户可以根据需要创建链。默认情况下定义了三个链,它们是:
- INPUT: This chain handles all packets that are addressed to your server.
- OUTPUT: This chain contains rules for traffic created by your server.
- FORWARD: This chain is used to deal with traffic destined for other servers that are not created on your server. This chain is a way to configure your server to route requests to other machines.
每个链可以包含零个或多个规则,并且都有一个默认策略。策略决定了当数据包通过链中的所有规则并且与任何规则都不匹配时会发生什么。您可以选择丢弃或接受数据包,如果没有规则匹配的话。
iptables也可以跟踪连接。这意味着您可以创建规则,根据数据包与先前数据包的关系来定义其发生的情况。这种能力被称为“状态跟踪”,“连接跟踪”或配置“状态机”。
IPv4与IPv6对比
Linux内核中包含的netfilter防火墙将IPv4和IPv6流量完全分开。用于操作包含防火墙规则集的iptables工具也是不同的。如果您的服务器启用了IPv6,您需要同时配置两个表来处理服务器上的流量。
Note
用于操作包含规则的表的常规iptables命令用于管理IPv4流量。对于IPv6流量,使用一个名为ip6tables的附属命令。您使用iptables设置的规则只对使用IPv4寻址的数据包产生影响,但这些命令之间的语法是相同的。iptables命令将制定适用于IPv4流量的规则,而ip6tables命令将制定适用于IPv6流量的规则。不要忘记使用您服务器的IPv6地址来制定ip6tables规则。
需要记住的事情
既然你已经了解了iptables如何引导经过其接口的数据包——将数据包引导到适当的链中,对每个规则进行检查直到找到匹配的规则,如果没有找到匹配的规则,则执行链的默认策略——你可以开始创建规则了。
首先,如果你实施了默认的拒绝策略,你需要确保有规则来保持当前连接的活跃性。这一点在通过SSH连接到服务器时尤为重要。如果你意外地实施了一个将中断你当前连接的规则或策略,你可能需要使用基于浏览器的恢复控制台登录到你的服务器。
另一个需要记住的事情是,每个链中规则的顺序是很重要的。如果一个数据包应该匹配一个更具体的规则,它不能先匹配到更一般的规则。
因此,链的顶部附近的规则应比底部的规则具有更高的特定性水平。您应该首先匹配特定情况,然后提供更一般的规则以匹配更广泛的模式。如果数据包通过整个链(即它不符合任何规则),它将遵循最一般的规则,即默认策略。
出于这个原因,一个链的默认规则会强烈决定包含在链中的规则类型。默认策略为接受(ACCEPT)的链将包含明确丢弃数据包的规则。默认策略为丢弃(DROP)的链将包含特定允许接受数据包的异常规则。
结论
此时,您已准备好实施自己的防火墙。为此,您应该阅读《如何在Ubuntu 22.04上使用Nftables设置防火墙》。或者,如果您更喜欢更高级的方法,可以参考《如何在Ubuntu 22.04上使用UFW设置防火墙》。如果您希望将防火墙作为受管理的服务层来运行,您也可以尝试Silicon Cloud的云防火墙。