返回博客

列出和删除 Iptables 防火墙规则

列出和删除 Iptables 防火墙规则

Iptables 是大多数 Linux 发行版默认附带的主要防火墙。它负责处理网络安全。它的工作原理是将数据包与一组规则进行对比,根据规则指示系统接受、拒绝或转发连接。在本教程中,我们将向您展示如何列出和删除规则、检查和清除数据包及字节计数器,以及清空链。准备好了吗?让我们开始吧!

前提条件

在开始本教程之前,让我们先明确一点。本指南中演示的所有技巧和窍门都是在独立的虚拟机上进行的。建议您也这样做,因为这可以避免将您的系统搞得一团糟。只有在您掌握了这些过程之后,才应该尝试在实际情况中应用它们。

在本教程中,我们将使用 Ubuntu 来演示所有步骤。不过,无论使用哪种发行版,它们的操作方式都应该类似。

列出规则

按规范列出规则

首先,让我们按规范查看所有活动规则。运行以下命令:

iptables list

如果您以前使用过 iptables 规则创建,您可能会注意到其相似之处。除了 “iptables” 部分之外,输出结果与用于创建它们的命令非常相似。它们与 iptables 规则配置文件的结构也类似。

列出特定链

让我们尝试一些更精确的操作。不要报告所有的 iptables 规则,而是让 iptables 报告特定链的规则。例如,TCP、INPUT、OUTPUT 等。为此,请在 “-S” 标志后指定链名称:

list specific chain

以表格形式列出规则

在比较不同的规则时,表格视图非常有用。使用 “-L” 标志让 iptables 以表格格式报告所有活动规则:

list rules as table iptables

输出包含按链排序的所有当前规则。与上一节类似,也可以按特定链(如 INPUT、TCP 和 OUTPUT 等)过滤列表输出。为此,请在 “-L” 标志后指定链:

filter by chain

让我们稍微分解一下输出。在我们的例子中,由于规则的原因,输出会显得有点乱。输出的第一行声明了链名称 (INPUT) 及其默认策略 (DROP)。下一行指定了表格列的表头。其余的是该链的规则。让我们来看看这些表头表示什么:

  • target:如果数据包与规则匹配,此部分定义应执行的操作。可以是接受数据包、丢弃、记录日志或将其发送到另一个链。
  • prot:定义协议,例如 udp、tcp、icmp 或 all。
  • opt:此列表示 IP 选项。很少使用。
  • source:数据包的源(IP 地址或子网)。值可以是特定的或 anywhere。
  • destination:数据包的目的地(IP 地址或子网)。值可以是特定的或 anywhere。

如果您注意到了,最后一列没有标签。这是因为它用于表示规则的选项。它将包含规则中不适合前面字段的所有部分。它可能包含从源/目的端口到数据包连接状态等任何内容。

数据包计数和总大小

清除数据包和字节计数器

当我们列出 iptables 规则时,我们还可以检查与每个特定规则匹配的数据包数量以及数据包的总大小(以字节为单位)。当您需要粗略了解哪些规则正在与数据包匹配时,这是一个非常有用的指标。

在此示例中,我们将使用 INPUT 链。这一次,添加代表详细模式的 “-v” 标志:

package and byte counters iptables

您会注意到表格输出现在包含两个额外的字段:pkts 和 bytes。

重置数据包计数和总大小

在某些情况下,您可能希望重置我们之前演示的计数器。如果系统重启,计数器将自动清零。您也可以手动强制重置。我们将使用 “-Z” 标志来重置数据包计数和总大小:

Reset packet counts and aggregate size

请注意,此命令将重置所有链的计数器。与其他命令类似,也可以重置特定链的计数器。例如,下一个命令将重置 INPUT 链的计数器:

reset particular counter

可以让计数器重置操作更加精确。您可以重置特定链下特定规则的计数器。为此,请在链名称后添加规则编号:

reset specific rule

删除规则

按规格删除规则

有多种方法可以删除 iptables 规则。第一种删除规则的方法是按规则规格。为了进行删除,我们将使用 “-D” 标志,后跟规则规格:

Delete rules by specification

如果您之前添加过任何 iptables 规则,您会注意到其相似之处。这里唯一改变的是使用 “-D” 标志代替了 “-A” 标志。

按链和编号删除规则

按规则规格删除规则需要花费更多精力,对吧?如果我们可以在不记住规则规格的情况下删除它们呢?让我们按链和编号来删除规则吧!与第一种方法(按规格删除)相比,这种方法相对更容易,因为您不需要掌握整个规格。

此方法需要目标规则的链和行号。我们从哪里获取行号?运行以下命令来确定:

Delete rules by chain and number - get line number

您将获得包含所有规则及其行号的大量输出。要缩小输出范围,请在 “-L” 标志后使用链名称:

Delete rules by chain and number - filter

在输出中,您会注意到多了一列 num。它表示每个规则的行号。一旦我们确定了目标编号,就可以执行删除:

delete iptables rule

清空链

对于 iptables,什么是清空链?它是删除特定链下所有规则的过程。如果您需要批量删除规则,则可以使用此方法。在执行链清空之前,我们强烈建议您使用 iptables-save 备份现有规则。这是一个内置的 iptables 工具,它将输出所有当前的链和规则。输出可以导出到文本文件:

iptables rules export

清空单个链

让我们来看看如何清空一个链。使用 “-F” 标志,后跟目标链:

flush a single chain

清空所有链

在清空所有链之前,请确保您明白自己在做什么。这将删除 iptables 防火墙的所有规则。您应该确保事先创建了 iptables 规则备份。

准备好了吗?运行以下命令清空所有 iptables 链:

flush all changes

清空规则、删除链并接受所有流量

执行本节中描述的步骤将有效禁用防火墙,允许不受限制的网络流量。与前一节类似,我们建议在继续之前备份 iptables。首先,我们将每个内置链的默认策略更改为 ACCEPT。这是为了确保 iptables 不会通过 SSH 将您锁定在服务器之外:

Flush rules, delete chains and accept all

现在,清空 nat 和 mangle 表:

 flush nat and mangle tables

 mangle tables

清空所有链并删除所有非默认链:

Flush all the chains

 delete all the non-default chains

接下来,让我们查看结果:

iptables result

结语

Iptables 是一款功能强大的防火墙。希望本指南对您学习如何列出和删除 iptables 防火墙规则有所帮助。在将它们应用到实际环境之前,请不要忘记进行练习。

祝您使用愉快!

author

Akshay Nagpal

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的创意设计师,专注于通过传统和创新营销渠道打造一致的企业形象。他擅长将艺术愿景与战略营销相融合,创造具有影响力的品牌叙事。

评论

暂无评论。发表第一条评论吧。