Windows 怎么关掉对应的端口?一篇讲清楚端口关闭方法
在 Windows 里,很多人说的“关掉端口”,其实有几种不同意思:
- 停止占用这个端口的程序
- 在防火墙里封掉这个端口的入站或出站流量
- 关闭系统服务,让端口不再监听
- 路由器或安全软件里顺带限制端口访问
如果你的目标是:让某个端口不再对外开放,最常用、最稳妥的方法就是 防火墙封端口;如果是 端口被某个程序占着,就要先找到占用进程并停掉它。
下面我按“新手也能看懂”的方式,一步一步讲清楚。
一、先搞明白:你要关的是哪一种“端口”
在 Windows 里,端口通常分两类情况:
1. 端口正在被某个程序监听
比如:
- 80 端口被 IIS、Apache、Nginx 占用
- 3306 端口被 MySQL 占用
- 3389 端口被远程桌面占用
- 6379 端口被 Redis 占用
这种情况下,端口会“对外服务”。
2. 端口虽然存在,但被防火墙拦住
程序可能还在运行,但外面访问不进来,这就是“防火墙封端口”。
如果你只是想让外网访问不了,防火墙封端口最直接。
如果你想让端口彻底不再被占用,还得把对应程序或服务关掉。
二、最常用的方法:用 Windows 防火墙关掉端口
这是最适合普通用户的办法。
优点是:
- 操作安全
- 不容易误伤系统
- 可按端口精确封锁
- 重启后规则还在
方法 1:图形界面关闭端口
步骤 1:打开高级防火墙
- 按 Win + R
- 输入:
wf.msc - 回车
这会打开“高级安全 Windows Defender 防火墙”。
步骤 2:新建入站规则
如果你想禁止别人从外面访问你电脑的某个端口,一般创建 入站规则。
- 左侧点 入站规则
- 右侧点 新建规则
- 选择 端口
- 点 下一步
步骤 3:选择协议和端口
这里分两种:
- TCP
- UDP
如果不确定,先查清楚程序用的是哪个协议。
比如:
- HTTP / HTTPS:多为 TCP
- 游戏语音、DNS、某些实时通信:可能用 UDP
- 远程桌面:TCP 3389
输入端口号,例如:
804433306338980806379
如果是多个端口,可以用逗号分隔,例如:
80,443,8080
如果是端口范围,例如:
1000-2000
步骤 4:选择“阻止连接”
选择:
- 阻止连接
然后点下一步。
步骤 5:选择生效范围
一般直接全选:
- 域
- 专用
- 公用
除非你很清楚自己在做什么,否则建议都勾上。
步骤 6:命名规则
比如起名:
- 阻止 TCP 3389
- 阻止 3306 入站
- 禁止 8080 外部访问
最后点 完成。
方法 2:用命令行关闭端口,速度更快
如果你会一点命令行,推荐直接用 netsh,效率很高。
关闭入站端口示例
比如封掉 TCP 3306:
netsh advfirewall firewall add rule name="Block TCP 3306" dir=in action=block protocol=TCP localport=3306
封掉 TCP 3389:
netsh advfirewall firewall add rule name="Block TCP 3389" dir=in action=block protocol=TCP localport=3389
封掉 UDP 53:
netsh advfirewall firewall add rule name="Block UDP 53" dir=in action=block protocol=UDP localport=53
封掉多个端口:
netsh advfirewall firewall add rule name="Block TCP 80,443,8080" dir=in action=block protocol=TCP localport=80,443,8080
删除刚才添加的防火墙规则
如果你不想封了,可以删掉:
netsh advfirewall firewall delete rule name="Block TCP 3306"
三、如果端口被程序占用,要先找出是谁在用
有时候你封了防火墙,但本机软件还在监听这个端口。
如果你想让这个端口彻底“消失”,就必须先找到占用者。
方法 1:查看端口被谁占用
打开命令提示符或 PowerShell,输入:
netstat -ano | findstr :3306
这里以 3306 为例。
输出结果可能类似这样:
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 1234
最后那个 1234 是 PID,也就是进程编号。
方法 2:根据 PID 找程序
继续输入:
tasklist | findstr 1234
如果查到是某个程序,比如:
mysqld.exenginx.exejava.exesvchost.exe
你就能知道是谁占着这个端口。
方法 3:结束进程
如果确定可以关掉,输入:
taskkill /PID 1234 /F
注意:
1234换成你的 PID/F表示强制结束
四、如果是系统服务占用端口,要停服务
有些端口不是普通程序占的,而是 Windows 服务占的。
这时候要到服务里关。
比如:
- 3389:远程桌面
- 135、445:系统共享相关服务
- 80:IIS
- 3306:MySQL 服务
- 6379:Redis 服务
方法 1:打开服务管理器
- 按 Win + R
- 输入:
services.msc - 回车
找到对应服务,比如:
SQL ServerWorld Wide Web Publishing ServiceRemote Desktop Services
右键点:
- 停止
如果不想开机启动,还可以:
- 右键 属性
- 把“启动类型”改成 禁用
方法 2:命令行停止服务
比如停止 MySQL 服务:
net stop mysql
或者根据服务名停止:
sc stop 服务名
如果要禁用开机启动:
sc config 服务名 start= disabled
注意:start= 后面有一个空格,这是 sc 命令的固定写法。
五、只想关闭“出站端口”怎么办?
有时候你不是要别人连进来,而是想阻止某个程序联网发数据。
这种情况下要建 出站规则。
图形界面操作
- 打开
wf.msc - 左侧点 出站规则
- 新建规则
- 选择 端口
- 填端口
- 选择 阻止连接
- 完成
命令行示例
netsh advfirewall firewall add rule name="Block Out TCP 4444" dir=out action=block protocol=TCP localport=4444
六、想确认端口有没有真正关掉,怎么检查
封完以后,最好验证一下。
方法 1:用 netstat 看监听状态
例如检查 3389:
netstat -ano | findstr :3389
如果没有输出,通常说明这个端口当前没有监听。
如果还有 LISTENING,说明程序还在占用。
方法 2:用 telnet 测试端口
前提是你电脑装了 telnet 功能。
测试本机或目标主机端口是否开放:
telnet 127.0.0.1 3389
如果连不上,通常说明端口不通。
不过这个方法不如 netstat 直接。
方法 3:用 PowerShell 测试
Test-NetConnection 127.0.0.1 -Port 3389
如果返回 TcpTestSucceeded : False,说明端口没通。
七、常见端口关闭场景
下面这些场景很常见,很多人会遇到:
1. 关掉 3389 远程桌面端口
适合:不想让别人远程连你电脑。
处理方式:
- 关闭远程桌面功能
- 防火墙封 3389
- 路由器别做 3389 端口映射
2. 关掉 3306 数据库端口
适合:本机 MySQL 不想对外暴露。
处理方式:
- MySQL 配置只监听
127.0.0.1 - 防火墙封 3306
- 不要把 3306 映射到公网
3. 关掉 80 / 443 网站端口
适合:本机网站不再对外开放。
处理方式:
- 停掉 IIS / Nginx / Apache
- 删除端口映射
- 防火墙封端口
4. 关掉 445 文件共享端口
适合:减少局域网风险。
但要注意:
- 445 是 Windows 文件共享相关端口
- 乱关可能影响局域网共享、打印机共享、域环境连接
如果你不懂业务影响,不建议直接乱封系统核心端口。
八、哪些端口不要随便乱关
这点很重要。
有些端口关了之后,系统功能会出问题。
比如:
- 135、137、138、139、445:与 Windows 网络共享、远程管理有关
- 53:DNS 相关
- 67/68:DHCP 相关
- 80/443:网页访问相关
- 3389:远程桌面
如果你只是普通用户,建议只关自己明确知道用途的端口。
不要看到一个端口号就全部封掉,否则容易导致:
- 网络异常
- 打印机不可用
- 局域网共享失效
- 软件无法联网
- 远程桌面失效
九、最实用的做法:先找占用,再封防火墙
如果你是第一次处理,建议按这个顺序来:
第一步:查看端口占用
netstat -ano | findstr :端口号
第二步:找到程序
tasklist | findstr PID
第三步:判断是否要停服务或程序
- 能停程序就停程序
- 是系统服务就停服务
- 只是禁止外部访问,就加防火墙规则
第四步:用防火墙封掉端口
netsh advfirewall firewall add rule name="Block TCP 端口号" dir=in action=block protocol=TCP localport=端口号
十、注意事项
1. 不要把“关闭端口”和“结束进程”混为一谈
- 结束进程:程序停了
- 防火墙封端口:程序可能还在,但外部访问不了
2. 公网环境一定要谨慎
如果你的电脑开了端口映射,光关本机防火墙不一定够,还要检查:
- 路由器端口映射
- 光猫映射
- 云服务器安全组
- 远程访问软件设置
3. 封端口前先备份规则
如果你经常改防火墙,建议先导出规则,防止误操作后难恢复。
4. 系统核心端口别乱封
尤其是共享、网络、远程管理相关端口,封错了会引发更多问题。
十一、最简洁的总结
如果你想在 Windows 里关掉某个端口,最常见的办法是:
方式一:防火墙封端口
- 打开
wf.msc - 新建入站规则
- 选择端口
- 输入端口号
- 选择阻止连接
方式二:命令行快速封
netsh advfirewall firewall add rule name="Block TCP 3306" dir=in action=block protocol=TCP localport=3306
方式三:关闭占用端口的程序或服务
netstat -ano | findstr :3306
taskkill /PID 进程号 /F
如果是服务,再去 services.msc 里停止或禁用。
十二、可直接复制的常用命令
查端口占用
netstat -ano | findstr :3306
查 PID 对应程序
tasklist | findstr 1234
结束进程
taskkill /PID 1234 /F
封入站 TCP 3306
netsh advfirewall firewall add rule name="Block TCP 3306" dir=in action=block protocol=TCP localport=3306
封出站 TCP 3306
netsh advfirewall firewall add rule name="Block Out TCP 3306" dir=out action=block protocol=TCP localport=3306
删除规则
netsh advfirewall firewall delete rule name="Block TCP 3306"
如果你的目标是“关掉某个具体端口”,最稳的方式永远是:先查占用,再停服务,最后用防火墙封锁。这样既能保证端口不再开放,也不容易误伤系统。

还没有评论,来说两句吧...