要移除自定义服务需先删除对应xml文件并重载配置:检查服务是否存在(firewall-cmd --get-services),定位并删除/etc/firewalld/services/或/usr/lib/firewalld/services/下的服务文件,执行firewall-cmd --reload,再验证服务已消失且未被规则引用。

要移除不再需要的自定义服务模板,关键在于删除对应的服务定义文件,并重新加载 firewalld 配置。firewalld 不提供直接用 firewall-cmd 命令“卸载服务”的接口,所有服务(包括自定义的)都以 XML 文件形式存在,必须手动清理文件系统中的定义。
确认自定义服务是否已加载
先检查该服务是否被 firewalld 识别:
- 列出所有可用服务(含自定义的):
firewall-cmd --get-services - 若服务名(如
myapp.xml对应的服务名为myapp)出现在输出中,说明它已被 firewalld 加载 - 查看该服务的具体内容(可选):
firewall-cmd --info-service=myapp
定位并删除服务定义文件
自定义服务文件通常放在以下两个目录之一(优先检查 /etc/firewalld/services/,因为该路径优先级高于系统默认路径):
-
/etc/firewalld/services/myapp.xml(用户自定义,推荐存放位置) -
/usr/lib/firewalld/services/myapp.xml(系统自带或手动复制至此,权限为只读)
执行删除(以 myapp 为例):
sudo rm -f /etc/firewalld/services/myapp.xml- 如在
/usr/lib/下也存在,且你确定不需要保留,再删:sudo rm -f /usr/lib/firewalld/services/myapp.xml
重载配置并验证移除结果
删除文件后必须重载 firewalld 才能使变更生效:
-
sudo firewall-cmd --reload(动态重载,不中断连接) - 再次运行:
firewall-cmd --get-services,确认myapp已不在列表中 - 尝试查询信息:
firewall-cmd --info-service=myapp应返回错误提示 “service 'myapp' not found”
额外提醒:检查是否仍在规则中被引用
即使服务文件已删,若此前用 --add-service=myapp 永久开放过,该规则仍可能存在于 zone 配置中:
- 检查 public 区域是否还开着它:
firewall-cmd --permanent --zone=public --list-services | grep myapp - 如有,需手动移除:
sudo firewall-cmd --permanent --zone=public --remove-service=myapp - 最后别忘了再执行一次
firewall-cmd --reload











