50% off 所有套餐限时优惠,起价 $2.48/mo
14 min left
Security & Networking

列出和删除 Linux Iptables 规则 - 初学者速查表

Lily Carnell By Lily Carnell 14 min read Updated Sep 18, 2023
Iptables 规则的列出和删除指南

未授权访问和服务器黑客攻击是严重威胁,这就是为什么你需要将防火墙作为网络安全技术的一部分。掌握 Iptables 规则是降低 Linux 系统风险的关键技能之一。本教程将指导你了解基本的防火墙概念,如显示和删除 iptables 规则, Ubuntu帮助你通过简单命令来实现。在讨论如何列出或删除 iptables 规则之前,我们先了解一下什么是 iptables 规则以及为什么使用它们。

What is Iptables?

iptables 是一个命令行防火墙工具,可以允许或阻止流量通过 policy chains。当系统上有连接尝试时,iptables 会在规则列表中查找匹配的规则,为你的网络安全提供有力保障。如果找不到匹配的规则,它会执行默认操作。

iptables 在几乎所有系统上都是预装的 Linux distribution。您可以使用以下命令来更新或安装它:

sudo apt-get install iptables

为什么使用 Iptables?

作为 Linux 命令行防火墙,iptables 让系统管理员能够通过可配置的表规则处理入站和出站流量。Iptables 使用一组表,每个表包含内置规则或自定义规则的链。

如前所述,iptables 在大多数 Linux 系统的网络安全中起着关键作用。本文的其余部分主要介绍如何列出 iptables 规则,包括显示和删除 iptables 规则的方法。

具体来说,本文将讨论一些关键的 iptables 任务,向你展示如何列出规则、删除数据包和字节计数器、移除 Iptables 规则、清空链、删除所有链以及接受所有流量。

Ubuntu 中 Iptables 完全指南

查看 iptables 规则前,确保你使用的是 Linux 服务器且已安装 iptables 命令。除此之外,你需要有 sudo 权限。配置防火墙时要特别小心,不要误删规则导致自己无法访问服务器(SSH 流量,默认端口 22)。如果因防火墙设置失误而失去访问权限,你需要通过带外控制台连接来修复。

Also Read: 如何修改 SSH 端口 | Linux 中 SSH 端口的快速分步指南

按规范列出规则

你可以查看你的活跃 iptables 规则 in a table or as 规则说明列表。这两种方法基本上以不同的格式提供相同的信息。要列出活跃 iptables 的所有规则,你需要运行 iptables 命令并带上 -S option:

sudo iptables -S

运行 iptables show rules 命令后,你会看到类似这样的输出:

运行 show list rules 的输出结果
运行 show list rules 的输出结果

列出特定链

如果你想限制 show iptables 的输出到特定的链,比如 INPUT、OUTPUT 或 TCP,你可以在 -S 选项后直接指定链名称。例如,以下 iptables 显示规则的命令可以帮你在 TCP 链中指定:

sudo iptables -S TCP

列出 TCP 链的输出
列出 TCP 链的输出

如前所述,还有另一种方式可以查看 iptables 规则:把 iptables 规则当作一个规则表来查看。下面我们来讲这个方法。

按表格列出规则

使用命令查看 iptables 表中的规则可以帮助你比较各种规则。你需要运行下面的 iptables 查看命令,并 -L option 以表格形式输出所有这些活跃规则:

sudo iptables -L

该命令会显示所有当前规则,按链分组排列。你可以限制输出仅显示特定链的规则,比如 INPUT、OUTPUT、TCP 等。只需在 -L 选项后直接指定链名称即可。下面是限制 iptables 显示规则到 INPUT 链的示例:

sudo iptables -L INPUT

iptables 输出仅显示 INPUT 链的规则
iptables 输出仅显示 INPUT 链的规则

上面输出的第一行显示了链名称(本例中为 INPUT)及其默认策略(DROP)。接下来的一行包含表格中每列的标题和该链的规则。我们将逐一讲解,帮助你全面了解:

  • 目标:如果数据包匹配规则,目标决定了对该数据包的处理方式。你可以选择接受、丢弃、记录数据包,或将其发送到另一条链进行进一步的规则匹配。
  • prot: 协议(例如 TCP、udp、ICMP 或 all)
  • opt: 表示 IP 选项(不常使用)
  • source: 显示流量的源 IP 地址/子网 
  • destination: 呈现流量的目标 IP 地址/子网

无标签列展示了规则的选项,即规则中未在前面列中指明的任何部分。这些信息可以是任何内容,从源端口和目标端口到数据包的连接状态。

Also Read: 在 VPS 上安装 OpenVPN - OpenVPN 客户端设置 🔑

如何显示数据包计数和聚合大小?

列出 iptables 规则时,我们可以显示匹配每条规则的数据包数量和这些数据包的总字节数。这对于了解哪些规则匹配了数据包很有帮助。你需要使用 -L and 选项一起使用来完成 this.

下面是一个例子,我们将再次使用 INPUT 链,并加上 -v 选项:

sudo iptables -L INPUT -v

显示数据包计数和总大小
显示数据包计数和总大小的输出

注意我们的列表现在多了两列,分别命名为 pkts and bytes我们已经学过了各种查看 iptables 规则的方法,现在是时候掌握如何重置数据包计数和聚合大小了。

如何重置数据包计数和聚合大小?

如果你需要清晰的或零化的数据包和字节计数器来追踪规则,必须使用 -Z 选项。重启后计数器也会重置,这对于检查服务器是否接收到与现有规则匹配的新流量很有用。

你可以使用以下方式清除所有链和规则的计数器 -Z option by itself:

sudo iptables -Z

要清除特定链中所有规则的计数器,必须使用 -Z 选项并指定该链。例如,以下命令用于清除 INPUT 链的计数器:

sudo iptables -Z INPUT

如果要清除特定规则的计数器,必须准确指定链名称和规则编号。例如,可以执行以下命令来将 INPUT 链中第一条规则的计数器清零:

sudo iptables -Z INPUT 1

除了掌握 iptables 显示所有规则的命令和重置数据包与字节计数器的方法,还需要了解如何删除 iptables 规则。

Also Read: 如何在 VPS 上安装 PPTP VPN 服务器

如何删除 iptables 规则?

您可以使用多个命令来删除 Iptables 规则,甚至删除链中的所有规则。下面我们来讨论这些方法。

按规范删除规则

删除 iptables 规则的一种方法是通过规则规范来执行。它使您能够运行带有规则规范的 iptables 命令。 -D option 如果您想使用此技术删除规则,可以利用规则列表的输出 iptables -S 来获得帮助。

例如,要删除丢弃无效传入数据包的规则(-A INPUT -m conntrack –ctstate INVALID -j DROP),可以执行以下命令:

sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP

注意 -A 选项用于在创建时指示规则位置,在这里应该省略。

按链和编号删除规则

删除 iptables 规则的另一种方法是通过其链和行号。输入以下命令来选择规则的行号,以表格格式列出规则,并添加 –line-numbers 选项:

sudo iptables -L --line-numbers

按链和编号删除规则
按链和数字删除规则的输出

运行此命令后,所有 iptables 规则都有其行号,由 num 标题显示。

当您知道要删除的规则后,请记住其链和行号。您必须使用 iptables -D 命令,并指定链和规则号。例如,如果您想删除丢弃无效数据包的输入规则,您可以看到它是 INPUT 链的第 3 条规则。因此运行此命令:

sudo iptables -D INPUT 3

如何清空链?

有一种方法可以删除链中的所有 Iptables 规则,我们称之为 flushing a chain。下面我们来介绍完成此操作的各种方法。在继续之前,请注意在刷新默认策略为 drop 或 deny 的链时,不要被 SSH 锁定在服务器外。因为如果您这样做,可能需要通过控制台连接来修复您的访问权限。

刷新单个链

要刷新特定链,或换句话说,删除链中的所有规则,您可以使用 -F or the equivalent –flush option 和所选链的名称。假设您要删除 INPUT 链中的所有规则,该怎么办?很简单,运行以下命令:

sudo iptables -F INPUT

刷新所有链

要删除所有链或刷新它们,可以单独使用 -F 选项或等效的 –flush 选项:

sudo iptables -F

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

在这一点上,我们将描述如何刷新所有防火墙规则、表和链,并允许所有网络流量。请注意此过程将有效地禁用防火墙。因此,只有在您想从头开始配置防火墙时,才应该按照本部分进行操作。

首先,您需要将每个内置链的默认策略设置为 ACCEPT。我们这样做的主要原因是确保您不会被 SSH 锁定在服务器外:

sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

然后,您需要刷新 nat 和 mangle 表,刷新所有链 (-F),并删除所有非默认链 (-X) like this:

sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -F
sudo iptables -X

运行完前面的命令后,防火墙将允许所有网络流量。如果您现在要列出规则,您会看到没有规则;只有三个默认链(如 INPUT、FORWARD 和 OUTPUT 链)保持不变。

如何在 Ubuntu 中配置 iptables?

与任何基本防火墙行为一样,iptables 规则按照每个链上列出的顺序读取,这意味着您必须按正确的顺序设置规则。追加新规则后,它们将被添加到规则列表的末尾。您可以通过以下方式将新规则插入到特定列表位置: iptables -I <index> -command。 The <index> 是此命令中您希望插入规则的顺序号。您可以使用以下命令来了解要输入的索引号:

sudo iptables -L --line-numbers

每条规则行开头的数字表示该规则在链中的位置。如果要在某条现有规则上方添加新规则,需要使用该现有规则的索引号。例如,如果要在链的最顶部添加新规则,需要使用以下命令,索引号为 1:

sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

iptables 和 firewalld 有什么区别?

iptables 和 firewalld 都是在各种 Linux 系统上管理防火墙的实用工具,它们专门用于数据包过滤(静态过滤)。数据包过滤是一种防火墙策略,允许用户通过管理进出的数据包来控制对特定网络的访问。根据预设的防火墙规则(涉及源地址、目标地址、协议和端口以及 IP 地址),这些工具可以允许数据包通过或将其阻止。这些规则提供了高效的安全机制,使数据包过滤成为防御来自系统局域网(LAN)外部路由设备的有力防线。

需要注意的是,firewalld 最初是作为管理 iptables 的工具而引入的,目的是简化用户的操作体验。既然我们已经介绍了 firewalld 和 iptables,接下来就详细对比一下两者。

iptables 与 firewalld:系统配置对比

firewalld 和 iptables 使用不同的配置和默认存储方式。使用 iptables 时,每次修改都要清除所有旧规则并加载新规则,系统必须重启。而 firewalld 不会重新生成规则,它直接将差异和修改应用到现有规则上,让你可以在运行时立即看到效果。

iptables 和 firewalld:用户界面

Firewalld 提供图形界面 (GUI),而 iptables 使用命令行界面 (CLI)。对于某些人来说,用 iptables 访问 Linux 内核防火墙规则可能比较困难,这让 firewalld 成为更直接的选择。不过需要注意的是,iptables 因为使用短命令所以响应速度更快。两者各有所长,选择你更熟悉的工具即可。

最后总结:iptables 显示规则

Iptables 是专为 Linux 操作系统设计的高度灵活的防火墙工具。无论你是初学者还是专业系统管理员,iptables 规则都能为你提供帮助。本文介绍了这个防火墙工具的基本命令,包括查看和删除 iptables 规则,旨在简要展示 Linux 的防火墙功能。此外,你还可以使用我们的 Linux VPS 托管解决方案 充分发挥这个优秀操作系统的真正潜力。Cloudzy 提供多款基于 KVM 的 Linux VPS 方案,适用于网站托管、部署网络应用,以及搭建代码开发、测试和自动化环境等多种场景。

FAQ

如何按规范列出 Linux iptables 的所有规则?

如果你想列出所有当前活跃的 iptables 规则,可以用 iptables 命令后跟 -S flag。请注意充分利用 sudo 在这种情况下的关键词:

sudo iptables -S

如何删除 iptables 规则?

要删除特定的链(这会删除该链中的所有规则),你需要 使用 -F 或 --flush 选项,后跟链名称。 假设我们要删除 OUTPUT 链中的所有规则,该怎么办?执行这条命令就行:

 sudo iptables -F OUTPUT

iptables 在 Ubuntu 中如何工作?

iptables 防火墙根据一组规则对网络流量进行检查。这些规则定义了数据包需要匹配的特征,以及匹配时应该采取的操作。当然,你可以灵活配置规则的匹配条件,以捕获特定的数据包。

iptables 规则是否立即生效?为什么?

是的,iptables 规则立即生效。因为你的脚本是在 INPUT 和 OUTPUT 链末尾追加规则,新规则被添加到这些链的最后。

Share

博客更新

Keep reading.

MikroTik L2TP VPN 指南的 Cloudzy 标题图像,展示笔记本电脑通过发光的蓝色和金色数字隧道连接到服务器机架,并配有盾牌图标。
Security & Networking

MikroTik L2TP VPN 设置(含 IPsec):RouterOS 指南(2026)

在这个 MikroTik L2TP VPN 设置中,L2TP 处理隧道,IPsec 处理加密和完整性验证。将两者结合使用可以获得原生客户端兼容性,无需第三方工具。

Rexa CyrusRexa Cyrus 9 min read
终端窗口显示 SSH 警告信息,提示远程主机标识已更改。深蓝绿色背景上显示修复指南标题和 Cloudzy 品牌标识。
Security & Networking

警告:远程主机标识已更改及修复方法

SSH 是一种安全网络协议,可在系统之间创建加密隧道。在需要远程访问计算机但无需图形界面的开发者中仍然广泛使用。

Rexa CyrusRexa Cyrus 10 min read
DNS 服务器故障排查指南插图,深色背景上显示警告符号和蓝色服务器,用于 Linux 名称解析错误。
Security & Networking

名称解析临时失败:含义和修复方法?

使用 Linux 时,在尝试访问网站、更新软件包或执行需要网络连接的任务时,可能会遇到名称解析临时失败错误。

Rexa CyrusRexa Cyrus 12 min read

Ready to deploy? From $2.48/mo.

独立云服务,始于2008年。AMD EPYC、NVMe,40 Gbps。14天退款保障。