在管理和维护CentOS服务器的过程中,查询端口状态是一项基础且至关重要的技能,无论是为了部署新服务、排查网络故障,还是进行安全审计,准确了解哪些端口处于开放、监听或关闭状态,都是保障系统稳定与安全的前提,本文将系统性地介绍在CentOS系统中查询端口开放的多种方法,涵盖从内置命令到专业工具,并结合现代防火墙管理机制,提供一个全面而实用的操作指南。

使用 firewalld 管理和查询端口
对于CentOS 7及其后续版本,firewalld已成为默认的动态防火墙管理工具,它取代了传统的iptables服务,提供了更为灵活和强大的区域管理概念,查询由firewalld管理的端口是现代CentOS环境下的首选方法。
检查防火墙状态
在进行任何查询之前,首先应确认firewalld服务是否正在运行,可以使用以下命令进行检查:
systemctl status firewalld
如果服务处于active (running)状态,则可以继续使用firewall-cmd工具进行查询。
查询已开放的端口
firewall-cmd提供了丰富的选项来查询防火墙规则。
查询所有开放的端口:
此命令会列出当前区域(默认为public)中所有允许通过的TCP和UDP端口。firewall-cmd --list-ports
输出示例可能为:
80/tcp 443/tcp 3306/tcp。查询所有开放的规则(推荐):
为了获得更全面的信息,包括端口、服务、富规则等,建议使用--list-all选项,这能让你对防火墙的配置有一个整体的了解。firewall-cmd --list-all
会包含当前区域、目标、默认服务、已开放的端口、协议、转发端口和富规则等详细信息。
查询永久开放的端口:
firewall-cmd的配置分为运行时和永久两种,上述命令查询的是当前运行时的配置,要查看永久生效的配置,需要加上--permanent参数。firewall-cmd --permanent --list-ports
查询特定服务对应的端口
很多时候,我们是通过服务名称(如http, https, mysql)来管理防火墙规则的,而不是直接记忆端口号。firewalld内置了服务到端口的映射。

firewall-cmd --list-services
此命令会列出所有已开放的服务,如果http服务在列表中,则意味着TCP的80端口是开放的。
为了方便查阅,下表小编总结了常用的firewall-cmd查询命令:
| 功能描述 | 命令 |
|---|---|
| 查看运行时开放的端口 | firewall-cmd --list-ports |
| 查看永久开放的端口 | firewall-cmd --permanent --list-ports |
| 查看所有防火墙规则(推荐) | firewall-cmd --list-all |
| 查看运行时开放的服务 | firewall-cmd --list-services |
| 查看永久开放的服务 | firewall-cmd --permanent --list-services |
使用系统工具检查活动端口
firewalld定义了“允许”通过的规则,但一个端口是否真正“活动”,还需要看是否有应用程序在该端口上进行监听,我们需要使用ss或netstat这样的网络工具。
使用 ss 命令(推荐)
ss是netstat的现代替代品,它执行速度更快,输出信息也更简洁,在CentOS 7及以后版本中,ss是预装的。
要查看所有正在监听的TCP和UDP端口,可以使用以下组合参数:
ss -tuln
-t:显示TCP套接字。-u:显示UDP套接字。-l:仅显示监听状态的套接字。-n:以数字形式显示端口号,不解析服务名,速度更快。
输出结果中的Local Address:Port列会清晰地显示所有正在监听的端口及其绑定的IP地址(如0.0.0:22表示监听在所有网卡的22端口)。
使用 netstat 命令(传统)
netstat是一个非常经典的工具,在许多旧的系统和文档中广泛使用,虽然在较新的系统中被ss取代,但它依然可用(可能需要先安装net-tools包:yum install net-tools)。
其用法与ss类似:
netstat -tuln
参数含义与ss基本相同,输出格式也相似,但ss在处理大量连接时性能更优。
使用 nmap 进行端口扫描
nmap(Network Mapper)是一款功能强大的开源网络探测和安全审核工具,从外部视角扫描服务器端口,是验证防火墙规则是否按预期生效的最直接方法。

确保nmap已安装:
yum install nmap -y
可以从另一台机器上对目标CentOS服务器进行扫描,扫描服务器的常用端口:
nmap -sT <目标服务器IP>
-sT:指定进行TCP连接扫描。
nmap的输出会明确列出每个端口的状态:
open:端口开放,且有应用程序在监听。closed:端口可达,但没有应用程序在监听。filtered:端口无法被nmap确定是否开放,可能被防火墙或网络设备阻止。
结合firewalld的内部查询和nmap的外部扫描,可以形成完整的端口状态验证闭环。
综合排查思路
当遇到“服务无法访问”的问题时,一个系统的排查流程至关重要:
- 确认服务状态:在服务器上使用
ss -tuln | grep <端口号>确认目标服务是否正在运行并监听在正确的端口上。 - 检查防火墙规则:使用
firewall-cmd --list-all检查防火墙是否放行了该端口或对应的服务。 - 验证SELinux策略:CentOS的SELinux有时会限制服务的端口访问,可以使用
semanage port -l | grep <服务名>查看SELinux允许的端口,必要时使用semanage port -a -t <端口类型> -p tcp <端口号>添加新端口。 - 外部扫描验证:从外部网络使用
nmap扫描目标端口,确认从外部视角看,端口是否确实是open状态,如果nmap显示filtered,则问题很可能出在防火墙或云服务商的安全组上。
通过以上步骤,可以系统、高效地完成CentOS端口的开放查询与故障排查工作。
相关问答 (FAQs)
答:这是一个常见问题,原因通常是多方面的,请确认您是否同时添加了运行时规则和永久规则(使用--permanent),并使用firewall-cmd --reload重载了配置,检查服务器上是否有应用程序确实在该端口上监听(使用ss -tuln),CentOS的SELinux机制可能会阻止非标准端口,需要使用semanage命令进行配置,如果您的服务器部署在云平台(如阿里云、腾讯云、AWS),请务必检查云平台控制台中的“安全组”规则,确保安全组也放行了相应的端口和源IP。
答:这两者的查询维度和意义完全不同。firewall-cmd --list-ports查询的是防火墙的“访问策略”,它告诉你防火墙“允许”哪些端口的流量通过,但并不代表当前真的有流量或服务在使用这些端口,而ss -tuln查询的是操作系统内核的“实际状态”,它显示的是当前有哪些应用程序正在“监听”并准备接受连接的端口,一个端口可能处于“防火墙已允许,但无服务监听”的状态,也可能处于“服务正在监听,但防火墙未允许”的状态,只有当两者同时满足时,外部访问才能成功,结合使用这两个命令是进行端口问题排查的最佳实践。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复