firewall-cmd通过--list-services、--zone=xxx --list-services和--query-service=xxx等命令检查服务规则是否在指定zone中启用,而非检查服务进程状态;服务定义由XML文件描述,端口需单独验证。

要查看指定服务在 firewall-cmd 中的当前运行配置,关键不是查服务本身“是否在运行”,而是查该服务对应的防火墙规则是否已启用——即它是否被允许通过当前生效的 zone(区域)。
确认服务是否已在当前 zone 中启用
firewall-cmd 不直接显示“服务进程状态”,而是显示“服务规则是否被加载到某个 zone”。常用命令如下:
-
查看当前默认 zone 下启用了哪些服务:
firewall-cmd --list-services -
查看指定 zone(如 public)中启用的服务:
firewall-cmd --zone=public --list-services -
检查某服务(如 http)是否在当前 zone 中已启用:
firewall-cmd --query-service=http(返回 yes 或 no) -
检查某服务是否在指定 zone 中启用:
firewall-cmd --zone=internal --query-service=https
查看服务对应的实际端口和协议
每个预定义服务(如 ssh、mysql、ftp)都关联了固定的端口、协议及模块。要了解其底层配置,可查看服务文件内容或用命令解析:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
列出所有内置服务名:
firewall-cmd --get-services -
查看某服务(如 mysql)的定义细节(XML 格式):
cat /usr/lib/firewalld/services/mysql.xml
通常包含<port port="3306" protocol="tcp"/>等信息 -
快速确认该服务开放的端口是否已在当前 zone 的端口列表中:
先查服务端口(如 mysql → 3306/tcp),再执行:firewall-cmd --query-port=3306/tcp
区分临时规则与永久规则
服务规则分“运行时生效”和“永久保存”两种。以下命令只反映当前内存中的配置:
-
firewall-cmd --list-services—— 只显示当前生效的服务(含临时添加的) -
firewall-cmd --permanent --list-services—— 显示永久配置中启用的服务(需 reload 后才进入运行时) - 若两者结果不一致,说明你曾用
--add-service添加过临时规则,但没加--permanent保存
验证服务是否真正可达
即使服务规则已启用,仍需确认三层通路:
- 应用自身是否监听在
0.0.0.0:端口(而非仅127.0.0.1)?
→ 用ss -tlnp | grep :端口检查 - 云服务器是否配置了安全组放行该端口?
- 当前 zone 是否正确绑定到对外网卡?
→ 用firewall-cmd --get-active-zones和firewall-cmd --get-zone-of-interface=eth0确认

















