在 Linux 系统中,无论是华为欧拉、CentOS、Ubuntu 还是其他发行版,查询端口是否开放都是排查网络问题和确认服务是否正常运行的重要步骤
本文将介绍如何从本机和外部两个角度来检查端口状态,使用的工具包括
ss
、netstat
、lsof
、firewall-cmd
、telnet
、nc
等
一、本机内部检查端口监听状态
在本机上查询端口是否处于监听状态,可以使用以下几种工具:
1. 使用 ss
命令
ss
是现代 Linux 系统推荐的工具,功能类似于旧版的 netstat
ss -tnlp | grep <端口号>
- 参数说明:
-t
:仅显示 TCP 连接-n
:直接使用数字显示端口,不进行域名解析-l
:仅显示处于监听状态的连接-p
:显示关联的进程信息
如果输出中出现指定的端口,说明该端口正在被某个进程监听
2. 使用 netstat
命令
在一些老版本的 Linux 系统上,可能会使用 netstat
:
netstat -tunlp | grep <端口号>
- 参数说明:
-t
:显示 TCP 连接-u
:显示 UDP 连接-n
:不解析 DNS,直接显示数字-l
:仅显示监听状态的端口-p
:显示进程信息
3. 使用 lsof
命令
lsof
命令可以列出打开文件的进程,网络端口也被视为文件:
lsof -i:<端口号>
如果有进程正在使用该端口,lsof
会显示相应的进程信息
二、检查防火墙配置
有时即使服务在本机监听,防火墙或安全组配置也会阻挡外部访问。常用的防火墙工具包括 firewalld 和 iptables
1. 使用 firewalld
查看当前开放的端口:
firewall-cmd --list-ports
查看完整防火墙规则:
firewall-cmd --list-all
如果需要开放某个端口(例如 8080)并永久生效,可以执行:
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
2. SELinux 配置
部分系统启用了 SELinux,它也可能会限制网络访问。可以使用以下命令查看 SELinux 中允许的端口:
semanage port -l
如果发现 SELinux 阻止了端口访问,可根据需要调整 SELinux 策略(但不建议直接禁用 SELinux)
三、从外部测试端口连通性
除了在本机查询外,还可以从外部测试端口是否对外开放:
1. 使用 telnet 或 nc(netcat)
使用 telnet:
telnet <服务器IP> <端口号>
或者使用 nc:
nc -vz <服务器IP> <端口号>
其中,-v
显示详细信息,-z
只进行端口探测而不传输数据。如果看到 Connected
或 succeeded
等信息,说明端口对外开放
2. 使用 nmap
nmap 是一款强大的网络扫描工具,可以用于检查端口状态:
nmap -p <端口号> <服务器IP>
扫描结果如果显示为 open
,则表示端口开放;若显示为 filtered
或 closed
,则可能被防火墙屏蔽或没有服务在监听
3. 使用浏览器(适用于 Web 服务)
如果该端口提供 HTTP 或 HTTPS 服务,直接在浏览器地址栏输入 http://<服务器IP>:<端口号>
即可查看页面是否能正常访问
四、排查思路总结
- 确认进程监听
通过ss
、netstat
或lsof
确认本机上是否有进程在监听目标端口 - 检查防火墙规则
查看防火墙(如 firewalld 或 iptables)的配置,确保目标端口已放行,同时检查 SELinux 策略是否限制访问 - 外部连通性测试
从另一台机器使用 telnet、nc 或 nmap 工具测试目标端口的连通性,确保网络和安全组配置没有问题
只要本机有进程监听端口,并且防火墙及其他安全配置正确,外部设备就能够访问该端口