7.8. 使用 firewalld 控制网络流量


firewalld 软件包安装大量预定义的服务文件,您可以添加更多或自定义它们。然后,您可以使用这些服务定义为服务打开或关闭端口,而无需了解这些服务使用的协议和端口号。

7.8.1. 使用 CLI 控制预定义服务的流量

控制流量的最简单的方法是在 firewalld 中添加预定义的服务。这会打开所有必需的端口并根据 服务定义文件 修改其他设置。

前提条件

  • firewalld 服务正在运行。

流程

  1. 检查 firewalld 中的服务是否没有被允许:

    # firewall-cmd --list-services
    ssh dhcpv6-client

    命令列出默认区域中启用的服务。

  2. 列出 firewalld 中的所有预定义服务:

    # firewall-cmd --get-services
    RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry ...

    命令显示默认区域的可用服务列表。

  3. 将服务添加到 firewalld 允许的服务列表中:

    # firewall-cmd --add-service=<service_name>

    命令将指定的服务添加到默认区域中。

  4. 使新设置具有持久性:

    # firewall-cmd --runtime-to-permanent

    命令将这些运行时更改应用到防火墙的永久配置。默认情况下,它会将这些更改应用到默认区的配置。

验证

  1. 列出所有永久防火墙规则:

    # firewall-cmd --list-all --permanent
    public
      target: default
      icmp-block-inversion: no
      interfaces:
      sources:
      services: cockpit dhcpv6-client ssh
      ports:
      protocols:
      forward: no
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:

    使用默认防火墙区域 的永久防火墙规则(公共)显示完整的配置。

  2. 检查 firewalld 服务的永久配置的有效性。

    # firewall-cmd --check-config
    success

    如果永久配置无效,命令会返回带有更多详情的错误:

    # firewall-cmd --check-config
    Error: INVALID_PROTOCOL: 'public.xml': 'tcpx' not from {'tcp'|'udp'|'sctp'|'dccp'}

    您还可以手动检查永久配置文件以验证设置。主配置文件为 /etc/firewalld/firewalld.conf。特定于区的配置文件位于 /etc/firewalld/zones/ 目录中,策略位于 /etc/firewalld/policies/ 目录中。

7.8.2. 使用 GUI 使用预定义服务控制流量

您可以使用图形用户界面控制预定义服务的网络流量。防火墙配置应用程序提供对命令行工具的可访问和用户友好的替代选择。

前提条件

  • firewall-config 软件包已安装 。
  • firewalld 服务正在运行。

流程

  1. 启用或禁用预定义或自定义服务:

    1. 启动 firewall-config 工具,并选择要配置其服务的网络区。
    2. 选择 Zones 选项卡,然后选择下面的 Services 选项卡。
    3. 选中您要信任的每种服务类型的复选框,或者清除复选框以阻止所选区域中的服务。
  2. 编辑服务:

    1. 启动 firewall-config 工具。
    2. 从标有 Configuration 的菜单中选择 Permanent。其它图标和菜单按钮会出现在服务窗口底部。
    3. 选择您要配置的服务。

PortsProtocolsSource Port 选项卡支持添加、更改和删除所选服务的端口、协议和源端口。模块选项卡是用于配置 Netfilter 助手模块的。Destination 选项卡允许将流量限制到特定的目标地址和互联网协议(IPv4IPv6)。

注意

Runtime 模式下无法更改服务设置。

验证

  • Super 键进入活动概览。
  • 选择 Firewall Configuration 工具。

    • 您还可以通过输入 firewall-config 命令,使用命令行启动图形防火墙配置实用程序。
  • 查看防火墙配置列表:

    防火墙配置

此时会打开 Firewall Configuration 窗口。请注意,这个命令可以以普通用户身份运行,但偶尔会提示您输入管理员密码。

7.8.3. 使用 Web 控制台在防火墙中启用服务

默认情况下,服务添加到默认防火墙区。如果在更多网络接口中使用更多防火墙区,您必须首先选择一个区域,然后添加带有端口的服务。

RHEL 8 web 控制台显示预定义的 firewalld 服务,您可以将其添加到活跃的防火墙区。

重要

RHEL 8 web 控制台配置 firewalld 服务。

Web 控制台不允许没有在 web 控制台中列出的通用 firewalld 规则。

前提条件

流程

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

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

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

    cockpit edit rules and zones

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

  4. Firewall 部分,选择要添加该服务的区,然后点击 Add Services

    cockpit add services

  5. Add Services 对话框中,找到您要在防火墙中启用的服务。
  6. 根据您的场景启用服务:

    cockpit add service

  7. Add Services

此时,RHEL 8 web 控制台在区域的服务列表中显示该服务。

7.8.4. 使用 Web 控制台配置自定义端口

您可以通过 RHEL web 控制台为服务添加自定义端口。

前提条件

流程

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

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

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

    cockpit edit rules and zones

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

  4. Firewall 部分,选择要配置自定义端口的区域,并点 Add Services

    RHEL web console: Add services

  5. Add services 对话框中,点 Custom Ports 单选按钮。
  6. 在 TCP 和 UDP 字段中,根据示例添加端口。您可以使用以下格式添加端口:

    • 端口号,如 22
    • 端口号范围,如 5900-5910
    • 别名,比如 nfs, rsync
    注意

    您可以在每个字段中添加多个值。值必须用逗号分开,且没有空格,例如: 8080、8081、http

  7. TCP 文件、UDP 文件或两者中添加端口号后,在 Name 字段中验证服务名称。

    Name 字段显示保留此端口的服务名称。如果您确定这个端口可用,且不需要在该端口上通信,则可以重写名称。

  8. Name 字段中,为服务添加一个名称,包括定义的端口。
  9. 添加端口 按钮。

    RHEL web console: Add ports

要验证设置,请进入防火墙页面,并在区域的服务列表中找到该服务。

RHEL web console: Active zones

7.8.5. 配置 firewalld 以允许托管安全 Web 服务器

端口是逻辑服务,使操作系统能够接收和区分网络流量并将其转发到系统服务。系统服务由侦听端口的守护进程表示,并等待任何进入此端口的流量。

通常,系统服务侦听为它们保留的标准端口。例如,httpd 守护进程监听 80 端口。但是,系统管理员可以直接指定端口号,而不是服务名称。

您可以使用 firewalld 服务配置对托管数据的安全 Web 服务器的访问。

前提条件

  • firewalld 服务正在运行。

流程

  1. 检查当前活跃的防火墙区:

    # firewall-cmd --get-active-zones
  2. 在适当的区中添加 HTTPS 服务:

    # firewall-cmd --zone=<zone_name> --add-service=https --permanent
  3. 重新载入防火墙配置:

    # firewall-cmd --reload

验证

  1. 检查 firewalld 中是否打开端口:

    • 如果您通过指定端口号来打开端口,请输入:

      # firewall-cmd --zone=<zone_name> --list-all
    • 如果您通过指定服务定义来打开端口,请输入:

      # firewall-cmd --zone=<zone_name> --list-services

7.8.6. 关闭未使用的或不必要的端口以增强网络安全性

当不再需要开放端口时,您可以使用 firewalld 实用程序关闭它。

重要

关闭所有不必要的端口,以减少潜在的攻击面,并最大程度降低未授权访问或利用漏洞的风险。

流程

  1. 列出所有允许的端口:

    # firewall-cmd --list-ports

    默认情况下,此命令列出了默认区域中启用的端口。

    注意

    此命令只为您提供作为端口打开的端口列表。您将无法看到作为服务打开的任何开放端口。在这种情况下,请考虑使用 --list-all 选项而不是 --list-ports

  2. 从允许的端口列表中删除端口,为传入的流量关闭它:

    # firewall-cmd --remove-port=port-number/port-type

    这个命令从区中删除端口。如果没有指定区域,它将从 default 区域中删除端口。

  3. 使新设置具有持久性:

    # firewall-cmd --runtime-to-permanent

    如果没有指定区域,这个命令会对默认区域的永久配置应用运行时更改。

验证

  1. 列出活跃区并选择要检查的区:

    # firewall-cmd --get-active-zones
  2. 列出所选区中当前打开的端口,以检查未使用的或不必要的端口是否已关闭:

    # firewall-cmd --zone=<zone_to_inspect> --list-ports

7.8.7. 通过 CLI 控制流量

您可以使用 firewall-cmd 命令:

  • 禁用网络流量
  • 启用网络流量

例如,您可以增强系统防御,确保数据隐私或优化网络资源。

重要

启用 panic 模式可停止所有网络流量。因此,只有当您具有对机器的物理访问权限或使用串行控制台登录时,才应使用它。

流程

  1. 要立即禁用网络流量,请切换 panic 模式:

    # firewall-cmd --panic-on
  2. 关闭 panic 模式会使防火墙恢复到其永久设置。要关闭 panic 模式,请输入:

    # firewall-cmd --panic-off

验证

  • 要查看是否打开或关闭 panic 模式,请使用:

    # firewall-cmd --query-panic

7.8.8. 使用 GUI 控制协议的流量

如果想使用某种协议允许流量通过防火墙,您可以使用 GUI。

前提条件

  • firewall-config 软件包已安装

流程

  1. 启动 firewall-config 工具,并选择要更改其设置的网络区。
  2. 选择 Protocols 选项卡,然后点击右侧的 Add 按钮。此时会打开 协议 窗口。
  3. 从列表中选择协议,或者选择 Other Protocol 复选框,并在字段中输入协议。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.