firewall-cmd --reload是必须的,否则--permanent规则仅写入磁盘不生效;永久配置与运行时分离,需先--permanent写入再--reload加载到内存,且须确认zone绑定正确、服务启用并验证runtime实际生效。

firewall-cmd --reload 是必须的,否则永久规则不生效
很多人加了 --permanent 就以为规则立刻起作用,结果连不上服务。firewalld 的永久配置(Permanent)和运行时配置(RunTime)是分离的:你用 firewall-cmd --permanent --add-port=8080/tcp 只改了磁盘上的配置文件,没动当前内核里正在跑的规则。
必须执行 firewall-cmd --reload 才会把 Permanent 配置加载进 RunTime。漏掉这一步,firewall-cmd --list-ports 也看不到新端口,telnet 或 curl 测试必然失败。
- 临时加端口(重启失效):去掉
--permanent,直接firewall-cmd --add-port=8080/tcp - 永久加端口(推荐):先加
--permanent,再firewall-cmd --reload - 验证是否真生效:用
firewall-cmd --list-ports看输出里有没有目标端口,而不是只看命令返回 “success”
查端口前先确认 zone 和 interface 绑定关系
firewalld 默认 zone 是 public,但如果你手动绑定了网卡到别的 zone(比如 internal),而新规则却加在 public 上,那流量根本不会匹配到这条规则。
运行 firewall-cmd --get-default-zone 查默认 zone;再用 firewall-cmd --get-zone-of-interface=eth0(把 eth0 换成你实际网卡名)确认该接口归属哪个 zone。两者不一致时,规则要加到对应 zone 上,例如:firewall-cmd --zone=internal --add-port=22/tcp --permanent。
- 常见误区:只查
firewall-cmd --list-all,却没注意开头显示的是哪个 zone 的配置 - 接口未绑定 zone 时,走默认 zone;但一旦手动绑定,就以绑定为准
- 用
firewall-cmd --list-all-zones能一次性看到所有 zone 的端口和服务列表
测试连通性不能只靠 telnet,得结合 ss 和 tcpdump
telnet host port 返回 “Connected” 只说明 TCP 握手成功,不代表上层服务真的响应——比如 FTP 服务没启、nginx 配置错,telnet 仍可能通。反过来,telnet 失败也不一定是防火墙挡的,可能是服务根本没监听。
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
分步排查更可靠:
- 在服务器本地执行
ss -tlnp | grep :8080,确认服务进程确实在监听目标端口 - 从客户端用
telnet server_ip 8080测试基础连通性 - 如果失败,登录服务器抓包:
tcpdump -i any port 8080 -nn,看是否有 SYN 包进来、有没有 SYN-ACK 发出去 - 若只有 SYN 进来没响应,大概率是防火墙 drop;若压根没 SYN,问题出在网络路径或客户端
FTP/Telnet 这类多端口协议要用 service 而不是裸端口
FTP 主动模式用 21 控制 + 随机高端口传数据,Telnet 虽然只用 23,但 firewalld 内置 ftp 和 telnet service 已预定义了连接跟踪和辅助模块(如 nf_conntrack_ftp),裸开 21/tcp 很可能无法传文件。
正确做法是启用 service 规则:
- 开 FTP:
firewall-cmd --permanent --add-service=ftp,再firewall-cmd --reload - 开 Telnet:
firewall-cmd --permanent --add-service=telnet - 验证:
firewall-cmd --list-services应包含ftp和telnet - 注意:CentOS 7 默认
ftpservice 依赖被动模式,若用主动模式,还需额外加载内核模块并放行数据端口范围
firewalld 的 service 不是简单端口映射,它背后关联着 conntrack helper 和协议状态机,跳过 service 直接开端口,对 FTP 这类协议基本等于没开。

















