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


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

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

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

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

要以自动化的方式在一个或多个系统上应用防火墙参数,请在 Ansible playbook 中使用 firewall 变量。playbook 是一个或多个以基于文本的 YAML 格式编写的 play 的列表,并如下所示:

---
- name: Enable web services in default zone
  hosts: managed-node-01.example.com
  tasks:
    - name: Enable http and https
      ansible.builtin.include_role:
        name: rhel-system-roles.firewall
      vars:
        firewall:
          - service:
              - http
              - https
            state: enabled

在控制节点上运行 firewall RHEL 系统角色后,它会立即将 firewalld 参数应用到受管节点,并使参数在重启后保留。

7.17.1. 使用 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: rhel-system-roles.firewall
          vars:
            firewall:
              - previous: replaced

    示例 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

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

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml

验证

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

    # ansible managed-node-01.example.com -m ansible.builtin.command -a 'firewall-cmd --list-all-zones'

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.firewall/README.md 文件
  • /usr/share/doc/rhel-system-roles/firewall/ 目录

7.17.2. 使用 firewall RHEL 系统角色,将 firewalld 中的传入流量从一个本地端口转发到不同的本地端口

您可以使用 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: rhel-system-roles.firewall
          vars:
            firewall:
              - forward_port: 8080/tcp;443;
                state: enabled
                runtime: true
                permanent: true

    示例 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

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

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml

验证

  • 在控制节点上,运行以下命令远程检查受管节点上的 forward-ports:

    # 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=

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.firewall/README.md 文件
  • /usr/share/doc/rhel-system-roles/firewall/ 目录

7.17.3. 使用 firewall RHEL 系统角色配置 firewalld DMZ 区域

作为系统管理员,您可以使用 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: rhel-system-roles.firewall
          vars:
            firewall:
              - zone: dmz
                interface: enp1s0
                service: https
                state: enabled
                runtime: true
                permanent: true

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

  2. 验证 playbook 语法:

    $ ansible-playbook --syntax-check ~/playbook.yml

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

  3. 运行 playbook:

    $ ansible-playbook ~/playbook.yml

验证

  • 在控制节点上,运行以下命令远程检查受管节点上 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:

其他资源

  • /usr/share/ansible/roles/rhel-system-roles.firewall/README.md 文件
  • /usr/share/doc/rhel-system-roles/firewall/ 目录
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.