Windowsファイアウォールの規則をPowerShellで作成/変更/削除する方法

Windowsファイアウォールの規則をPowerShellで作成/変更/削除する方法

Windows環境では、設定画面から行うさまざまな設定をPowerShellコマンドレット使って行うことができ、標準搭載のファイアウォール機能である「Windows Defender ファイアウォール」の規則設定も例外ではありません。

そこでここでは、Windows10のWindows Defenderファイアウォールを例に、PowerShellコマンドレットを使って、規則を作成/変更/削除する方法を紹介します。

Windows10のネットワーク「プライベート」と「パブリック」の違いとは、切り替え方は?
ここでは、ネットワークプロファイル(ネットワークの場所)機能の概要や「プライベート」と「パブリック」の違い、ネットワークプロファイルの切り替え方を紹介します。

動作環境

この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
Windows10 Pro 64bit22H2

新規規則を作成する

新規で許可またはブロックの規則を作成するときは「New-NetFirewallRule」コマンドレットを利用します。

たとえば、TCPの2000番ポート宛に受信したパケットを許可するパブリックプロファイル向けの規則を作成したいときは、次のように実行します。(すべてのプロファイルを対象とする場合は「-Profile」オプションの指定は不要です。)

PS> New-NetFirewallRule -DisplayName "FwTest001" -Profile Public -Protocol TCP -LocalPort 2000 -Direction Inbound -Action Allow

すべてのポート宛に受信したパケットを許可するプライベート/パブリックプロファイル向けの規則を作成したいときは、次のように実行します。

PS> New-NetFirewallRule -DisplayName "FwTest002" -Profile Private,Public -Protocol TCP -LocalPort Any -Direction Inbound -Action Allow

TCPの80版または443番ポート宛に受信したパケットをブロックするすべてのプロファイル向けの規則を作成したいときは、次のように実行します。

PS> New-NetFirewallRule -DisplayName "FwTest003" -Protocol TCP -LocalPort 80,443 -Direction Inbound -Action Block

以下のように、特定のプログラムで受信したパケットを許可したり、送信元アドレスを指定した規則を作成することもできます。

PS> New-NetFirewallRule -DisplayName "FwTest004" -Program "%SystemRoot%\System32\tlntsvr.exe" -Direction Inbound -RemoteAddress "192.168.1.0/24" -Action Allow

既存の規則の設定を変更する

既存の規則の設定を変更するときは「Set-NetFirewallRule」コマンドレットを利用します。

たとえば、既存の規則「FwTest001」をポート2000番と3000番を許可するよう変更したいときは、次のように実行します。

PS> Set-NetFirewallRule -DisplayName "FwTest001" -LocalPort 2000,3000

既存の規則「FwTest004」で送信元をローカルサブネットに変更したいときは、次のように実行します。

PS> Set-NetFirewallRule -DisplayName "FwTest004" -RemoteAddress LocalSubnet

既存の規則の設定内容を確認する

既存の規則の設定内容を確認したいときは「Get-NetFirewallRule」コマンドレットを利用します。

たとえば、すべての受信規則を一覧表示したいときは、次のように実行します。(なお、パイプでFormat-Tableコマンドレットを使って表示するプロパティを指定すると、見やすく表示できます。)

PS> Get-NetFirewallRule -Direction Inbound | Format-Table -Property DisplayName,Enabled,Profile,Direction,Action

規則「FwTest001」の設定内容を確認したいときは、次のように実行します。

PS> Get-NetFirewallRule -DisplayName "FwTest001"

また、より詳細な設定内容を確認したいときは、次のように実行します。

PS> Get-NetFirewallRule -DisplayName "FwTest001" | Format-List -Property *

なお、Get-NetFirewallRuleコマンドレットでは、プロトコルやポートの設定内容など一部の設定情報が表示されないため、それらの設定情報も確認したいときは、パイプで以下のコマンドレットを実行する必要があります。

  • ポートフィルター:Get-NetFirewallPortFilter
  • アドレスフィルター:Get-NetFirewallAddressFilter
  • アプリケーションフィルター:Get-NetFirewallApplicationFilter
  • インターフェースフィルター:Get-NetFirewallInterfaceFilter
  • インターフェースタイプフィルター:Get-NetFirewallInterfaceTypeFilter
  • セキュリティフィルター:Get-NetFirewallSecurityFilter
  • サービスフィルター:Get-NetFirewallServiceFilter

たとえば、ポートフィルターの設定情報を確認したいときは、次のように実行します。

PS> Get-NetFirewallRule -DisplayName "FwTest001" | Get-NetFirewallPortFilter

既存の規則を削除する

不要な規則を削除したいときは「Remove-NetFirewallRule」コマンドレットを利用します。

たとえば、規則「FwTest004」を削除したいときは、次のように実行します。

PS> Remove-NetFirewallRule -DisplayName "FwTest004"

参考

上記で紹介しているそれぞれのPowerShellコマンドレットの詳細な利用方法やオプションについて知りたいときは、以下の公式サイトが役立つでしょう。

New-NetFirewallRule (NetSecurity) | Microsoft Learn

Set-NetFirewallRule (NetSecurity) | Microsoft Learn

Get-NetFirewallRule (NetSecurity) | Microsoft Learn

Remove-NetFirewallRule (NetSecurity) | Microsoft Learn

あとがき

一時的に特定のポートでの受信を許可したりブロックしたりといった設定を頻繁に行うような場合は、GUI画面で毎回操作するよりも、PowerShellコマンドレットを使ったほうが効率的に操作できます。

ご活用あれ。

記事が役立ったらシェアしてくれるとうれしいです。