7.13. 使用 RHEL 系统角色配置 firewalld


RHEL 系统角色是 Ansible 自动化工具的一组内容。此内容与 Ansible 自动化工具一起提供一个一致的配置接口,来一次远程管理多个系统。

rhel-system-roles 软件包包含 rhel-system-roles.firewall RHEL 系统角色。此角色是为了自动配置 firewalld 服务而引入的。

使用 firewall RHEL 系统角色,您可以配置许多不同的 firewalld 参数,例如:

  • 区域
  • 应允许数据包的服务
  • 授予、拒绝或丢弃访问端口的流量
  • 区域的端口或端口范围的转发

随着时间的推移,对防火墙配置的更新可能会积累到一定程度,从而导致意外的安全风险。使用 firewall RHEL 系统角色,您可以以一种自动的方式将 firewalld 设置重置为其默认状态。这样,您可以有效地删除任何无意的或不安全的防火墙规则,并简化其管理。

前提条件

流程

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Reset firewalld example
      hosts: managed-node-01.example.com
      tasks:
        - name: Reset firewalld
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.firewall
          vars:
            firewall:
              - previous: replaced
    Copy to Clipboard Toggle word wrap

    示例 playbook 中指定的设置包括如下:

    previous: replaced

    删除所有现有的用户定义的设置,并将 firewalld 设置重置为默认值。如果将 previous:replaced 参数与其他设置相结合,则 firewall 角色会在应用新设置前删除所有现有设置。

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.firewall/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不能防止错误的、但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

  • 在控制节点上运行这个命令,来远程检查受管节点上的所有防火墙配置是否被重置为其默认值:

    # ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-all-zones'
    Copy to Clipboard Toggle word wrap

您可以使用 firewall RHEL 系统角色远程配置将传入流量从一个本地端口转发到另一个本地端口。

例如,如果您有一个环境,其中多个服务在同一台机器上共存,且需要同样的默认端口,则可能会出现端口冲突。这些冲突可能会破坏服务并导致停机。使用 firewall RHEL 系统角色,您可以高效地将流量转发到替代端口,以确保您的服务可以同时运行,而无需修改其配置。

先决条件

流程

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Configure firewalld
      hosts: managed-node-01.example.com
      tasks:
        - name: Forward incoming traffic on port 8080 to 443
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.firewall
          vars:
            firewall:
              - forward_port: 8080/tcp;443;
                state: enabled
                runtime: true
                permanent: true
    Copy to Clipboard Toggle word wrap

    示例 playbook 中指定的设置包括如下:

    forward_port: 8080/tcp;443
    使用 TCP 协议进入到本地端口 8080 的流量被转发到端口 443。
    runtime: true

    启用运行时配置中的更改。默认值被设置为 true

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.firewall/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不能防止错误的、但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

  • 在控制节点上,运行以下命令来远程检查受管节点上的转发端口:

    # ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-forward-ports'
    managed-node-01.example.com | CHANGED | rc=0 >>
    port=8080:proto=tcp:toport=443:toaddr=
    Copy to Clipboard Toggle word wrap

作为系统管理员,您可以使用 firewall RHEL 系统角色在 enp1s0 接口上配置 dmz 区域,以允许到区域的 HTTPS 流量。这样,您可以让外部用户访问您的 web 服务器。

先决条件

流程

  1. 创建一个包含以下内容的 playbook 文件,如 ~/playbook.yml

    ---
    - name: Configure firewalld
      hosts: managed-node-01.example.com
      tasks:
        - name: Creating a DMZ with access to HTTPS port and masquerading for hosts in DMZ
          ansible.builtin.include_role:
            name: redhat.rhel_system_roles.firewall
          vars:
            firewall:
              - zone: dmz
                interface: enp1s0
                service: https
                state: enabled
                runtime: true
                permanent: true
    Copy to Clipboard Toggle word wrap

    有关 playbook 中使用的所有变量的详情,请查看控制节点上的 /usr/share/ansible/roles/rhel-system-roles.firewall/README.md 文件。

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml
    Copy to Clipboard Toggle word wrap

    请注意,这个命令只验证语法,不能防止错误的、但有效的配置。

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml
    Copy to Clipboard Toggle word wrap

验证

  • 在控制节点上,运行以下命令来远程检查有关受管节点上 dmz 区域的信息:

    # ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --zone=dmz --list-all'
    managed-node-01.example.com | CHANGED | rc=0 >>
    dmz (active)
      target: default
      icmp-block-inversion: no
      interfaces: enp1s0
      sources:
      services: https ssh
      ports:
      protocols:
      forward: no
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat