(一)基本命令
-
查看防火墙状态
systemctl status firewalld
- 检查 firewalld 是否运行(
active (running)
表示运行中)。
- 检查 firewalld 是否运行(
-
停止防火墙
systemctl stop firewalld
- 立即停止防火墙(临时生效,重启后恢复原状态)。
-
启动防火墙
systemctl start firewalld
- 启动防火墙服务。
-
重启防火墙
systemctl restart firewalld
- 重启服务(适用于配置变更后重新加载)。
-
禁用开机启动
systemctl disable firewalld
- 禁止防火墙随系统启动(需配合
stop
命令完全关闭)。
- 禁止防火墙随系统启动(需配合
-
启用开机启动
systemctl enable firewalld
- 设置防火墙随系统自动启动。
(二)添加端口
-
开放常规端口(如 80/tcp)
firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --reload
--permanent
:永久生效(需搭配--reload
立即生效)。--zone=public
:指定规则作用域(公共区域)。
-
Docker 相关规则
- 允许 Docker 接口通信:
将firewall-cmd --permanent --zone=trusted --change-interface=docker0
docker0
接口加入trusted
区域(信任容器流量)。 - 允许特定 IP 访问容器端口(如 3306):
允许 IPfirewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address=192.168.29.133 port protocol=tcp port=3306 accept"
192.168.29.133
访问主机的 3306 端口(常用于容器端口映射)。
- 允许 Docker 接口通信:
(三)重新载入配置
firewall-cmd --reload
- 重新加载防火墙规则(不中断现有连接,优先于
restart
)。
(四)查看已开放端口
firewall-cmd --list-port
- 列出当前所有开放的端口(仅显示端口号,如
80/tcp
)。
(五)删除端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
firewall-cmd --reload
- 移除已开放的 80 端口,需
--reload
生效。
关键说明
-
--permanent
参数:- 若未加此参数,规则重启后失效。
- 修改永久规则后必须执行
--reload
。
-
Firewalld 区域(Zone):
public
是默认区域,适用于对外服务。trusted
区域允许所有流量(常用于容器网络)。
-
Docker 兼容性:
- 若直接操作 iptables 可能导致冲突,建议通过 firewalld 管理容器端口。
-
端口与富规则(Rich Rules):
- 简单端口控制用
--add-port
,复杂条件(如 IP、协议)用--add-rich-rule
。
- 简单端口控制用