7.17. 使用 RHEL 系统角色配置 firewalld
您可以使用 firewall
RHEL 系统角色一次在多个客户端上配置 firewalld
服务的设置。这个解决方案:
- 提供具有有效输入设置的接口。
-
将所有预期的
firewalld
参数保存在一个地方。
在控制节点上运行 firewall
角色后,RHEL 系统角色立即将 firewalld
参数应用到受管节点,并使其在重启后持久保留。
7.17.1. firewall
RHEL 系统角色简介
RHEL 系统角色是 Ansible 自动化工具的一组内容。此内容与 Ansible 自动化工具一起提供了一致的配置界面,来远程管理多个系统。
RHEL 系统角色中的 rhel-system-roles.firewall
角色是为自动化 firewalld
服务的配置而引入的。rhel-system-roles
软件包包含这个 RHEL 系统角色,以及参考文档。
要以自动化方式在一个或多个系统上应用 firewalld
参数,请在 playbook 中使用 firewall
RHEL 系统角色变量。playbook 是一个或多个以基于文本的 YAML 格式编写的 play 的列表。
您可以使用清单文件来定义您希望 Ansible 来配置的一组系统。
使用 firewall
角色,您可以配置许多不同的 firewalld
参数,例如:
- 区。
- 应允许哪些数据包的服务。
- 授权、拒绝或丢弃访问端口的流量。
- 区的端口或端口范围的转发。
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md
文件 -
/usr/share/doc/rhel-system-roles/firewall/
目录 - 使用 playbook
- 如何构建清单
7.17.2. 使用 firewall
RHEL 系统角色重置 firewalld
设置
使用 firewall
RHEL 系统角色,您可以将 firewalld
设置重置为其默认状态。如果您将 previous:replaced
参数添加到变量列表中,RHEL 系统角色会删除所有现有用户定义的设置,并将 firewalld
重置为默认值。如果将 previous:replaced
参数与其他设置相结合,则 firewall
角色会在应用新设置前删除所有现有设置。
在 Ansible 控制节点上执行此步骤。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 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 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
在受管节点上以
root
用户身份运行这个命令,以检查所有区域:# firewall-cmd --list-all-zones
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md
文件 -
/usr/share/doc/rhel-system-roles/firewall/
目录
7.17.3. 使用 firewall
RHEL 系统角色,将 firewalld
中的传入流量从一个本地端口转发到不同的本地端口
使用 firewall
角色,您可以远程配置 firewalld
参数,使其对多个受管主机有效。
在 Ansible 控制节点上执行此步骤。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 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 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
在受管主机上显示
firewalld
设置:# firewall-cmd --list-forward-ports
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md
文件 -
/usr/share/doc/rhel-system-roles/firewall/
目录
7.17.4. 使用 firewall
RHEL 系统角色管理 firewalld
中的端口
您可以使用 firewall
RHEL 系统角色为传入的流量在本地防火墙中打开或关闭端口,并使新配置在重启后保持不变。例如,您可以将默认区配置为允许 HTTPS 服务的传入流量。
在 Ansible 控制节点上执行此步骤。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:--- - name: Configure firewalld hosts: managed-node-01.example.com tasks: - name: Allow incoming HTTPS traffic to the local host ansible.builtin.include_role: name: rhel-system-roles.firewall vars: firewall: - port: 443/tcp service: http state: enabled runtime: true permanent: true
permanent: true
选项可使新设置在重启后保持不变。验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
在受管节点上,验证与
HTTPS
服务关联的443/tcp
端口是否已打开:# firewall-cmd --list-ports 443/tcp
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.firewall/README.md
文件 -
/usr/share/doc/rhel-system-roles/firewall/
目录
7.17.5. 使用 firewall
RHEL 系统角色配置 firewalld
DMZ 区域
作为系统管理员,您可以使用 firewall
RHEL 系统角色在 enp1s0 接口上配置一个 dmz
区域,以允许 HTTPS
流量到达区域。这样,您可以让外部用户访问您的 web 服务器。
在 Ansible 控制节点上执行此步骤。
前提条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 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 语法:
$ ansible-playbook --syntax-check ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
在受管节点上,查看关于
dmz
区的详细信息:# firewall-cmd --zone=dmz --list-all 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/
目录