一、查询端口命令(最常用的 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,可单独配置定向放行规则。