端口连不上,不等于“防火墙没关”。先确定服务是否监听、监听在哪个地址、请求经过哪些网络规则,最后才决定要不要改规则或停止进程。以下以 Linux 上的 TCP 9090 为例;UDP 要单独查询。

先查监听地址与占用进程

ss -ltnp 'sport = :9090'

其中 -l 看监听、-t 限定 TCP、-n 显示数字地址端口、-p 请求进程信息。进程详情是否可见取决于权限;没有结果时,还要确认服务所在的主机、容器和网络命名空间。ss 手册

读取结果时,至少分清:

  • 没有监听:先查服务启动状态及日志,放行规则不能启动服务。
  • 只有 127.0.0.1:9090:只接受本机 IPv4 回环访问,外部访问需要核对应用绑定配置。
  • 监听在某个内网地址:客户端必须能路由到该地址。
  • 0.0.0.0:9090 是 IPv4 通配监听,不表示云侧、主机防火墙或应用认证均已放行;IPv6 监听还涉及系统与应用配置。

旧环境也常用 netstat -tlnp、lsof -nP -iTCP:9090 -sTCP:LISTEN。不要只用 grep 9090 判断端口:它可能匹配地址或别的文本。

firewalld 要查实际 zone,而不只是默认 zone

在使用 firewalld 的主机上,先只读检查:

firewall-cmd --state
firewall-cmd --get-active-zones
firewall-cmd --zone=public --list-all
firewall-cmd --permanent --zone=public --list-all

这里的 public 只是示例,要换成流量对应的 zone。单看 --list-ports 不够,服务定义、来源、接口及其他策略也可能影响访问。还要检查云安全组、上游 ACL、路由与容器端口映射。

确认确需开放、目标 zone 正确并有变更授权后,可以只增加所需端口,而不是停掉整个防火墙:

# 示例:修改运行时规则,立即影响访问
firewall-cmd --zone=public --add-port=9090/tcp
# 确认效果后,再把同一规则写入永久配置
firewall-cmd --permanent --zone=public --add-port=9090/tcp

运行时与永久配置独立;单写永久配置不会立刻改变运行时。reload 会依据永久配置重建运行时,可能丢掉其他未持久化修改,不应当作无影响的刷新按钮。临时开放不再需要时,要对相应运行时及永久配置使用匹配的 --remove-port,并再次核对有效规则。firewall-cmd 手册

上述命令仅适用于 firewalld,不与 CentOS 6 的旧 iptables 服务保存命令混用。

占用端口不代表要强杀进程

先核对 PID 的程序路径、运行用户及所属服务,确认它是不是本应存在的进程。若由 systemd 或容器管理,应通过对应管理器安排正常停止;否则进程可能马上被拉起,绕过管理器也可能遗漏清理。

正常停止后再查询监听是否消失,再启动目标服务并检查日志和客户端访问。只有明确无法正常退出、了解数据与连接丢失风险时才讨论强制终止;不要把 kill -9 当作“释放端口”的第一步。

服务当前运行与开机自启也不是一回事,见服务启动与自启的区别。