Ansible firewalld
模块
一、简介
- 功能:
firewalld
模块用于管理 Linux 系统上的firewalld
防火墙服务。firewalld
是一种动态管理防火墙的工具,它提供了对网络流量的更细粒度控制,支持区域(zones)和丰富的规则管理。 - 使用场景:适用于需要动态管理防火墙规则的场景,如开放或关闭特定服务端口、添加或移除防火墙规则、配置防火墙区域等。
二、基本用法
2.1 语法
使用 firewalld
模块的基本命令格式:
ansible <pattern> -m firewalld -a "zone=<zone> service=<service> state=<state> permanent=<yes/no>"
<pattern>
: 指定要操作的主机或主机组,例如all
、webservers
。-m firewalld
: 指定使用firewalld
模块。-a "..."
: 提供模块的参数,如区域、服务、状态、是否永久生效等。
2.2 示例
-
在特定区域开放 HTTP 服务端口:
ansible all -m firewalld -a "zone=public service=http state=enabled permanent=yes"
- 解释:在所有主机的
public
区域内永久启用 HTTP 服务(80端口)。
- 解释:在所有主机的
-
在特定区域关闭 SSH 服务端口:
ansible all -m firewalld -a "zone=public service=ssh state=disabled permanent=yes"
- 解释:在所有主机的
public
区域内永久禁用 SSH 服务(22端口)。
- 解释:在所有主机的
-
添加自定义端口规则:
ansible all -m firewalld -a "zone=public port=8080/tcp state=enabled permanent=yes"
- 解释:在所有主机的
public
区域内永久开放 TCP 8080 端口。
- 解释:在所有主机的
三、输出结果
执行 firewalld
模块后的典型输出示例:
localhost | CHANGED => {
"changed": true,
"msg": "Service 'http' added to zone 'public'"
}
CHANGED
:表示防火墙规则发生了变化。changed
: 为true
表示操作成功并且规则被修改。msg
:显示执行的具体操作和结果。
如果没有变化(例如规则已经存在或要删除的规则不存在),输出将类似于:
localhost | SUCCESS => {
"changed": false,
"msg": "Service 'http' is already in zone 'public'"
}
SUCCESS
: 表示操作成功。changed
: 为false
表示规则未被修改。
四、常见选项
4.1 zone
-
功能:指定防火墙区域(zone)。
firewalld
使用区域来定义不同网络接口的安全策略。常用的区域包括public
、private
、internal
、external
等。 -
用法:
ansible all -m firewalld -a "zone=public service=http state=enabled permanent=yes"
- 解释:在所有主机的
public
区域内启用 HTTP 服务。
- 解释:在所有主机的
4.2 service
-
功能:指定要管理的服务(service)。可以是预定义的服务名,如
http
、ssh
、dns
等。 -
用法:
ansible all -m firewalld -a "zone=public service=dns state=enabled permanent=yes"
- 解释:在所有主机的
public
区域内启用 DNS 服务。
- 解释:在所有主机的
4.3 port
-
功能:指定要管理的端口及协议(如
80/tcp
、443/tcp
)。 -
用法:
ansible all -m firewalld -a "zone=public port=443/tcp state=enabled permanent=yes"
- 解释:在所有主机的
public
区域内启用 TCP 443 端口(HTTPS)。
- 解释:在所有主机的
4.4 state
-
功能:指定规则的状态。可以是
enabled
(启用规则)或disabled
(禁用规则)。 -
用法:
ansible all -m firewalld -a "zone=public service=ftp state=disabled permanent=yes"
- 解释:在所有主机的
public
区域内禁用 FTP 服务。
- 解释:在所有主机的
4.5 permanent
-
功能:指定规则是否永久生效。如果设置为
yes
,规则将在系统重启后继续生效。默认为no
。 -
用法:
ansible all -m firewalld -a "zone=public port=3306/tcp state=enabled permanent=yes"
- 解释:在所有主机的
public
区域内永久启用 TCP 3306 端口(MySQL)。
- 解释:在所有主机的
五、注意事项
- 权限要求:更改防火墙规则需要具有适当的权限(通常是 root 权限),确保 Ansible 用户具备相应的 sudo 权限。
- 服务重启:当使用
permanent=yes
时,需要重载firewalld
服务才能使规则生效。可以使用firewalld
模块中的immediate=yes
选项自动重载防火墙配置。 - 区域管理:不同的网络接口可以分配到不同的区域,确保将规则应用到正确的区域,以免影响网络流量的控制。
- 服务或端口冲突:在添加或移除规则时,注意检查是否存在冲突的规则或端口,以免导致网络通信问题。