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
设置重置为其默认状态。这样,您可以有效地删除任何非预期的或不安全的防火墙规则,并简化其管理。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 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
文件。
验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 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 系统角色,您可以高效地将流量转发到替代端口,以确保您的服务可以在不修改其配置的情况下同时运行。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 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
文件。
验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 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 服务器。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 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
文件。验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 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/
目录