linux中firewalld通过xml定义服务别名(如myapp)实现端口8081/tcp放行,先创建/etc/firewalld/services/myapp.xml并重载,再用--add-service=myapp永久启用,支持rich rule按源ip精细化控制。

Linux 中用 firewalld 配置服务别名放行特定应用,本质是把一个自定义应用“注册为服务”,再通过 service 名称 而非端口号来管理规则。这种方式比直接开端口更规范、可复用,也便于批量部署和后期维护。
确认系统已启用 firewalld 并明确默认 zone
服务别名的规则始终绑定在某个 zone(如 public)上,所以先确认基础环境:
- 检查防火墙状态:
sudo systemctl status firewalld,未运行则执行sudo systemctl enable --now firewalld - 查看当前默认 zone:
sudo firewall-cmd --get-default-zone(常见为public) - 确认网卡归属:
sudo firewall-cmd --get-active-zones,避免规则加错区域
创建自定义 service 文件(关键步骤)
firewalld 不识别任意名字的服务,必须通过 XML 文件明确定义。以名为 myapp、监听 8081/tcp 的应用为例:
- 新建配置文件:
sudo vim /etc/firewalld/services/myapp.xml - 填入标准结构(注意缩进与标签闭合):
- 保存后重载配置使新 service 生效:
sudo firewall-cmd --reload - 验证是否识别:
sudo firewall-cmd --get-services | grep myapp(应输出myapp)
用 service 名启用放行并验证
定义完成后,即可像内置服务(如 http、ssh)一样操作:
- 永久放行该服务:
sudo firewall-cmd --permanent --add-service=myapp - 立即生效:
sudo firewall-cmd --reload - 检查结果:
sudo firewall-cmd --list-all,在services:行中应看到myapp - 进一步确认端口监听:
ss -tlnp | grep :8081,确保应用本身已在监听
按需增强安全性:限制访问来源
仅靠 service 名放行仍面向所有 IP。若只允许运维网段或特定主机访问,建议搭配 rich rule:
- 例如只允许
192.168.10.0/24访问 myapp:sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" service name="myapp" accept' - 注意:rich rule 中使用
service name="xxx"比写端口更准确,且自动适配其协议与端口 - 同样需
--reload生效,并可用--list-rich-rules查看











