Windowsファイアウォールの規則をコマンドで作成・変更・削除する方法

Windowsファイアウォールの規則をコマンドで作成・変更・削除する方法

Windows環境では、設定画面から行うさまざまな設定をPowerShellコマンドレット使って行うことができ、標準搭載のファイアウォール機能である「Windows Defender ファイアウォール」の規則設定もPowerShellで作成や変更・削除といった操作が可能です。

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

規則の新規作成

新規で許可またはブロックの規則を作成するときは「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コマンドレットを使った方法が効率的です。ご活用あれ。