ESC

開始輸入,可搜尋發票、服務、域名、工單,以及 更多...

搜尋... Ctrl+K
Windows 伺服器

Windows 防火牆開放埠與關閉埠教程(圖形介面 + PowerShell)

7 個步驟 9 分鐘閱讀 22 次閱讀 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、作業系統版本、執行過的命令和報錯截圖,方便工程師快速定位問題。

這篇文章有幫助嗎?

相關教程