SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-23

Linux端口是什么?用ss查看服务监听端口

了解端口如何将流量分发给正确服务,掌握TCP与UDP的区别,并用ss -lntp查看监听程序,区分0.0.0.0、::与127.0.0.1的本地和公网可访问范围。

端口的实际含义

端口是一个数字,用于让同一台服务器同时运行多个服务,并避免它们的网络流量混在一起。您的 VPS 只有一个 IP 地址,但可以同时运行 Web 服务器、SSH 服务器和数据库。数据包到达时,操作系统需要知道它属于哪个服务。端口号就是答案。Web 流量使用端口 443,SSH 使用端口 22。IP 地址将数据包送到服务器,端口则将数据包送到服务器上的正确程序。

端口是一个 16 位数字。16 位可表示 0 到 65535,其中 0 为保留值,因此端口在实际使用中为 1 到 65535。1024 以下的端口称为“知名端口”,打开这些端口需要 root 权限。因此,标准服务通常使用这些端口:SSH 使用 22,HTTP 使用 80,HTTPS 使用 443,DNS 使用 53。大于 1024 的端口通常可供普通程序使用。

端口分为 TCP 和 UDP 两类。同一个端口号在 TCP 和 UDP 中彼此独立。TCP 是大多数服务使用的基于连接的协议,例如 SSH、HTTP 和数据库。UDP 无连接,常用于 DNS 和某些 VPN。配置防火墙时,通常需要指定协议类型,例如 22/tcp

侦听表示程序正在等待端口上的连接

需要接收连接的程序会请求内核在某个端口上“侦听”。从此,该端口就在计算机上处于开放状态,程序会响应到达该端口的所有内容,但仍受防火墙规则限制。没有程序侦听的端口通常会拒绝连接。因此,任何安全检查首先都要确认:哪些程序正在侦听,以及它们侦听在哪些地址上。

用于回答这一问题的命令是 ss

sudo ss -tlnp

这些选项分别表示 TCP(t)、仅显示侦听套接字(l)、使用数字格式显示端口(n,因此会显示 22 而不是 ssh),以及显示所属进程(p)。典型结果如下:

State   Recv-Q  Local Address:Port   Process
LISTEN  0       0.0.0.0:22           sshd
LISTEN  0       127.0.0.1:5432       postgres
LISTEN  0       [::]:80              nginx

Process 列会告诉您每个端口由哪个程序占用。这样可以找出不应继续运行的程序。

Local Address 列是关键

仔细查看每个端口前的地址,因为它决定了谁可以访问该服务。你会经常遇到以下 3 种情况。

0.0.0.0:22 表示“监听此计算机拥有的所有 IPv4 地址”,包括公网地址。只要防火墙允许,该服务就可以通过 IPv4 从互联网访问。

[::]:80 对 IPv6 的含义相同:监听所有 IPv6 地址,包括公网地址。许多程序默认绑定到此地址。在 Linux 上,:: 套接字通常也会接受 IPv4 连接。

127.0.0.1:5432 表示“仅监听回环地址”。127.0.0.1 是计算机用于与自身通信的地址,无法从其他位置路由访问。绑定到此地址的服务只能由同一台服务器访问,永远无法从互联网访问,不论防火墙如何配置。上面的 Postgres 行从配置上看就是安全的。

实际规则由此可见:数据库、缓存或管理面板如果只供本机应用使用,应绑定到 127.0.0.1,而不是 0.0.0.0。如果服务从不监听公网地址,攻击者就没有可访问的入口。

监听不等于可访问

还有一个区别可以避免很多混淆。端口在计算机上开放,表示某个程序正在监听;端口可从外部访问,则表示防火墙允许访问。这是两回事。远程客户端要建立连接,二者必须同时成立。从客户端看,这两种故障的表现也不同:连接被拒绝,表示没有程序在监听;连接长时间无响应后超时,通常表示防火墙丢弃了数据包。这正是这两种 SSH 错误所说明的情况

因此,这里有两层控制。您可以通过设置每个服务的绑定地址,决定哪些地址上有服务监听。您还可以通过防火墙决定外部网络可以访问什么。运行规范的服务器会同时使用这两种控制:服务只绑定所需的地址,防火墙则拒绝所有未明确允许的访问。使用 ss 查看当前监听情况是第一步;决定防火墙允许哪些访问是第二步,详见UFW 防火墙入门

这里还有一个容易导致问题的细节。IPv4 和 IPv6 是相互独立的。如果防火墙只保护 IPv4,[::] 服务就可能通过 IPv6 暴露。这个具体陷阱另有一篇文章说明:IPv6 防火墙陷阱

FAQ

如何查看 Linux 服务器上开放了哪些端口?

TCP 使用 sudo ss -tlnp,UDP 使用 sudo ss -ulnp。该命令会列出所有监听套接字、端口、绑定的本地地址以及所属进程。查看 Local Address 列:0.0.0.0[::] 表示服务对网络开放,127.0.0.1 表示服务仅监听本机。

0.0.0.0 和 127.0.0.1 有什么区别?

0.0.0.0 表示“监听所有 IPv4 地址”,包括公网地址,因此服务可从网络访问。127.0.0.1 是回环地址,供本机与自身通信,无法从其他位置路由访问,因此绑定到该地址的服务只能在本地访问。将内部服务绑定到 127.0.0.1,确保它们不会暴露到网络。

服务要正常工作,是否必须在防火墙中开放端口?

只有必须从其他计算机访问的服务才需要。绑定到 127.0.0.1 的服务不需要防火墙规则,因为外部无法访问它。监听 0.0.0.0[::] 的服务需要防火墙规则来允许流量,并且在添加规则前应默认拒绝访问。

TCP 端口和 UDP 端口有什么区别?

TCP 基于连接,SSH、Web 服务器和数据库等大多数服务都使用 TCP。UDP 无连接,DNS 和某些 VPN 使用 UDP。TCP 和 UDP 中使用相同编号时,它们仍是不同的端口,因此 53/tcp53/udp 不同。编写防火墙规则时,需要指定协议,例如 22/tcp