Linux系统中端口的开放、关闭与查看
使用 ufw
来开放端口,并使用 ss
和 lsof
来检查端口状态和占用情况。
一. 开放端口(使用 ufw)
ufw
是 Ubuntu 上最常用的防火墙管理工具,简单易用。
1.1 开放端口命令
sudo ufw allow 8080/tcp
解释:
sudo
:以管理员权限运行命令。ufw allow
:允许某个端口或服务通过防火墙。8080/tcp
:允许 TCP 协议的 8080 端口。
输出示例:
Rule added
Rule added (v6)
Rule added
:表示 IPv4 的规则已添加。Rule added (v6)
:表示 IPv6 的规则已添加。
1.2 验证端口是否开放
sudo ufw status
输出示例:
Status: active
To Action From
-- ------ ----
8080/tcp ALLOW Anywhere
8080/tcp (v6) ALLOW Anywhere (v6)
8080/tcp ALLOW Anywhere
:表示 8080 端口已开放,允许所有来源访问。8080/tcp (v6) ALLOW Anywhere (v6)
:表示 IPv6 的 8080 端口也已开放。
1.3 查看端口是否已经开放(使用 ss)
ss
是一个强大的工具,用于查看系统的网络连接和端口状态。
命令:
sudo ss -tuln | grep 8080
解释:
ss
:查看网络连接和端口状态。-t
:显示 TCP 端口。-u
:显示 UDP 端口。-l
:仅显示监听中的端口。-n
:以数字形式显示端口和 IP 地址(不解析域名和服务名称)。grep 8080
:过滤出与 8080 端口相关的行。
输出示例:
LISTEN 0 128 0.0.0.0:8080 0.0.0.0:*
LISTEN
:表示端口正在监听。0.0.0.0:8080
:表示 8080 端口对所有 IP 地址开放。- 如果没有输出,说明端口没有开放或没有程序监听该端口。
二、端口占用及开放状态查询
2.1 查看端口是否被占用(使用 lsof)
lsof
可以查看哪个进程正在使用某个端口。
命令:
sudo lsof -i :8080
解释:
lsof
:列出打开的文件(包括网络端口)。-i :8080
:仅显示与 8080 端口相关的信息。
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python3 1234 user 3u IPv4 12345 0t0 TCP *:8080 (LISTEN)
COMMAND
:使用该端口的进程名称(例如python3
)。PID
:进程 ID(例如1234
)。USER
:运行该进程的用户(例如user
)。NAME
:端口状态(例如*:8080 (LISTEN)
表示 8080 端口正在监听)。
如果没有输出,说明端口没有被占用。
三、关闭端口
使用 ufw
解除端口占用并关闭端口开放的操作非常简单。以下是详细步骤:
3.1 查看当前开放的端口
首先,检查当前开放的端口,确认需要关闭的端口。
命令:
sudo ufw status
输出示例:
Status: active
To Action From
-- ------ ----
8080/tcp ALLOW Anywhere
8080/tcp (v6) ALLOW Anywhere (v6)
- 这里显示
8080/tcp
端口已开放。
3.2 关闭端口开放
使用 ufw
关闭指定端口的访问规则。
命令:
sudo ufw delete allow 8080/tcp
输出示例:
Rule deleted
Rule deleted (v6)
Rule deleted
:表示 IPv4 的规则已删除。Rule deleted (v6)
:表示 IPv6 的规则已删除。
验证:
再次运行 sudo ufw status
,确认端口规则已删除:
sudo ufw status
- 如果输出中不再显示
8080/tcp
,说明端口已关闭。
3.3 解除端口占用
如果端口被某个程序占用,需要停止该程序以释放端口。
查找占用端口的程序
使用 lsof
或 ss
查找占用端口的程序。
(1) 使用 lsof
:
sudo lsof -i :8080
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python3 1234 user 3u IPv4 12345 0t0 TCP *:8080 (LISTEN)
COMMAND
:占用端口的程序名称(例如python3
)。PID
:进程 ID(例如1234
)。
(2) 使用 ss
:
sudo ss -tuln | grep 8080
输出示例:
LISTEN 0 128 0.0.0.0:8080 0.0.0.0:*
- 如果输出为空,说明端口未被占用。
3.4 停止占用端口的程序
根据 lsof
或 ss
的输出,找到占用端口的程序并停止它。
(1) 通过 PID 停止程序:
sudo kill -9 <PID>
- 例如,停止 PID 为
1234
的程序:sudo kill -9 1234
(2) 通过服务名称停止程序:
如果程序是通过服务运行的(如 Nginx、Apache),可以使用 systemctl
停止服务。
例如,停止 Nginx:
sudo systemctl stop nginx
3.5 验证端口是否关闭
检查端口是否仍开放:
sudo ufw status
- 确保输出中不再显示
8080/tcp
。
检查端口是否仍被占用:
sudo ss -tuln | grep 8080
- 如果输出为空,说明端口已关闭且未被占用。