凌峰创科服务平台

Linux服务器端口如何查看是否打开?

什么是“端口打开”?

在讨论命令之前,我们先明确一下“端口打开”通常指两种状态:

Linux服务器端口如何查看是否打开?-图1
(图片来源网络,侵删)
  1. 进程正在监听:某个应用程序正在等待网络连接进入指定的端口,这是最常见的情况。
  2. 防火墙允许流量:服务器的防火墙(如 iptables, firewalld, ufw)已经配置,允许数据包进出该端口。

一个端口可能被进程监听,但如果防火墙阻止了流量,外部设备仍然无法访问,排查问题时,需要检查这两个方面。


使用 ss 命令 (推荐)

ssnetstat 的现代替代品,速度更快,信息更全,是当前 Linux 系统上的首选工具。

查看所有监听的端口

使用 ss -tulnp 可以列出所有 TCP (-t) 和 UDP (-u) 协议、处于监听 (-l) 状态的端口,并显示占用该端口的进程 ID 和名称 (-n 以数字形式显示地址和端口,避免DNS解析延迟)。

# -t: TCP端口, -u: UDP端口, -l: 只显示监听端口, -n: 以数字显示, -p: 显示PID和程序名
sudo ss -tulnp

输出示例:

Linux服务器端口如何查看是否打开?-图2
(图片来源网络,侵删)
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      511          0.0.0.0:22                    0.0.0.0:*                   users:(("sshd",pid=951,fd=3)) 
LISTEN     0      4096         127.0.0.1:3306                  0.0.0.0:*                   users:(("mysqld",pid=1234,fd=30))
LISTEN     0      100      127.0.0.1:6379                  0.0.0.0:*                   users:(("redis-server",pid=5678,fd=6))
LISTEN     0      511             [::]:22                   [::]:*                   users:(("sshd",pid=951,fd=4))

如何解读:

  • Local Address:Port:本地监听的IP地址和端口号。
    • 0.0.0:22 表示监听所有IPv4地址的22端口(通常是SSH)。
    • 0.0.1:3306 表示只在本机(localhost)上监听3306端口(通常是MySQL)。
    • [::]:22 表示监听所有IPv6地址的22端口。
  • PID/Program name:占用该端口的进程ID和程序名。sshd 在监听22端口。

查看特定端口

如果你想快速查看某个特定端口(例如80端口)是否在监听:

# 查看TCP 80端口
sudo ss -tulpn | grep ':80'
# 查看UDP 53端口
sudo ss -ulnp | grep ':53'

使用 netstat 命令 (传统方法)

netstat 是一个经典工具,在很多旧系统或特定环境中仍在使用。ss 是它的升级版,功能更强大。

查看所有监听的端口

# -l: 只显示监听端口, -n: 以数字显示, -t: TCP, -u: UDP, -p: 显示PID和程序名
sudo netstat -tulnp

这个命令的输出和 ss 非常相似。

Linux服务器端口如何查看是否打开?-图3
(图片来源网络,侵删)

查看特定端口

# 查看TCP 80端口
sudo netstat -tulnp | grep ':80'

注意:在最新的 Linux 发行版中,netstat 可能只是一个指向 ssss 兼容性包装的软链接,但其核心功能已被 ss 取代。


使用 lsof 命令

lsof (list open files) 是一个功能极其强大的工具,它可以列出系统打开的所有文件,当然也包括网络套接字(端口)。

查看特定端口

这是 lsof 最常用的方式。-i 参数用于筛选网络相关的文件。

# 查看80端口
sudo lsof -i :80
# 查看所有监听的端口
sudo lsof -i -P -n | grep LISTEN

参数解释:

  • -i :80:显示所有与80端口相关的网络连接。
  • -i:显示所有网络连接。
  • -P:不将端口号转换为服务名(如80->http),直接显示数字。
  • -n:不将IP地址解析为主机名。
  • grep LISTEN:只显示处于监听状态的连接。

输出示例:

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx     1234  root    6u  IPv4   12345      0t0  TCP *:http (LISTEN)
nginx     1234  root    7u  IPv6   12346      0t0  TCP *:http (LISTEN)
mysqld    5678 mysql   31u  IPv4   12347      0t0  TCP localhost:mysql (LISTEN)

检查防火墙状态 (非常重要!)

即使端口被进程监听,如果防火墙阻止了流量,外部仍然无法访问,你需要检查并配置防火墙规则。

使用 firewalld (CentOS, RHEL, Fedora, openSUSE)

# 查看所有开放的端口和服务
sudo firewall-cmd --list-ports
sudo firewall-cmd --list-services
# 检查特定端口是否已开放
sudo firewall-cmd --query-port=80/tcp
# 输出为 yes/no
# 永久开放80端口
sudo firewall-cmd --permanent --add-port=80/tcp
# 重新加载防火墙使配置生效
sudo firewall-cmd --reload

使用 ufw (Uncomplicated Firewall, Ubuntu, Debian)

# 查看所有规则状态
sudo ufw status
# 查看详细规则(包含编号)
sudo ufw status verbose
# 检查80端口是否已开放
sudo ufw allow 80/tcp
# 如果规则已存在,会提示 "Rule already active"

使用 iptables (通用,几乎所有Linux发行版)

iptables 是底层的防火墙工具,firewalldufw 通常是在它之上的封装。

# 查看所有链的规则
sudo iptables -L -n -v
# 只查看INPUT链(入站规则)并显示端口
sudo iptables -L INPUT -n --line-numbers | grep :80
# -L: 列出规则
# -n: 以数字显示IP和端口
# -v: 显示详细信息,如数据包计数
# --line-numbers: 显示规则编号,方便删除

综合排查步骤

当你发现一个端口“打不开”时,可以按照以下步骤进行系统性排查:

  1. 检查服务是否启动

    # 例如检查nginx服务
    sudo systemctl status nginx
    # 如果没启动,则启动它
    sudo systemctl start nginx
  2. 检查端口是否被进程监听

    # 使用 ss 或 lsof 检查
    sudo ss -tulpn | grep ':80'
    # 或者
    sudo lsof -i :80
    • 如果没找到:说明服务根本没有启动或配置错误,请回到第1步。
    • 如果找到了:说明服务本身没问题,继续下一步。
  3. 检查防火墙是否放行

    • 如果是云服务器 (AWS, 阿里云, 腾讯云等):检查安全组规则,确认入站规则中是否开放了目标端口,这是最容易被忽略的一步!
    • 如果是本地物理机/虚拟机
      # 检查 firewalld
      sudo firewall-cmd --query-port=80/tcp
      # 检查 ufw
      sudo ufw status | grep 80
      # 检查 iptables
      sudo iptables -L INPUT -n | grep :80
    • 如果防火墙阻止了:添加相应的放行规则并重新加载防火墙。
  4. 检查监听地址

    • 使用 ss -tulpn 查看监听的IP地址,如果显示的是 0.0.1:80localhost:80,那么这个服务只对本机开放,外部IP无法访问,你需要修改服务的配置文件,将监听地址改为 0.0.0 或 以监听所有IP。

总结表格

命令 主要用途 优点 缺点
ss -tulnp 查看所有监听端口 速度快,信息全,现代首选 相对较新,旧系统可能没有
netstat -tulnp 查看所有监听端口 经典,兼容性好 速度较慢,逐渐被 ss 取代
lsof -i :port 查看特定端口占用 功能强大,信息详细 参数稍多,不如 ss 直观
firewall-cmd 管理 firewalld 防火墙 简单易用,适合RHEL系 仅限 firewalld 环境
ufw 管理 ufw 防火墙 非常简单,适合Ubuntu/Debian 仅限 ufw 环境
iptables 管理底层防火墙 功能最强大,通用性强 语法复杂,不易上手

对于日常使用,sslsof 是检查端口状态的最佳选择。永远不要忘记检查防火墙和云服务器的安全组规则!

分享:
扫描分享到社交APP
上一篇
下一篇