EQVPS
控制台开始使用

如何在 VPS 上配置 Windows 防火墙:开放端口、只放行一个 IP、查看被拦截的内容

在 Windows Server 2022 上开放端口、只允许你自己的 IP、开启 ping、记录被拦截的连接并备份规则,全部只需几条 PowerShell 命令。每条规则我们都从第二台机器上测试过,确认端口确实打开或关闭了。

Windows Server 出厂时防火墙就是开着的,这是正确的默认设置:凡是从外部尝试连接的,除非有规则放行,否则一律拒绝。当你运行自己的东西时就需要调整,比如端口 8080 上的 Web 应用,或者只允许办公室访问的服务。本文在 Windows Server 2022 上全部用 PowerShell 完成。每条规则我们都在自家镜像上试过,并从第二台机器上验证,所以你可以确信端口确实被打开或关闭了。

以管理员身份打开 PowerShell。如果还没做,先加固 RDP:那篇指南讲的是如何限制远程桌面本身。

1. 查看哪些已开启

Get-NetFirewallProfile | Format-Table Name, Enabled, DefaultInboundAction, DefaultOutboundAction
Get-NetConnectionProfile | Format-Table InterfaceAlias, NetworkCategory

在我们新开的服务器上,三个配置文件(Domain、Private、Public)都已启用,网卡属于 Public。DefaultInboundAction 显示为 NotConfigured,即 Windows 的默认行为:拦截入站、允许出站。所以真正起作用的是 Public 配置文件的规则。

查看哪些入站流量被允许:

Get-NetFirewallRule -Direction Inbound -Enabled True -Action Allow |
    Group-Object DisplayGroup | Sort-Object Count -Descending |
    Select-Object Count, Name -First 8

我们数到 54 条已启用的入站规则。大多数属于 Windows 自身(Core Networking、Cast to Device、mDNS),另外还有三条远程桌面规则。ping 不在其中。

2. 开放端口

假设你的应用监听 TCP 端口 8080:

New-NetFirewallRule -DisplayName 'Web app 8080' -Direction Inbound `
    -Protocol TCP -LocalPort 8080 -Action Allow

规则一创建就生效。从第二台机器看,端口 8080 从被拦截变成了开放,而同样有程序在监听的 8081 端口仍被拦截。不带 -Profile 的规则适用于所有配置文件,包括 Public。

如果是范围或列表,用 -LocalPort 8000-8010 或 -LocalPort 80,443。如果是 UDP,修改 -Protocol。

3. 只放行特定地址

大多数服务没必要接受整个互联网的连接。把规则限制在应该连接的地址上:

Set-NetFirewallRule -DisplayName 'Web app 8080' -RemoteAddress 203.0.113.10
Set-NetFirewallRule -DisplayName 'Web app 8080' -RemoteAddress 203.0.113.10, 198.51.100.0/24

两种情况我们都测过。-RemoteAddress 里填的是别的地址时,我们的测试机器就连不上了;把它自己的地址加进去之后,就能连上。对远程桌面规则用同样的参数,可以让 RDP 只对你的办公室开放。如果你家里的 IP 经常变,对 RDP 这么做之前请三思。

4. 开启 ping

Windows 默认不响应 ping。规则存在,但是关着的:

Enable-NetFirewallRule -DisplayName 'File and Printer Sharing (Echo Request - ICMPv4-In)'

这之后,我们的服务器立刻开始响应 ping。用 ping 检查在线状态的监控工具需要这一点。要再次关闭,用同名的 Disable-NetFirewallRule。

5. 记录被拦截的内容

当某个东西连不上、又不知道原因时,让防火墙把它丢弃的内容记下来:

Set-NetFirewallProfile -Profile Public -LogBlocked True -LogMaxSizeKilobytes 4096
Get-Content C:\Windows\System32\LogFiles\Firewall\pfirewall.log -Tail 20

每次被拦截的尝试都会变成这样一行:

2026-10-25 02:07:25 DROP TCP 198.51.100.7 203.0.113.25 43386 445 60 S 2112839481 0 64240 - - - RECEIVE 4

读法是:日期和时间、动作、协议、源地址、你的服务器地址、源端口、目标端口。请耐心一点:Windows 分批写日志,我们的测试记录在尝试之后大约一分钟才出现。4 MB 的上限能防止文件无限增长。

6. 备份和清理

做大的改动之前,先把所有规则保存到文件:

netsh advfirewall export C:\fw-backup.wfw

我们导出的文件是 148 KB。netsh advfirewall import C:\fw-backup.wfw 会原样恢复这套规则,替换掉当前的所有规则。不再需要的规则按名称删除:

Remove-NetFirewallRule -DisplayName 'Web app 8080'

如果把自己挡在外面了

如果某条规则切断了你自己的远程桌面,就打开控制面板里的控制台。它不经过 RDP,你可以登录后运行 Remove-NetFirewallRule 或 Set-NetFirewallRule 撤销修改。

NAT 还是独立 IP

在 NAT 套餐上,互联网只能通过一个专属端口到达你的服务器,这个端口通向远程桌面。无论你在 Windows 防火墙里放行什么,其他端口从外部都无法访问。要提供网站或在其他端口上接受连接,你需要独立 IPv4:Windows Small-IP(4 vCPU、4 GB、50 GB,每月 $28)提供所有端口都开放的 IP,这时就由 Windows 防火墙说了算。Windows-Small 的 NAT 版每月 $11。四个 Windows 套餐都在 Windows VPS 页面,支付方式为 Base、Ethereum 或 Polygon 网络上的 USDT、USDC 或 ETH。

常见问题

Windows VPS 上的 Windows 防火墙默认开启吗?

开启。在我们的 Windows Server 2022 镜像上,三个配置文件全部启用,网卡属于 Public 配置文件,没有规则放行的入站连接都会被拦截。出站连接是允许的。

为什么我的 Windows 服务器不响应 ping?

Windows 默认拦截 ping:File and Printer Sharing (Echo Request - ICMPv4-In) 这条规则存在,但处于关闭状态。用一条 PowerShell 命令启用它,服务器马上就会响应。

我在 Windows 防火墙里开放了端口,可从公网看还是关闭的。为什么?

在 NAT 套餐上,只有你的专属端口能到达服务器,而它通向远程桌面。无论防火墙怎么设置,其他端口都无法从公网访问。要在 Windows 上运行网站或其他服务,请使用带独立 IPv4 的套餐。

如果我用防火墙规则把自己挡在 RDP 外面了怎么办?

打开控制面板里的控制台。它不依赖 RDP,你可以从那里登录,修改或删除规则。把 RDP 限制到单个 IP 之前,先确认你自己的地址不会变。

怎样查看防火墙拦截了什么?

为 Public 配置文件开启“记录被丢弃的连接”。之后 Windows 会把每次被拦截的尝试写入 pfirewall.log。在我们的测试中,由于 Windows 是分批写日志的,记录大约一分钟后才出现。

评论

暂无评论。来做第一个吧。

发表评论

评论在显示前会经过审核。