未授权访问和服务器黑客攻击是严重威胁,这就是为什么你需要将防火墙作为网络安全技术的一部分。掌握 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 iptables 的输出到特定的链,比如 INPUT、OUTPUT 或 TCP,你可以在 -S 选项后直接指定链名称。例如,以下 iptables 显示规则的命令可以帮你在 TCP 链中指定:
sudo iptables -S TCP

如前所述,还有另一种方式可以查看 iptables 规则:把 iptables 规则当作一个规则表来查看。下面我们来讲这个方法。
按表格列出规则
使用命令查看 iptables 表中的规则可以帮助你比较各种规则。你需要运行下面的 iptables 查看命令,并 -L option 以表格形式输出所有这些活跃规则:
sudo iptables -L
该命令会显示所有当前规则,按链分组排列。你可以限制输出仅显示特定链的规则,比如 INPUT、OUTPUT、TCP 等。只需在 -L 选项后直接指定链名称即可。下面是限制 iptables 显示规则到 INPUT 链的示例:
sudo iptables -L 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 链末尾追加规则,新规则被添加到这些链的最后。