如果只是想临时关闭 CentOS 防火墙 firewalld,可以先执行 sudo systemctl stop firewalld,这条命令会立即生效;但服务器一旦重启,firewalld 往往还会自动恢复运行。若你想彻底关闭防火墙,还需要继续执行 sudo systemctl disable firewalld,并通过 systemctl is-enabled firewalld 确认返回结果为 disabled;至于是否已经完全关闭,建议再做一次检查:firewall-cmd --state 通常应报错,同时 iptables -L -n 中也不应再存在残留的拦截规则。

在 CentOS 7 及更高版本中,系统默认使用 firewalld 管理防火墙。关闭防火墙并不只是“停止一个服务”这么简单,还需要明确区分临时关闭、永久禁用,以及是否已经清空底层规则;否则系统重启后防火墙可能又会自动启动,或者虽然服务停止了,但残留规则依旧会影响网络通信和端口访问。
怎么临时停止 firewalld(重启后恢复)
这种方式适合调试环境、部署测试、排查网络问题、快速验证端口是否放通等短期场景。执行后会马上生效,但系统重启后服务通常会自动重新启动:
sudo systemctl stop firewalld—— 停止当前正在运行的 firewalld 服务进程sudo systemctl status firewalld—— 查看状态输出中是否显示inactive (dead)- 注意:
firewall-cmd --state报错或返回not running都属于正常情况
怎么永久禁用 firewalld(避免开机自启)
仅仅执行停止命令,并不等于真正永久关闭防火墙。要想禁止系统开机自动启动 firewalld,必须同时关闭自启动项,否则重启服务器后它还会再次运行:
sudo systemctl disable firewalld—— 关闭开机自启,不会删除原有配置文件sudo systemctl is-enabled firewalld—— 正常应返回disabled,而不是enabled或static- 常见问题:只执行了
stop,却忘记执行禁用,结果第二天发现 firewalld 又变成 running 状态 - 如果是多台服务器或集群环境,记得逐台检查,不要只处理其中一台
怎么确认 firewalld 真的关干净了
只看 systemctl status 还不够。即使 firewalld 服务已经停止,内核中的 netfilter 规则也可能还保留着旧策略,特别是之前配置过端口开放或 zone 区域规则时更要仔细核对:
sudo firewall-cmd --list-all—— 如果提示FirewallD is not running,说明服务确实已停止;如果还能返回规则列表,则表示 firewalld 并没有真正关闭sudo iptables -L -n | head -10—— 检查底层 iptables 链中是否仍存在REJECT或DROP规则(正常情况下 firewalld 停止后这些规则一般会被清空,但某些异常场景下可能残留)- 更稳妥的做法:在停止并禁用后,再执行一次
sudo systemctl daemon-reload,尽量避免 unit 文件缓存造成判断干扰
CentOS 6 怎么关(别用错命令)
如果把 CentOS 7 的 firewalld 命令直接用于 CentOS 6,systemctl 往往会直接报错,因为 CentOS 6 默认使用的是 iptables 服务,防火墙管理方式与新版本完全不同:
sudo service iptables stop—— 临时关闭 iptables 防火墙sudo chkconfig iptables off—— 永久关闭并取消开机自启sudo iptables -F—— 清空当前内存中的全部规则(不会直接修改配置文件)- 配置文件位于
/etc/sysconfig/iptables,建议在清空前先做好备份:sudo cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
还有一个最容易被忽略的问题:某些脚本、云平台组件或容器服务(例如 Docker)会主动向 iptables 写入规则。即使 firewalld 已经停止,这些规则依然可能继续拦截流量。所以在关闭防火墙后如果仍然无法连通,不要急着判断是系统故障,先执行 iptables -L -n 检查底层链路中是否还存在“幽灵规则”。
