开始输入,可搜索发票、服务、域名、工单,以及 更多...
在 Windows VPS 或独立服务器上部署网站、数据库、游戏服或自研程序后,外部访问不到,最常见的原因就是 Windows 防火墙没有开放端口。本文介绍如何在 Windows Server 2016/2019/2022 上用图形界面和 PowerShell(New-NetFirewallRule / Remove-NetFirewallRule)开放端口、关闭端口、限制来源 IP、允许 Ping,并检查端口监听和从外部测试连通性。
通过远程桌面登录服务器,按 Win+R 输入下面的命令打开“高级安全 Windows Defender 防火墙”。左侧点击“入站规则” → 右侧“新建规则” → 选择“端口” → 选择 TCP 或 UDP 并填写“特定本地端口”(如 8080 或 80,443) → “允许连接” → 勾选域、专用、公用三个配置文件 → 填写一个好记的名称即可。
wf.msc以管理员身份打开 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数据库(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关闭端口有三种方式:临时禁用规则、用 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 BlockWindows 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防火墙放行只是第一步,程序本身还必须在该端口上监听。用 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一定要从服务器以外的电脑测试,在服务器本机测试会绕过防火墙,结果不准确。显示 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 网络不通排查”教程。
不建议。关闭防火墙会把 SMB、RPC 等系统服务暴露在公网上,容易被扫描和攻击。正确做法是保持防火墙开启,只开放需要的端口。
需要。新的 RDP 端口必须先在防火墙中放行,再重启远程桌面服务,具体步骤可参考“Windows 修改远程桌面端口”教程。
如按以上步骤仍无法解决,请提交工单联系 IMIDC 7×24 技术支持,并附上服务器 IP、操作系统版本、执行过的命令和报错截图,方便工程师快速定位问题。