1.7. 使用 firewalld 区


zones 代表一种更透明管理传入流量的概念。这些区域连接到联网接口或者分配一系列源地址。您可以独立为每个区管理防火墙规则,这样就可以定义复杂的防火墙设置并将其应用到流量。

您可以通过修改防火墙设置,关联特定的网络接口或与特定防火墙区域的连接来增强网络安全性。通过为区域定义粒度规则和限制,您可以根据您想要的安全级别控制入站和出站流量。

例如,您可以取得以下好处:

  • 敏感数据的保护
  • 防止未授权访问
  • 潜在网络威胁的缓解

先决条件

  • firewalld 服务在运行。

流程

  1. 列出可用的防火墙区域:

    # firewall-cmd --get-zones
    Copy to Clipboard Toggle word wrap

    firewall-cmd --get-zones 命令显示系统上所有可用的区,但不显示特定区的详情。要查看所有区域的详情,请使用 firewall-cmd --list-all-zones 命令。

  2. 选择您要用于此配置的区域。
  3. 修改所选区域的防火墙设置。例如,要允许 SSH 服务并删除 ftp 服务:

    # firewall-cmd --add-service=ssh --zone=<your_chosen_zone>
    # firewall-cmd --remove-service=ftp --zone=<same_chosen_zone>
    Copy to Clipboard Toggle word wrap
  4. 为防火墙区分配网络接口:

    1. 列出可用的网络接口:

      # firewall-cmd --get-active-zones
      Copy to Clipboard Toggle word wrap

      区域的活动是由网络接口的存在或与其配置匹配的源地址范围确定的。默认区域对于未分类的流量处于活动状态,但如果没有流量匹配其规则,则并不是总是处于活动状态。

    2. 为所选区域分配一个网络接口:

      # firewall-cmd --zone=<your_chosen_zone> --change-interface=<interface_name> --permanent
      Copy to Clipboard Toggle word wrap

      为区域分配一个网络接口更适合将一致的防火墙设置应用到特定接口(物理或虚拟)上的所有流量。

      firewall-cmd 命令与 --permanent 选项一起使用时,通常涉及更新 NetworkManager 连接配置文件,以永久更改防火墙配置。firewalld 和 NetworkManager 之间的这种集成确保一致的网络和防火墙设置。

验证

  1. 显示您选择的区域的更新设置:

    # firewall-cmd --zone=<your_chosen_zone> --list-all
    Copy to Clipboard Toggle word wrap

    命令输出显示所有区设置,包括分配的服务、网络接口和网络连接(源)。

1.7.2. 更改默认区

系统管理员在其配置文件中为网络接口分配区域。如果接口没有被分配给指定区,它将被分配给默认区。每次重启 firewalld 服务后,firewalld 会加载默认区的设置,并使其处于活动状态。请注意,所有其他区域的设置都被保留并准备好使用。

通常,根据 NetworkManager 连接配置文件中的 connection.zone 设置,区域被分配给接口。另外,重启后,NetworkManager 管理“激活”这些区域的分配。

先决条件

  • firewalld 服务在运行。

流程

设置默认区:

  1. 显示当前的默认区:

    # firewall-cmd --get-default-zone
    Copy to Clipboard Toggle word wrap
  2. 设置新的默认区:

    # firewall-cmd --set-default-zone <zone_name>
    Copy to Clipboard Toggle word wrap
    注意

    按照此流程,设置是一个永久设置,即使没有 --permanent 选项。

1.7.3. 将网络接口分配给区

可以为不同区定义不同的规则集,然后通过更改所使用的接口的区来快速改变设置。使用多个接口,可以为每个具体区设置一个区来区分通过它们的网络流量。

流程

要将区分配给特定的接口:

  1. 列出活跃区以及分配给它们的接口:

    # firewall-cmd --get-active-zones
    Copy to Clipboard Toggle word wrap
  2. 为不同的区分配接口:

    # firewall-cmd --zone=zone_name --change-interface=interface_name --permanent
    Copy to Clipboard Toggle word wrap

1.7.4. 添加源

要将传入的流量路由到特定区,请将源添加到那个区。源可以是一个使用 CIDR 格式的 IP 地址或 IP 掩码。

注意

如果您添加多个带有重叠网络范围的区域,则根据区名称排序,且只考虑第一个区。

  • 在当前区中设置源:

    # firewall-cmd --add-source=<source>
    Copy to Clipboard Toggle word wrap
  • 要为特定区设置源 IP 地址:

    # firewall-cmd --zone=zone-name --add-source=<source>
    Copy to Clipboard Toggle word wrap

以下流程允许来自 受信任 区中 192.168.2.15 的所有传入的流量:

流程

  1. 列出所有可用区:

    # firewall-cmd --get-zones
    Copy to Clipboard Toggle word wrap
  2. 将源 IP 添加到持久性模式的信任区中:

    # firewall-cmd --zone=trusted --add-source=192.168.2.15
    Copy to Clipboard Toggle word wrap
  3. 使新设置具有持久性:

    # firewall-cmd --runtime-to-permanent
    Copy to Clipboard Toggle word wrap

1.7.5. 删除源

当您从区域中删除一个源时,起源于源的流量不再被通过为该源指定的规则来定向。相反,流量会退回到与其起源的接口关联的区域的规则和设置,或进入默认区域。

流程

  1. 列出所需区的允许源:

    # firewall-cmd --zone=zone-name --list-sources
    Copy to Clipboard Toggle word wrap
  2. 从区永久删除源:

    # firewall-cmd --zone=zone-name --remove-source=<source>
    Copy to Clipboard Toggle word wrap
  3. 使新设置具有持久性:

    # firewall-cmd --runtime-to-permanent
    Copy to Clipboard Toggle word wrap

1.7.6. 使用 nmcli 为连接分配区域

您可以使用 nmcli 工具将 firewalld 区域添加到 NetworkManager 连接。

流程

  1. 将区分配给 NetworkManager 连接配置文件:

    # nmcli connection modify profile connection.zone zone_name
    Copy to Clipboard Toggle word wrap
  2. 激活连接:

    # nmcli connection up profile
    Copy to Clipboard Toggle word wrap

1.7.7. 创建一个新区

要使用自定义区,创建一个新的区并使用它像预定义区一样。新区需要 --permanent 选项,否则命令无法工作。

先决条件

  • firewalld 服务在运行。

流程

  1. 创建一个新区:

    # firewall-cmd --permanent --new-zone=zone-name
    Copy to Clipboard Toggle word wrap
  2. 使新区域可用:

    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap

    命令将最新的更改应用到防火墙配置,而不中断已运行的网络服务。

验证

  • 检查是否在您的永久设置中添加了新的区:

    # firewall-cmd --get-zones --permanent
    Copy to Clipboard Toggle word wrap

1.7.8. 使用 Web 控制台启用区域

您可以通过 RHEL web 控制台对特定接口或 IP 地址范围应用预定义和现有的防火墙区域。

先决条件

  • 您已安装了 RHEL 9 web 控制台。
  • 您已启用了 cockpit 服务。
  • 您的用户帐户被允许登录到 web 控制台。

    具体步骤请参阅安装并启用 Web 控制台

流程

  1. 登录到 RHEL 9 web 控制台。

    详情请参阅 登录到 web 控制台

  2. Networking
  3. 编辑规则和区域按钮。

    Edit firewall rules and zones in the web console

    如果没有看到 Edit rules and zones 按钮,使用管理员权限登录到 web 控制台。

  4. Firewall 部分,点 Add new zone
  5. Add zone 对话框中,从信任级别选项选择一个区。

    Web 控制台显示 firewalld 服务中预定义的所有区域。

  6. 接口部分,选择一个应用所选区的接口或接口。
  7. Allowed Addresses 部分中,您可以选择是否应用该区:

    • 整个子网
    • 或者以以下格式表示的 IP 地址范围:

      • 192.168.1.0
      • 192.168.1.0/24
      • 192.168.1.0/24, 192.168.1.0
  8. Add zone 按钮。

    Add a firewall zone

验证

  • 检查 Firewall 部分中的配置:

    Active zones

1.7.9. 使用 Web 控制台禁用区域

您可以使用 Web 控制台在防火墙配置中禁用防火墙区域。

先决条件

  • 您已安装了 RHEL 9 web 控制台。
  • 您已启用了 cockpit 服务。
  • 您的用户帐户被允许登录到 web 控制台。

    具体步骤请参阅安装并启用 Web 控制台

流程

  1. 登录到 RHEL 9 web 控制台。

    详情请参阅 登录到 web 控制台

  2. Networking
  3. 编辑规则和区域按钮。

    cockpit edit rules and zones

    如果没有看到 Edit rules and zones 按钮,使用管理员权限登录到 web 控制台。

  4. 点您要删除的区的 Options 图标。

    cockpit delete zone

  5. 单击 Delete

区域现在被禁用,接口不包括在区域中配置的打开的服务和端口。

1.7.10. 使用区目标设定传入流量的默认行为

对于每个区,您可以设置一种处理尚未进一步指定的传入流量的默认行为。此行为是通过设置区的目标来定义的。有四个选项:

  • ACCEPT:接受除特定规则不允许的所有传入的数据包。
  • REJECT:拒绝所有传入的数据包,但特定规则允许的数据包除外。当 firewalld 拒绝数据包时,源机器会发出有关拒绝的信息。
  • DROP:除非由特定规则允许,丢弃所有传入数据包。当 firewalld 丢弃数据包时,源机器不知道数据包丢弃的信息。
  • default:与 REJECT 的行为类似,但在某些情况下有特殊含义。

先决条件

  • firewalld 服务在运行。

流程

为区设置目标:

  1. 列出特定区的信息以查看默认目标:

    # firewall-cmd --zone=zone-name --list-all
    Copy to Clipboard Toggle word wrap
  2. 在区中设置一个新目标:

    # firewall-cmd --permanent --zone=zone-name --set-target=<default|ACCEPT|REJECT|DROP>
    Copy to Clipboard Toggle word wrap

1.7.11. 配置动态更新,以允许 IP 集合列表

您可以进行几乎实时更新,来灵活地允许 IP 集合中的特定 IP 地址或范围,即使在无法预计的情况下也是如此。这些更新可由各种事件触发,如安全威胁的检测或网络行为的更改。通常,此类解决方案利用自动化来减少手动工作,并通过快速响应情况来提高安全性。

先决条件

  • firewalld 服务在运行。

流程

  1. 创建一个带有有意义名称的 IP 集合:

    # firewall-cmd --permanent --new-ipset=allowlist --type=hash:ip
    Copy to Clipboard Toggle word wrap

    名为 allowlist 的新 IP 集合包含您希望防火墙允许的 IP 地址。

  2. 向 IP 集合添加动态更新:

    # firewall-cmd --permanent --ipset=allowlist --add-entry=198.51.100.10
    Copy to Clipboard Toggle word wrap

    此配置使用新添加的 IP 地址更新 allowlist IP 集合,防火墙允许其传输网络流量。

  3. 创建一个引用之前创建的 IP 集合的防火墙规则:

    # firewall-cmd --permanent --zone=public --add-source=ipset:allowlist
    Copy to Clipboard Toggle word wrap

    如果没有此规则,IP 集合对网络流量没有任何影响。默认防火墙策略将优先。

  4. 重新载入防火墙配置以应用更改:

    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap

验证

  1. 列出所有 IP 集合:

    # firewall-cmd --get-ipsets
    allowlist
    Copy to Clipboard Toggle word wrap
  2. 列出活跃的规则:

    # firewall-cmd --list-all
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: enp0s1
      sources: ipset:allowlist
      services: cockpit dhcpv6-client ssh
      ports:
      protocols:
      ...
    Copy to Clipboard Toggle word wrap

    命令行输出的 sources 部分对允许或拒绝哪些流量源(主机名、接口、IP 集、子网等)访问特定的防火墙区域提供见解。在这种情况下,包含在 allowlist IP 集合中的 IP 地址被允许通过防火墙为 public 区域传输流量。

  3. 探索 IP 集合的内容:

    # cat /etc/firewalld/ipsets/allowlist.xml
    <?xml version="1.0" encoding="utf-8"?>
    <ipset type="hash:ip">
      <entry>198.51.100.10</entry>
    </ipset>
    Copy to Clipboard Toggle word wrap

后续步骤

  • 使用脚本或安全工具来获取您的威胁情报源,并以自动化方式相应地更新 allowlist
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat