firewalld中移除服务的正确命令是--remove-service(小写、无横线),需指定区域且不加--permanent可实现秒级运行时下线,配合--list-services验证后,再按需决定是否持久化与重载。

Firewalld 没有叫 --Remove-Service 的接口,正确命令是 --remove-service(注意是小写、无横线)。它本身不“秒级”,但配合运行时操作可实现接近秒级的下线效果——关键在于**跳过 --permanent、不 reload、仅作用于当前运行时配置**。
以下是在突发高危 CVE(如 SSH 相关漏洞 CVE-2024-XXXXX 或 HTTP 服务栈漏洞)时,快速临时下线公共服务的操作链:
1. 确认服务名与当前生效区域
先查清目标服务是否已启用,以及它绑定在哪个区域:
-
firewall-cmd --get-active-zones→ 查出网卡绑定的活跃 zone(如public) -
firewall-cmd --zone=public --list-services→ 看ssh、http、https是否已在列表中 -
firewall-cmd --get-services | grep -i ssh→ 验证服务名是否为标准ssh(不是sshd)
2. 运行时立即移除服务(真正“秒级”生效)
不加 --permanent,只对当前内存规则生效,执行后立刻阻断该服务所有端口(含关联的辅助端口,如 ssh 的 22/tcp + 可能的 22/udp):
firewall-cmd --zone=public --remove-service=sshfirewall-cmd --zone=public --remove-service=httpfirewall-cmd --zone=public --remove-service=https
✅ 效果:命令返回 success 后,新连接立即被拒绝(已有连接不受影响,符合应急“止血不中断”的原则)。
3. 验证是否已切断
-
firewall-cmd --zone=public --list-services→ 确认目标服务名已消失 - 从外部用
telnet your-ip 22或curl -I http://your-ip测试,应超时或 Connection refused -
firewall-cmd --zone=public --list-all→ 查看 services 行是否为空
4. 后续动作:按需选择加固路径
- 若只是临时缓解(例如等热补丁),无需 reload,也别加 --permanent —— 重启 firewalld 会自动恢复原状
- 若确认要长期禁用,再补:
firewall-cmd --permanent --zone=public --remove-service=ssh+firewall-cmd --reload - 更安全做法:移除服务后,叠加富规则封源 IP 段:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="203.0.113.0/24" reject'
注意:这不是替代补丁的方案,而是漏洞公开后黄金一小时内最可控的“外科式隔离”。服务下线后,务必同步检查进程是否仍在监听(ss -tlnp | grep :22),避免应用层未停导致误判。











