Windows 防火墙:开放所需端口
如何为您的服务开放端口,按地址限制访问,并验证规则确实生效且不会让您失去对服务器的访问。
更新于 2026年8月23日
在装有 Windows Server 的 VDS 上,防火墙是您的服务与互联网之间唯一的过滤器:IPv4 地址是公网地址,机器前面没有任何外部防护。因此规则很简单:只有您主动开放的端口才会暴露在外。
当前开放了哪些端口
Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction
Get-NetFirewallRule -Enabled True -Direction Inbound |
Where-Object Action -eq Allow |
Get-NetFirewallPortFilter | Select-Object Protocol, LocalPort -Unique
Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, OwningProcess
最后一条命令显示所有正在监听的端口。只监听 127.0.0.1 的服务无论规则如何,都无法从外部访问。
开放端口
Web 服务器:
New-NetFirewallRule -DisplayName "HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
New-NetFirewallRule -DisplayName "HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
仅允许受信任地址访问的自有服务:
New-NetFirewallRule -DisplayName "App 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 `
-RemoteAddress 203.0.113.5,198.51.100.0/24 -Action Allow
如果应用程序使用动态端口,针对特定程序而非端口的规则更可靠:
New-NetFirewallRule -DisplayName "MyApp" -Direction Inbound -Program "C:\apps\myapp.exe" -Action Allow
删除和查看规则:
Remove-NetFirewallRule -DisplayName "App 8080"
Get-NetFirewallRule -DisplayName "App 8080" | Format-List
哪些端口应保持关闭
未经地址限制,绝不要对外暴露以下端口:
| 端口 | 服务 | 原因 |
|---|---|---|
| 3389 | RDP | 密码暴力破解在最初几小时内就会开始,参见 RDP 防护 |
| 1433 | MS SQL | 数据库不应从互联网访问,参见 MS SQL Server |
| 5985、5986 | WinRM | 远程管理,仅限您自己的地址访问 |
| 445 | SMB | 大规模攻击的经典目标 |
如果您需要从自己的电脑访问数据库,不要开放 1433;而应在 RDP 会话内转发端口或搭建 VPN。
验证
端口在机器内部处于监听状态,并不意味着可以从外部访问。请从另一台主机检查:
nc -vz YOUR_ADDRESS 443
curl -I http://YOUR_ADDRESS
如果从外部显示为关闭,但 Get-NetTCPConnection 显示存在监听,那么问题出在规则或网络配置文件上:请确认规则创建在当前处于活动状态的配置文件中(通常是“公用网络”)。
常见错误
- “为了调试”而完全禁用防火墙。 还没等您调试完,机器就会被扫描到。请改为创建一条带地址限制的临时规则。
- 开放了端口却忘了应用程序。 许多服务默认只监听 localhost;这与规则无关。
- 把自己锁在 RDP 之外。 遇到这种情况,请通过控制面板
/hosting/vds/m/<id>中的“控制台”标签页,以“屏幕”模式登录,并在那里修改规则。 - 在拒绝规则之上创建允许规则。 在 Windows 中,拒绝始终优先于允许——请查找具有相同端口的阻止规则。
每次更改后,建议保存一份配置快照:
Get-NetFirewallRule -Enabled True | Export-Csv C:\fw.csv。这样当某个服务突然无响应时,您就能了解发生了什么变化。