Menu Close
Settings Close

Language and Page Formatting Options

第 1 章 使用和配置 firewalld

防火墙是保护机器不受来自外部的、不需要的网络数据的一种方式。它允许用户通过定义一组防火墙规则 来控制主机上的入站网络流量。这些规则用于对进入的流量进行排序,并可以阻断或允许流量。

firewalld 是一个防火墙服务守护进程,其提供一个带有 D-Bus 接口的、动态可定制的、基于主机的防火墙。如果是动态的,它可在每次修改规则时启用、修改和删除规则,而不需要在每次修改规则时重启防火墙守护进程。

firewalld 使用区和服务的概念来简化流量管理。zones 是预定义的规则集。网络接口和源可以分配给区。允许的流量取决于您计算机连接到的网络,并分配了这个网络的安全级别。防火墙服务是预定义的规则,覆盖了允许特定服务进入流量的所有必要设置,并在区中应用。

服务使用一个或多个端口或地址进行网络通信。防火墙会根据端口过滤通讯。要允许服务的网络流量,必须打开其端口。firewalld 会阻止未明确设置为打开的端口的所有流量。一些区(如可信区)默认允许所有流量。

请注意,带有 nftables 后端的 firewalld 不支持使用 --direct 选项将自定义的 nftables 规则传递到 firewalld

1.1. firewalld入门

本节提供有关 firewalld 的信息。

1.1.1. 使用 firewalld、nftables 或者 iptables 时

以下是您应该使用以下工具之一的概述:

  • firewalld:使用 firewalld 实用程序进行简单防火墙用例。此工具易于使用,并涵盖了这些场景的典型用例。
  • nftables:使用 nftables 工具来设置复杂和性能关键的防火墙,如整个网络。
  • iptables:Red Hat Enterprise Linux 上的 iptables 工具使用 nf_tables 内核 API 而不是 legacy 后端。nf_tables API 提供了向后兼容性,以便使用 iptables 命令的脚本仍可在 Red Hat Enterprise Linux 上工作。对于新的防火墙脚本,红帽建议使用 nftables
重要

要避免不同的防火墙服务相互影响,在 RHEL 主机中只有一个服务,并禁用其他服务。

1.1.2. Zones

firewalld 可以用来根据用户决定在该网络中的接口和流量上设置的信任级别来将网络划分为不同的区。一个连接只能是一个区的一部分,但一个区可以被用来进行很多网络连接。

NetworkManager 通知接口区的 firewalld。您可以为接口分配区:

  • NetworkManager
  • firewall-config 工具
  • firewall-cmd 命令行工具
  • RHEL web 控制台

后三个只能编辑适当的 NetworkManager 配置文件。如果您使用 web 控制台、firewall-cmdfirewall-config 修改了接口区,那么请求会被转发到 NetworkManager,并且不会由 ⁠firewalld 来处理。

预定义区存储在 /usr/lib/firewalld/zones/ 目录中,并可立即应用到任何可用的网络接口上。只有在修改后,这些文件才会复制到 /etc/firewalld/zones/ 目录中。预定义区的默认设置如下:

block
任何传入的网络连接都会被拒绝,对于 IPv4 会显示 icmp-host-prohibited 消息,对于 IPv6 会显示 icmp6-adm-prohibited 消息。只有从系统启动的网络连接才能进行。
dmz
对于您的非企业化区里的计算机来说,这些计算机可以被公开访问,且有限访问您的内部网络。只接受所选的入站连接。
drop
所有传入的网络数据包都会丢失,没有任何通知。只有外发网络连接也是可行的。
external
适用于启用了伪装的外部网络,特别是路由器。您不信任网络中的其他计算机不会损害您的计算机。只接受所选的入站连接。
home
用于家用,因为您可以信任其他计算机。只接受所选的入站连接。
internal
当您主要信任网络中的其他计算机时,供内部网络使用。只接受所选的入站连接。
public
可用于您不信任网络中其他计算机的公共区域。只接受所选的入站连接。
trusted
所有网络连接都被接受。
work
可用于您主要信任网络中其他计算机的工作。只接受所选的入站连接。

这些区中的一个被设置为 default 区。当接口连接被添加到 NetworkManager 时,它们会被分配给默认区。安装时,firewalld 中的默认区被设置为 public 区。默认区可以被修改。

注意

网络区名称应该自我解释,并允许用户迅速做出合理的决定。要避免安全问题,请查看默认区配置并根据您的需要和风险禁用任何不必要的服务。

其他资源

  • firewalld.zone(5) 手册页。

1.1.3. 预定义的服务

服务可以是本地端口、协议、源端口和目的地列表,并在启用了服务时自动载入防火墙帮助程序模块列表。使用服务可节省用户时间,因为它们可以完成一些任务,如打开端口、定义协议、启用数据包转发等等,而不必在另外的步骤中设置所有任务。

firewalld.service(5) 手册页中描述了服务配置选项和通用文件信息。服务通过单独的 XML 配置文件来指定,这些文件采用以下格式命名:service-name.xml 。协议名称优先于 firewalld 中的服务或应用程序名称。

可以使用图形化的 firewall-config 工具、firewall-cmdfirewall-offline-cmd 来添加和删除服务。

或者,您可以编辑 /etc/firewalld/services/ 目录中的 XML 文件。如果用户未添加或更改服务,则在 /etc/firewalld/services/ 中没有相应的 XML 文件。如果要添加或更改服务,/usr/lib/firewalld/services/ 目录中的文件可作用作模板。

其他资源

  • firewalld.service(5)手册页

1.1.4. 启动 firewalld

步骤

  1. 要启动 firewalld,请以 root 用户身份输入以下命令:

    # systemctl unmask firewalld
    # systemctl start firewalld
  2. 要确保 firewalld 在系统启动时自动启动,请以 root 用户身份输入以下命令:

    # systemctl enable firewalld

1.1.5. 停止 firewalld

步骤

  1. 要停止 firewalld,请以 root 用户身份输入以下命令:

    # systemctl stop firewalld
  2. 要防止 firewalld 在系统启动时自动启动:

    # systemctl disable firewalld
  3. 要确保访问 firewalld D-Bus接口时未启动firewalld,并且其他服务需要 firewalld 时也未启动 firewalld :

    # systemctl mask firewalld

1.1.6. 验证永久 firewalld 配置

在某些情况下,例如在手动编辑 firewalld 配置文件后,管理员想验证更改是否正确。本节描述了如何验证 firewalld 服务的永久配置。

先决条件

  • firewalld 服务在运行。

步骤

  1. 验证 firewalld 服务的永久配置:

    # firewall-cmd --check-config
    success

    如果永久配置有效,该命令将返回 成功。在其他情况下,命令返回一个带有更多详情的错误,如下所示:

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