ESC

开始输入,可搜索发票、服务、域名、工单,以及 更多...

搜索... Ctrl+K
Windows 服务器

Windows 防火墙开放端口与关闭端口教程(图形界面 + PowerShell)

7 个步骤 9 分钟阅读 4 次阅读 0
本文目录

在 Windows VPS 或独立服务器上部署网站、数据库、游戏服或自研程序后,外部访问不到,最常见的原因就是 Windows 防火墙没有开放端口。本文介绍如何在 Windows Server 2016/2019/2022 上用图形界面和 PowerShell(New-NetFirewallRule / Remove-NetFirewallRule)开放端口、关闭端口、限制来源 IP、允许 Ping,并检查端口监听和从外部测试连通性。

步骤 1:用图形界面开放 Windows 防火墙端口

通过远程桌面登录服务器,按 Win+R 输入下面的命令打开“高级安全 Windows Defender 防火墙”。左侧点击“入站规则” → 右侧“新建规则” → 选择“端口” → 选择 TCP 或 UDP 并填写“特定本地端口”(如 8080 或 80,443) → “允许连接” → 勾选域、专用、公用三个配置文件 → 填写一个好记的名称即可。

wf.msc
服务器出站流量默认是放行的,一般只需要添加“入站规则”。名称建议写清用途,例如“Allow TCP 8080 - API”,以后关闭端口时更容易找到。

步骤 2:用 PowerShell New-NetFirewallRule 开放端口

以管理员身份打开 PowerShell,一条命令就能完成端口开放,适合批量部署和写进脚本。-LocalPort 支持单个端口、逗号分隔的多个端口和端口范围,-Protocol 可选 TCP 或 UDP。

# Allow inbound TCP 8080 (all profiles)
New-NetFirewallRule -DisplayName "Allow TCP 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow -Profile Any

# Several ports / a range, and UDP
New-NetFirewallRule -DisplayName "Allow Web 80,443" -Direction Inbound -Protocol TCP -LocalPort 80,443 -Action Allow
New-NetFirewallRule -DisplayName "Allow UDP 27015-27020" -Direction Inbound -Protocol UDP -LocalPort 27015-27020 -Action Allow

步骤 3:开放端口时限制来源 IP

数据库(1433、3306)、远程管理等敏感端口不建议对全网开放。用 -RemoteAddress 指定允许访问的 IP 或网段,其他来源会被默认规则拦截。之后需要调整来源时,用 Set-NetFirewallRule 修改即可,无需删除重建。

# Only allow SQL Server 1433 from your office IP and one subnet
New-NetFirewallRule -DisplayName "MSSQL from office" -Direction Inbound -Protocol TCP -LocalPort 1433 -RemoteAddress 203.0.113.10,198.51.100.0/24 -Action Allow

# Change the source list of an existing rule later
Set-NetFirewallRule -DisplayName "MSSQL from office" -RemoteAddress 203.0.113.10,203.0.113.20

步骤 4:关闭 Windows 防火墙端口(禁用或 Remove-NetFirewallRule 删除)

关闭端口有三种方式:临时禁用规则、用 Remove-NetFirewallRule 彻底删除规则,或新建一条“阻止”规则。注意 Windows 防火墙中阻止规则优先于允许规则,所以想确保某个端口不被访问时,建立阻止规则最稳妥。

# List the rules you created
Get-NetFirewallRule -Direction Inbound | Where-Object DisplayName -like "Allow*" | Format-Table DisplayName,Enabled,Action

# Temporarily disable, or delete permanently
Disable-NetFirewallRule -DisplayName "Allow TCP 8080"
Remove-NetFirewallRule -DisplayName "Allow TCP 8080"

# Explicitly block a port (Block rules win over Allow rules)
New-NetFirewallRule -DisplayName "Block TCP 445" -Direction Inbound -Protocol TCP -LocalPort 445 -Action Block
不要删除或阻止远程桌面端口(默认 3389,或你修改后的端口)的规则,否则会立刻断开 RDP 连接并无法再登录。

步骤 5:允许 Ping(ICMP)

Windows Server 默认不响应 Ping,这并不影响网站访问,但会让测速和监控误判为“服务器宕机”。下面的命令只放行 ICMP 回显请求(Ping),不会开放其他 ICMP 类型。

# Allow ping (ICMPv4 Echo Request) and ICMPv6 echo
New-NetFirewallRule -DisplayName "Allow ICMPv4 Ping" -Direction Inbound -Protocol ICMPv4 -IcmpType 8 -Action Allow
New-NetFirewallRule -DisplayName "Allow ICMPv6 Ping" -Direction Inbound -Protocol ICMPv6 -IcmpType 128 -Action Allow

# Same with the classic netsh syntax
netsh advfirewall firewall add rule name="Allow ICMPv4 Ping" dir=in action=allow protocol=icmpv4:8,any

步骤 6:检查端口是否在监听

防火墙放行只是第一步,程序本身还必须在该端口上监听。用 netstat 或 Get-NetTCPConnection 查看监听地址和进程 PID。如果监听地址是 127.0.0.1,说明程序只接受本机连接,需要在程序配置里改成 0.0.0.0 或服务器公网 IP。

netstat -ano | findstr :8080

Get-NetTCPConnection -State Listen -LocalPort 8080 | Select-Object LocalAddress,LocalPort,OwningProcess
Get-Process -Id (Get-NetTCPConnection -State Listen -LocalPort 8080).OwningProcess

步骤 7:从外部测试端口连通性

一定要从服务器以外的电脑测试,在服务器本机测试会绕过防火墙,结果不准确。显示 TcpTestSucceeded : True 或 nc 提示 succeeded 即表示端口已开放成功。

# From another Windows machine
Test-NetConnection 203.0.113.50 -Port 8080

# From a Linux / macOS machine
nc -zv 203.0.113.50 8080
ping 203.0.113.50

常见问题

已经添加了防火墙规则,为什么端口还是不通?

依次检查:程序是否在监听(步骤 6)、监听地址是否为 127.0.0.1、是否存在同端口的阻止规则、测试时使用的是否是 TCP 而非 UDP,以及本地网络或公司出口是否屏蔽了该端口。也可以参考“Windows 网络不通排查”教程。

可以直接关闭整个 Windows 防火墙吗?

不建议。关闭防火墙会把 SMB、RPC 等系统服务暴露在公网上,容易被扫描和攻击。正确做法是保持防火墙开启,只开放需要的端口。

修改了远程桌面端口后需要开放防火墙吗?

需要。新的 RDP 端口必须先在防火墙中放行,再重启远程桌面服务,具体步骤可参考“Windows 修改远程桌面端口”教程。

如按以上步骤仍无法解决,请提交工单联系 IMIDC 7×24 技术支持,并附上服务器 IP、操作系统版本、执行过的命令和报错截图,方便工程师快速定位问题。

这篇文章有帮助吗?

相关教程