在管理和维护基于 CentOS 的服务器时,了解如何查看当前系统上哪些 Web 端口正处于监听状态是一项至关重要的基本技能,无论是进行故障排查、安全审计,还是部署新的网络服务,快速准确地获取端口信息都能极大地提高工作效率,本文将系统性地介绍在 CentOS 系统中查看 Web 端口的几种常用且高效的方法,并辅以实例解析,帮助您全面掌握这一技能。
Web 服务通常依赖于 TCP/IP 协议栈,通过特定的端口号来提供访问,最常见的 Web 端口是用于 HTTP 协议的 80 端口和用于 HTTPS 协议的 443 端口,任何应用程序都可以配置为监听其他非标准端口,我们需要使用系统工具来探查这些端口的实时状态。
使用 netstat
命令
netstat
(Network Statistics)是一个经典且功能强大的网络工具,虽然在一些最新的 Linux 发行版中逐渐被 ss
替代,但它因其广泛的兼容性和直观的输出,至今仍被许多系统管理员频繁使用,要查看所有处于监听状态的 TCP 端口,并结合进程信息,可以使用以下组合参数:
sudo netstat -tlpn
让我们来解析这个命令的各个部分:
-t
:显示 TCP 协议的连接。-l
:仅显示处于监听状态的套接字。-p
:显示监听端口的进程 ID(PID)和程序名称。-n
:以数字形式显示地址和端口号,而不是尝试解析成服务名或主机名,这能显著提高执行速度。
执行该命令后,您会看到类似以下的输出:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1148/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1321/master
tcp6 0 0 :::80 :::* LISTEN 2845/nginx: master
tcp6 0 0 :::443 :::* LISTEN 2845/nginx: master
从上表中,我们可以清晰地看到 nginx
主进程(PID 为 2845)正在监听 80 和 443 这两个 Web 端口。::80
表示它监听在所有 IPv6 地址上,在通常的双栈网络配置下,这也等同于监听所有 IPv4 地址,如果您只想查看特定端口,可以结合 grep
命令进行过滤,例如查看 80 端口:
sudo netstat -tlpn | grep :80
使用 ss
命令
ss
(Socket Statistics)是 netstat
的现代替代品,它直接从内核空间获取信息,执行速度更快,尤其是在连接数量庞大的服务器上,其优势更为明显。ss
的参数与 netstat
非常相似,这使得熟悉 netstat
的用户可以轻松上手,要实现与上述 netstat
命令相同的功能,可以使用:
sudo ss -tlpn
其输出格式与 netstat
类似,但信息展示更为紧凑:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1148,fd=3))
LISTEN 0 100 127.0.0.1:25 0.0.0.0:* users:(("master",pid=1321,fd=13))
LISTEN 0 128 [::]:80 [::]:* users:(("nginx",pid=2845,fd=6))
LISTEN 0 128 [::]:443 [::]:* users:(("nginx",pid=2845,fd=7))
同样,您也可以使用 grep
来过滤结果:
sudo ss -tlpn | grep :443
对于 CentOS 7 及以后版本,推荐优先使用 ss
命令。
使用 lsof
命令
lsof
(List Open Files)是一个用途极其广泛的工具,它遵循“在 Linux 中,一切皆文件”的哲学,网络连接也被视为文件,lsof
也可以用来查看端口占用情况,要查看特定端口(80 端口)被哪个进程占用,可以直接执行:
sudo lsof -i :80
该命令的输出会非常直观地显示出所有与 80 端口相关的网络活动:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 2845 root 6u IPv4 25334 0t0 TCP *:http (LISTEN)
nginx 2845 root 7u IPv6 25335 0t0 TCP *:https (LISTEN)
这里的 -i
标志用于过滤网络文件,80
则指定了端口号。lsof
的优点在于它可以直接针对特定端口进行查询,无需再手动过滤大量输出,非常精准。
检查防火墙规则
仅仅确认服务在监听某个端口是不够的,如果服务器的防火墙(如 firewalld
)阻止了对该端口的访问,外部客户端依然无法连接,检查防火墙配置是排查 Web 服务不可达问题的关键一步,在 CentOS 7 及更高版本中,默认使用 firewalld
。
要查看当前活动区域(通常是 public
)开放的所有端口,可以运行:
sudo firewall-cmd --zone=public --list-ports
如果您的 Web 服务是作为标准服务添加的,查看开放的服务列表会更清晰:
sudo firewall-cmd --zone=public --list-services
如果输出中包含 http
和 https
,则表示防火墙已经允许了 80 和 443 端口的流量,如果没有,您需要使用以下命令临时添加:
sudo firewall-cmd --zone=public --add-service=http --add-service=https
确认无误后,再永久保存规则:
sudo firewall-cmd --runtime-to-permanent
命令小编总结与对比
为了方便您快速选择合适的工具,下表小编总结了上述几种方法的特点:
命令 | 主要用途 | 常用示例 | 特点 |
---|---|---|---|
netstat | 全面查看网络连接、路由表、接口统计 | netstat -tlpn | 经典、兼容性好,但性能稍逊 |
ss | 查看套接字统计信息 | ss -tlpn | 现代替代品,速度快,信息详细 |
lsof | 列出进程打开的文件,包括网络连接 | lsof -i :80 | 精准定位特定端口,功能强大 |
firewall-cmd | 管理防火墙规则 | firewall-cmd --list-services | 确认外部访问是否被允许,排查网络问题 |
相关问答FAQs
解答: 这是一个非常常见的问题,服务在本地监听只完成了工作的一半,外部无法访问通常有两个主要原因:1. 服务器防火墙:如上文所述,您需要检查 firewalld
或 iptables
是否放行了 80 端口的流量,请确保相应的服务(http
)或端口(80/tcp
)已添加到防火墙规则中,2. 云服务商安全组:如果您的 CentOS 服务器部署在云平台(如阿里云、腾讯云、AWS 等),这些平台还有一个虚拟的“安全组”或“网络 ACL”作为额外的防火墙层,您必须登录云服务商的控制台,在对应实例的安全组规则中,入方向添加一条允许 80 端口流量通过的规则。
解答: 这是因为查看其他用户进程的详细信息需要 root 权限,这两个命令在调用 -p
参数时,需要访问 /proc
文件系统中的敏感信息,当您以普通用户身份执行时,系统出于安全考虑,会隐藏这些信息,要查看完整的进程信息,请在命令前加上 sudo
,sudo netstat -tlpn
或 sudo lsof -i :80
,这样,您就能获得所有进程的完整 PID 和程序名了。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复