Red Hat Training

A Red Hat training course is available for RHEL 8

40.15. 配置防火墙锁定

如果本地应用或服务以 root 身份运行(如 libvirt),则可以更改防火墙配置。使用这个特性,管理员可以锁定防火墙配置,从而达到没有应用程序或只有添加到锁定白名单中的应用程序可以请求防火墙更改的目的。锁定设置默认会被禁用。如果启用,用户就可以确定,防火墙没有被本地的应用程序或服务进行了不必要的配置更改。

40.15.1. 使用 CLI 配置锁定

您可以使用命令行启用或禁用锁定功能。

流程

  1. 查询是否启用了锁定:

    # firewall-cmd --query-lockdown
  2. 通过以下方法管理锁定配置:

    • 启用锁定:

      # firewall-cmd --lockdown-on
    • 禁用锁定:

      # firewall-cmd --lockdown-off

40.15.2. 锁定 allowlist 配置文件概述

默认允许列表配置文件包含 NetworkManager 上下文和 libvirt 的默认上下文。用户 ID 0 也位于列表中。

allowlist 配置文件存储在 /etc/firewalld/ 目录中。

<?xml version="1.0" encoding="utf-8"?>
	<whitelist>
		<command name="/usr/bin/python3 -s /usr/bin/firewall-config"/>
	  <selinux context="system_u:system_r:NetworkManager_t:s0"/>
	  <selinux context="system_u:system_r:virtd_t:s0-s0:c0.c1023"/>
	  <user id="0"/>
	</whitelist>

以下是一个允许列表配置文件的示例,它为名为 user ID 为 815 的用户允许 firewall-cmd 工具的所有命令:

<?xml version="1.0" encoding="utf-8"?>
	<whitelist>
	  <command name="/usr/libexec/platform-python -s /bin/firewall-cmd*"/>
	  <selinux context="system_u:system_r:NetworkManager_t:s0"/>
	  <user id="815"/>
	  <user name="user"/>
	</whitelist>

此示例展示了 user id user name ,但只需要其中一个选项。Python 是程序解释器,它位于命令行的前面。

在 Red Hat Enterprise Linux 中,所有工具都放在 /usr/bin/ 目录中,/bin/ 目录被符号链接到 /usr/bin/ 目录。换句话说,虽然以 root 身份输入时 firewall-cmd 的路径可能解析为 /bin/firewall-cmd,但现在可以使用/usr/bin/firewall-cmd。所有新脚本都应该使用新位置。但请注意,如果以 root 身份运行的脚本被写为使用 /bin/firewall-cmd 路径,那么除了必须添加到非 root 用户传统使用的 /usr/bin/firewall-cmd 外,该命令还必须添加到允许列表中。

命令的 name 属性末尾的 * 表示所有以这个字符串开头的命令都匹配。如果没有 *,则包括参数的绝对命令必须匹配。