技術文章 · IT 指令工具箱

Windows 防火牆指令:查規則、測 Port、最小放行與移除

Windows Defender Firewall 怎麼查?整理 Get-NetFirewallRule、Get-NetFirewallPortFilter、New-NetFirewallRule 與最小範圍測試方式。

作者 Steve Chen · 發布  · 約 7 分鐘閱讀

IT 指令工具箱 — 廷皓技術專欄插圖

防火牆排查不要先把三個 Profile 全關掉。先確認目前套用的 Domain、Private 或 Public Profile,再找規則、程式、Port、來源位址與阻擋紀錄。

18 組範例Windows 10Windows 11Windows Server查核日期:2026-08-11
動手前:新增放行規則會改變攻擊面。限制 Profile、方向、程式、來源網段與本機 Port,測完刪除臨時規則;受網域 GPO 管理時不要用本機規則硬蓋政策。

查看目前狀態

查看三個防火牆 Profile系統管理員 PowerShell

Get-NetFirewallProfile | Format-Table Name, Enabled, DefaultInboundAction, DefaultOutboundAction

確認目前政策,不要先停用。

只看已啟用規則PowerShell

Get-NetFirewallRule -Enabled True | Select-Object DisplayName, Direction, Action, Profile

規則很多,可再依 DisplayGroup 或名稱篩選。

依名稱搜尋規則PowerShell

Get-NetFirewallRule -DisplayName '*Remote Desktop*'

顯示名稱會因語系不同。

查看規則對應 PortPowerShell

Get-NetFirewallRule -DisplayName 'HTTPS for Admin LAN' | Get-NetFirewallPortFilter

規則本體與 Port filter 是不同物件。

查看規則對應程式PowerShell

Get-NetFirewallRule -DisplayName 'App API' | Get-NetFirewallApplicationFilter

確認是否綁到正確執行檔路徑。

查看規則來源範圍PowerShell

Get-NetFirewallRule -DisplayName 'HTTPS for Admin LAN' | Get-NetFirewallAddressFilter

RemoteAddress 不應無條件設成 Any。

查看目前網路 ProfilePowerShell

Get-NetConnectionProfile

Public Profile 通常比 Private 更嚴格。

建立最小範圍規則

只允許管理網段連 TCP 443系統管理員 PowerShell

New-NetFirewallRule -DisplayName 'HTTPS for Admin LAN' -Direction Inbound -Action Allow -Protocol TCP -LocalPort 443 -RemoteAddress 192.168.50.0/24 -Profile Domain,Private

來源網段換成實際管理 VLAN;不要把 Public 一起放行。

只允許指定程式出站系統管理員 PowerShell

New-NetFirewallRule -DisplayName 'Vendor Updater HTTPS' -Direction Outbound -Action Allow -Program 'C:\Program Files\Vendor\updater.exe' -Protocol TCP -RemotePort 443

若政策本來允許所有出站,這條不會額外限制其他程式。

建立暫時測試規則系統管理員 PowerShell

New-NetFirewallRule -DisplayName 'TEMP API 8443' -Direction Inbound -Action Allow -Protocol TCP -LocalPort 8443 -RemoteAddress 192.168.50.25

命名加 TEMP 並記錄移除時間。

停用單一規則系統管理員 PowerShell

Disable-NetFirewallRule -DisplayName 'TEMP API 8443'

停用比刪除更容易回復,但不要留下永久臨時規則。

重新啟用單一規則系統管理員 PowerShell

Enable-NetFirewallRule -DisplayName 'TEMP API 8443'

啟用後再確認 Profile、來源與 Port。

移除臨時規則系統管理員 PowerShell

Remove-NetFirewallRule -DisplayName 'TEMP API 8443'

先用 Get-NetFirewallRule 精確確認只命中一條。

紀錄與驗證

查看防火牆記錄設定系統管理員 PowerShell

Get-NetFirewallProfile | Select-Object Name, LogFileName, LogBlocked, LogAllowed

是否記錄允許連線要考慮 log 量。

啟用阻擋紀錄系統管理員 PowerShell

Set-NetFirewallProfile -Profile Domain,Private,Public -LogBlocked True

會改設定;先確認磁碟與集中日誌政策。

查看預設防火牆 logPowerShell

Get-Content "$env:SystemRoot\System32\LogFiles\Firewall\pfirewall.log" -Tail 100

通常需要系統管理員權限。

本機測監聽 PortPowerShell

Get-NetTCPConnection -LocalPort 8443 -State Listen -ErrorAction SilentlyContinue

沒有 listener 時,開防火牆也不會讓服務可用。

從另一台測 TCPPowerShell

Test-NetConnection server.example.com -Port 8443

要從真正的來源網段測,才能驗證 RemoteAddress 限制。

怎麼確認有做對

  • 先確認服務真的在監聽,再從允許與不允許的來源各測一次。
  • 查規則實際套用的 Profile、Port、程式與 RemoteAddress。
  • 測試完成移除 TEMP 規則並再次驗證。

常見錯誤

  • 為排錯直接關閉整套防火牆。
  • Inbound 規則用 Any source、Any profile。
  • 開了 Port 卻沒有程式監聽。
  • 忽略 GPO 或 MDM 會覆蓋本機設定。

版本與官方文件

參數會隨工具版本與作業系統實作改變。正式環境先用 --help、-h 或系統內建說明確認,再以當版官方文件為準。

聯絡廷皓討論 看更多文章