【PowerShell】Windowsファイアウォールのルールを自動で追加・削除する方法

【PowerShell】Windowsファイアウォールのルールを自動で追加・削除する方法 PowerShell

Windowsファイアウォールでは、特定のポートやアプリケーションへの通信を制限・許可するルールを設定できます。PowerShellを使えば、これらのルールを手動操作することなくスクリプトで一括管理することが可能です。この記事では、PowerShellによってファイアウォールルールを自動で追加・削除する方法を紹介します。

ファイアウォールルールの追加

New-NetFirewallRule コマンドレットを使って、特定のポートを許可するルールを作成できます。

例:TCP 8080ポートを許可するルールを作成

New-NetFirewallRule `
  -DisplayName "Allow TCP 8080" `
  -Direction Inbound `
  -Protocol TCP `
  -LocalPort 8080 `
  -Action Allow

このルールは受信方向(Inbound)に対し、TCPの8080番ポートへの通信を許可します。

UDPの例

New-NetFirewallRule -DisplayName "Allow UDP 1234" -Direction Inbound -Protocol UDP -LocalPort 1234 -Action Allow

特定アプリケーションへの許可

New-NetFirewallRule `
  -DisplayName "Allow MyApp" `
  -Direction Inbound `
  -Program "C:\MyApp\app.exe" `
  -Action Allow

アプリケーションベースで通信許可を設定することもできます。

ファイアウォールルールの一覧表示

追加済みルールを確認するには、以下のコマンドを使用します:

Get-NetFirewallRule | Where-Object { $_.DisplayName -like "*8080*" }

ルールの削除

Remove-NetFirewallRule を使えば、DisplayNameで指定してルールを削除できます。

例:先ほど作成したルールを削除

Remove-NetFirewallRule -DisplayName "Allow TCP 8080"

すべてのファイアウォールルールのエクスポート・インポート

設定のバックアップや再展開には、以下のようにポリシー全体を操作できます:

# エクスポート
netsh advfirewall export "C:\firewall-config.wfw"

# インポート
netsh advfirewall import "C:\firewall-config.wfw"

補足:ルールの存在確認と上書き

$rule = Get-NetFirewallRule -DisplayName "Allow TCP 8080" -ErrorAction SilentlyContinue
if ($null -eq $rule) {
  New-NetFirewallRule -DisplayName "Allow TCP 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow
}

すでに存在するルールがある場合の重複防止や更新制御に役立ちます。

まとめ

PowerShellを使えば、Windowsファイアウォールの設定をGUIを使わずに自動で行うことができます。新しいアプリやポートの展開に伴う通信許可の自動化、初期セットアップの一括処理、あるいはセキュリティポリシーの定型化など、さまざまなシーンで活用できます。管理業務を効率化したい方は、ぜひスクリプトベースでのファイアウォール制御に取り組んでみてください。