EQVPS
控制台開始使用

如何在 VPS 上設定 Windows 防火牆:開放連接埠、只允許一個 IP、查看被封鎖的內容

在 Windows Server 2022 上開放連接埠、只允許你自己的 IP、啟用 ping、記錄被封鎖的連線並備份規則,全部只需幾條 PowerShell 指令。每條規則我們都從第二台機器測試過,確認連接埠真的打開或關閉了。

Windows Server 出廠時防火牆就是開著的,這是正確的預設值:所有從外部嘗試連線的,除非有規則放行,否則一律拒絕。當你執行自己的東西時就需要調整,例如連接埠 8080 上的網頁應用程式,或只允許辦公室存取的服務。本文在 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 會分批寫入記錄,大約一分鐘後才出現。

評論

目前還沒有評論。歡迎成為第一位。

發表評論

評論在顯示前會經過審核。