Linux 防火墙教程:iptables 表(Table)、链(Chain)、规则(Rule)基础

iptables 防火墙用于管理数据包过滤和 NAT 规则。 iptables 随所有 Linux 发行版一起提供。了解如何设置和配置 iptables 将帮助我们有效地管理 Linux 防火墙。

iptables 工具用于管理 Linux 防火墙规则。乍一看,iptables 可能看起来很复杂(甚至令人困惑)。但是,一旦了解了 iptables 工作原理及其结构的基础知识,阅读和编写 iptables 防火墙规则就会变得很容易。

本文是正在进行的 iptables 教程系列的一部分。这是该系列的第 1 篇文章。

本文解释了 iptables 的结构,并解释了有关 iptables 表、链和规则的基础知识。

在高级别的 iptables 上可能包含多个表。表可能包含多个链。链可以是内置的或用户定义的。链可能包含多个规则。为数据包定义规则。

所以,结构是:iptables -> Tables -> Chains -> Rules。这在下图中定义。

Linux 防火墙教程:iptables 表(Table)、链(Chain)、规则(Rule)基础

重申一下,表是一堆链,链是一堆防火墙规则

IPTABLES 表和链

IPTables 有以下 4 个内置表。

1. Filter 表

Filter 是 iptables 的默认表。 因此,如果我们不定义自己的表,我们将使用 Filter 表。 iptables 的 Filter 表有以下内置链。

  • INPUT 链 – 进入防火墙。 对于到达本地服务器的数据包。
  • OUTPUT 链 – 从防火墙传出。 对于本地生成并从本地服务器传出的数据包。
  • FORWARD 链 – 本地服务器上另一个 NIC 的数据包。 对于通过本地服务器路由的数据包。

2. NAT 表

iptable 的 NAT 表有以下内置链。

  • PREROUTING 链 – 在路由之前更改数据包。 即数据包转换在数据包到达系统之后(并且在路由之前)立即发生。 这有助于将数据包的目标 IP 地址转换为与本地服务器上的路由匹配的内容。 这用于 DNAT(目标 NAT)。
  • POSTROUTING 链 – 在路由后更改数据包。 即当数据包离开系统时发生数据包转换。 这有助于将数据包的源 IP 地址转换为可能与目标服务器上的路由匹配的内容。 这用于 SNAT(源 NAT)。
  • OUTPUT 链 – 防火墙上本地生成的数据包的 NAT。

3. Mangle 表

iptables 的 Mangle 表用于专门的数据包更改。 这会改变 TCP 标头中的 QOS 位。 Mangle 表具有以下内置链。

  • PREROUTING 链
  • OUTPUT 链
  • FORWARD 链
  • INPUT 链
  • POSTROUTING 链

4. Raw 表

iptable 的原始表用于配置例外。 原始表具有以下内置链。

  • PREROUTING 链
  • OUTPUT 链

下图展示了 iptables 中的三个重要表。

Linux 防火墙教程:iptables 表(Table)、链(Chain)、规则(Rule)基础


IPTABLES 规则

以下是 iptables 规则要记住的关键点。

  • 规则包含标准和目标。
  • 如果条件匹配,它将转到目标中指定的规则(或)执行目标中提到的特殊值。
  • 如果条件不匹配,则继续执行下一条规则。

Target 值

以下是我们可以在目标中指定的可能的特殊值。

  • ACCEPT – 防火墙将接受数据包。
  • DROP – 防火墙将丢弃数据包。
  • QUEUE – 防火墙会将数据包传递给用户空间。
  • RETURN – 防火墙将停止为此数据包执行当前链中的下一组规则。 控制将返回给调用链。

如果我们执行 iptables –list (或) service iptables status,我们将看到系统上所有可用的防火墙规则。 以下 iptable 示例显示此系统上没有定义防火墙规则。 如各位所见,它显示了默认输入表,包括默认输入链、forward 链和output链。

$ iptables -t filter --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Linux 防火墙教程:iptables 表(Table)、链(Chain)、规则(Rule)基础

执行以下操作以查看 mangle 表。

$ iptables -t mangle --list

执行以下操作以查看 nat 表。

$ iptables -t nat --list

执行以下操作以查看 raw 表。

$ iptables -t raw --list

注意 :如果不指定 -t 选项,它将显示默认过滤器表。 因此,以下两个命令是相同的。

$ iptables -t filter --list
(or)
$ iptables --list

下面的 iptable 示例显示在 Filter 表的输入、转发和输出链中定义了一些规则。

$ iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
DROP       tcp  --  anywhere             anywhere             tcp dpt:mysql
ACCEPT     icmp --  anywhere             anywhere             icmp echo-request

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Linux 防火墙教程:iptables 表(Table)、链(Chain)、规则(Rule)基础

iptables –list 命令输出中的规则包含以下字段:

  • num – 特定链中的规则编号
  • target – 我们上面讨论的特殊目标变量
  • prot – 协议。 tcp、udp、icmp等,
  • opt – 该特定规则的特殊选项。
  • source – 数据包的源 IP 地址
  • destination – 数据包的目的地 IP 地址