Ubuntu 系统中端口查询与开放指南

一、查询端口命令(最常用的 4 条)

1. 查看所有监听的 TCP/UDP 端口(推荐)

|----------------------------------------------------------------|
| bash # 简洁版,只看监听状态 ss -tuln # 带进程信息(知道哪个程序占用了端口) sudo ss -tulnp |

  • -t:TCP 端口
  • -u:UDP 端口
  • -l:只显示正在监听的端口
  • -n:不解析域名 / 服务名,直接显示端口号
  • -p:显示占用端口的进程 PID 和名称

2. 查看特定端口是否被占用

|----------------------------------------------------------------------------|
| bash # 比如查看 8008 端口 sudo lsof -i:8008 # 或 sudo netstat -tulpn | grep 8008 |

3. 查看所有网络连接(含已建立的连接)

|-------------------------|
| bash sudo netstat -antp |

4. 查看防火墙放行的端口

|----------------------|
| bash sudo ufw status |

5. 一键罗列服务器所有已开放端口(全新实用命令)

|-------------------------------------------------------------------------------------------------------------------------------------------------------------|
| bash # 一键查看本机所有已监听、对外开放的端口(最全面) sudo ss -tulpn | grep LISTEN # 极简一键命令:只输出所有开放端口号,干净无冗余 sudo ss -tuln | awk '{print $5}' | cut -d: -f2 | sort -n | uniq |

  • 命令作用 :自动罗列当前服务器 所有正在开放、监听运行 的端口
  • 适用场景:快速排查端口是否开启、是否监听成功、是否存在端口占用冲突
  • 结果说明:有输出=端口正常开放监听;无输出=端口未启动/未开放

|----------------------|
| bash sudo ufw status |

二、开放端口命令(ufw 防火墙)

Ubuntu 默认用 ufw 防火墙,以下是常用命令,包含单端口、连续端口、指定IP端口放行等场景。

1. 开放单个端口(TCP 最常用)

|---------------------------------------------------------------------------------------------------|
| bash # 放行 8008 端口的 TCP 流量 sudo ufw allow 8008/tcp # 放行 UDP 端口(如 5000/udp) sudo ufw allow 5000/udp |

2. 放行一段连续端口范围(新增常用端口段)

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| bash # 放行 8001-8010 全部连续 TCP 端口(项目常用端口段) sudo ufw allow 8001:8010/tcp # 通用模板:放行指定区间端口 sudo ufw allow 起始端口:结束端口/tcp # 放行 39000-40000 之间的所有 TCP 端口 sudo ufw allow 39000:40000/tcp |

3. 允许指定 IP 访问端口(更安全)

|--------------------------------------------------------------------------------------------------|
| bash # 只允许 192.168.0.100 访问 8008 端口 sudo ufw allow from 192.168.0.100 to any port 8008 proto tcp |

4. 关闭(删除)已开放的端口/端口段 & 一键清理重复端口

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| bash # 删除单个端口规则(8008/tcp) sudo ufw delete allow 8008/tcp # 删除连续端口段规则(8001-8010/tcp) sudo ufw delete allow 8001:8010/tcp # ===================== 一键清理重复端口规则(Ubuntu原生 100%可用)===================== # 原理:先清空所有8001-8010规则,再重新添加唯一纯净规则,彻底杜绝重复 sudo ufw delete allow 8001:8010/tcp sudo ufw delete allow in proto tcp from 0.0.0.0/0 to any port 8001:8010 # 重设【纯IPv4、无重复、无IPv6干扰】端口段(最稳定) sudo ufw allow in proto tcp from 0.0.0.0/0 to any port 8001:8010 sudo ufw reload # 查看最终干净的规则 sudo ufw status |

  • 常见问题说明 :UFW 官方没有 ufw clean 命令(该命令无效、会报错),所有重复规则只能通过「清空重设」方式清理
  • 重复规则危害:多次放行同一端口,会产生多条重复规则,不影响功能,但规则杂乱、排查困难
  • 纯净规则优势:重设后的8001-8010端口段,仅开放IPv4,状态显示清晰、无冗余规则、无IPv6迷惑展示

5. 重载 / 重启防火墙使规则生效

|----------------------|
| bash sudo ufw reload |

6. 查看防火墙状态

|------------------------------|
| bash sudo ufw status verbose |

三、额外补充(如果你用的是 iptables)

部分 Ubuntu 版本或自定义环境用 iptables,适配单端口、连续端口放行命令如下:

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| bash # 放行单个端口 8008/tcp sudo iptables -A INPUT -p tcp --dport 8008 -j ACCEPT # 放行连续端口 8001-8010/tcp sudo iptables -A INPUT -p tcp --dport 8001:8010 -j ACCEPT # 查看规则 sudo iptables -L -n # 保存规则(防止重启失效) sudo iptables-save > /etc/iptables/rules.v4 |

四、实用场景组合命令

场景 1:检查并放行 8008 端口

|--------------------------------------------------------------------------------------------------------------------------------------------|
| bash # 1. 检查端口是否被占用 sudo lsof -i:8008 # 2. 放行端口 sudo ufw allow 8008/tcp # 3. 重载规则 sudo ufw reload # 4. 验证是否生效 sudo ufw status | grep 8008 |

场景 2:批量放行 8001-8010 端口段(项目专用)

|--------------------------------------------------------------------------------------------------------------------------------------|
| bash # 1. 批量放行8001-8010所有TCP端口 sudo ufw allow 8001:8010/tcp # 2. 重载防火墙生效 sudo ufw reload # 3. 查看端口段放行状态 sudo ufw status | grep 8001 |

场景 3:快速排查端口访问问题

|------------------------------------------------------------------------------------------------------------------|
| bash # 1. 本地测试端口是否能连通(以8008为例) curl http://127.0.0.1:8008 # 2. 从外部机器测试端口连通性(本地电脑CMD执行) telnet 192.168.0.197 8008 |

五、关键注意事项

  • 所有端口放行默认适配TCP 协议(网页、项目接口通用),UDP端口需单独配置
  • 连续端口段 8001-8010 放行后,区间内所有端口均可外网访问,适合多模块项目部署
  • 修改防火墙规则后,必须执行 sudo ufw reload 才能生效
  • 宝塔防火墙与系统ufw防火墙需同步放行端口,避免双向拦截导致访问失败
  • 查询端口占用无结果,代表端口空闲,可正常启动项目服务
  • 【重要误区:端口段显示IPv6不等于未开启IPv4】
    Ubuntu UFW 放行连续端口段时,默认同时开放 IPv4 + IPv6,终端仅展示 IPv6 条目是系统显示逻辑,不代表 IPv4 未生效,IPv4 地址可正常访问端口;若需仅保留 IPv4 禁用 IPv6,可单独配置定向放行规则。
相关推荐
咖啡忍者6 小时前
【SAP BASIS】Section 5: SAP System Configuration
笔记
雯宝10 小时前
mnt_init 函数
linux
律宏阔16 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔16 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴16 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千16 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei3716 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei3716 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei3716 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
judezh16 小时前
api 容器一直 unhealthy?我把一个 Agent 运行时的健康检查逐条拆了,查出四个问题
运维·docker