Windows Firewall設定

概要

本記事では、Windows ServerにおけるWindows Defender Firewall(旧Windows Firewall)の設定方法を解説します。ドメイン・プライベート・パブリック各プロファイルの設計指針、受信・送信ポリシーの最適化、ログの収集と分析、そしてGPOやスクリプトによる集中管理を含めた実践的な運用手法を示します。

変数表記について

変数名 設定例 説明
<<SERVER_NAME>> SRV-CORE01 対象サーバーのホスト名
<<LOG_PATH>> C:\FirewallLogs\pfirewall.log ファイアウォールログの出力パス
<<OU_NAME>> Servers OU名

Step 1: プロファイルの理解と適用設計

Windows Defender Firewallは、以下の3つのプロファイルで構成されます。

プロファイル 用途 想定環境
ドメイン Active Directory参加済みネットワーク 社内LAN、VPN接続
プライベート 信頼できる独立ネットワーク テスト環境、閉域ネットワーク
パブリック 不特定ネットワーク 公共Wi-Fi、仮想検証環境

各プロファイルは個別に設定可能であり、ネットワーク識別子によって自動的に切り替わります。

確認コマンド:

# 各プロファイルの状態と既定ポリシーを確認
Get-NetFirewallProfile | Select-Object Name, Enabled, DefaultInboundAction, DefaultOutboundAction

Step 2: 基本ポリシーの設定(既定動作)

Windows Defender Firewallの既定設定では「受信はブロック、送信は許可」となっています。
これを維持しつつ、必要に応じて明示的な送信制御を導入します。

# 既定ポリシーを明示的に設定
Set-NetFirewallProfile -Profile Domain,Private,Public `
  -DefaultInboundAction Block `
  -DefaultOutboundAction Allow `
  -NotifyOnListen True

補足: セキュリティ要件が高い環境では -DefaultOutboundAction Block とし、必要な送信通信(例: DNS, NTP, WSUSなど)のみ個別許可する「ホワイトリスト方式」も推奨されます。


Step 3: ファイアウォールルールの操作と管理

Windows Defender Firewallのルール操作例を示します。

ルールの一覧表示・検索

現在のファイアウォールルールを一覧表示し、特定の条件で絞り込みも可能です。

# すべてのルールを表示
Get-NetFirewallRule

# 名前に「RDP」を含むルールを検索
Get-NetFirewallRule | Where-Object DisplayName -Like "*RDP*"

# 有効なルールのみ表示
Get-NetFirewallRule | Where-Object Enabled -eq "True"

新規ルールの作成

受信・送信ルールを新規作成して、特定のポートやプログラムを許可・拒否できます。

# 受信TCPポート3389(RDP)を許可(ドメインプロファイル限定)
New-NetFirewallRule -DisplayName "Allow RDP (Domain)" `
  -Direction Inbound -Protocol TCP -LocalPort 3389 `
  -Action Allow -Profile Domain

# 送信UDPポート123(NTP)を許可
New-NetFirewallRule -DisplayName "Allow NTP Outbound" `
  -Direction Outbound -Protocol UDP -LocalPort 123 `
  -Action Allow -Profile Domain,Private,Public

設定値の表(サンプルと書式)

項目 パラメーター 設定例 受け付ける書式/値
通信方向 -Direction Inbound / Outbound Inbound または Outbound
動作 -Action Allow / Block Allow, Block
プロトコル -Protocol TCP / UDP / ICMPv4 / ICMPv6 / Any TCP, UDP, ICMPv4, ICMPv6, Any<br>(必要に応じて ICMPv4 または ICMPv6-IcmpType を組み合わせて詳細指定も可能)
ローカルポート -LocalPort 80 / 1024-2048 / 80,443,8080 単一ポート番号、範囲(例: 1024-2048)、カンマ区切りリスト
リモートポート -RemotePort 53 / 1000-2000 / 53,67,68 単一ポート番号、範囲、カンマ区切りリスト
リモートアドレス -RemoteAddress 192.168.1.1 / 192.168.0.0/24 / 192.168.1.1-192.168.1.255 / 192.168.1.1,10.0.0.1 / Any 単一IP、CIDR表記、IP範囲、カンマ区切りリスト、Any
ローカルアドレス -LocalAddress 10.0.0.1 / 10.0.0.0/16 / 10.0.0.1-10.0.0.255 / Any 単一IP、CIDR表記、IP範囲、カンマ区切りリスト、特殊キーワード、Any
プログラム -Program C:\Program Files\App\App.exe 実行ファイルのフルパス
サービス -Service W32Time Windowsサービス名
プロファイル -Profile Domain,Private Domain, Private, Public の組み合わせ
インターフェース種類 -InterfaceType Ethernet / Wireless / RemoteAccess Ethernet, Wireless, RemoteAccess など

例: 特定のリモートIPからの受信を許可

New-NetFirewallRule -DisplayName "Allow HTTP from Trusted IP" `
  -Direction Inbound -Protocol TCP -LocalPort 80 `
  -RemoteAddress 192.168.1.100 `
  -Action Allow -Profile Domain,Private

例: 特定のプログラムによる送信を許可

New-NetFirewallRule -DisplayName "Allow Outbound for App.exe" `
  -Direction Outbound -Program "C:\Program Files\App\App.exe" `
  -Action Allow -Profile Domain,Private,Public

例: 特定のサービスに対する受信を許可

New-NetFirewallRule -DisplayName "Allow Service XYZ Inbound" `
  -Direction Inbound -Service "W32Time" `
  -Action Allow -Profile Domain,Private

例: ワイヤレスインターフェース経由の送信を拒否

New-NetFirewallRule -DisplayName "Block Outbound on Wireless" `
  -Direction Outbound -InterfaceType Wireless `
  -Action Block -Profile Public

ルールの変更・無効化

既存ルールの設定を変更したり、一時的に無効化することができます。

# ルールの状態を無効化
Disable-NetFirewallRule -DisplayName "Allow RDP (Domain)"

# ルールの状態を有効化
Enable-NetFirewallRule -DisplayName "Allow RDP (Domain)"

# ルールの設定値変更(例: DomainとPrivateに限定)
Set-NetFirewallRule -DisplayName "Allow RDP (Domain)" -Profile Domain,Private

ルールの削除

不要なルールは削除して管理を簡素化します。

# ルールを削除
Remove-NetFirewallRule -DisplayName "Allow RDP (Domain)"

ルールのエクスポート・インポート

ルールセットをファイルに保存・復元して、他サーバーへの展開やバックアップに利用できます。

# ファイアウォール設定のエクスポート
netsh advfirewall export "C:\Backup\FirewallPolicy.wfw"

# ファイアウォール設定のインポート
netsh advfirewall import "C:\Backup\FirewallPolicy.wfw"

Step 4: ログ収集と監査の設定

受信・送信の許可/拒否を記録し、異常通信を監視します。

# ログ設定(許可・拒否両方記録、最大サイズ32MB)
Set-NetFirewallProfile -Profile Domain,Private,Public `
  -LogAllowed True -LogBlocked True `
  -LogFileName "<<LOG_PATH>>" -LogMaxSizeKilobytes 32767

ログ確認例:

# ログの末尾をリアルタイム監視
Get-Content "<<LOG_PATH>>" -Tail 20 -Wait

注意: LogAllowed=True を有効にするとログ量が増加します。運用環境では、重要なプロファイル(例: Public)のみ許可ログを有効化するか、定期的にログをローテーション・アーカイブします。
また、-LogMaxSizeKilobytes パラメーターの上限は 32767 KB であり、これを超える値を設定するとエラーになります。


Step 5: GPOによる集中管理

GPOのファイアウォール設定は、PowerShellのグループポリシー管理用コマンドレットを使って直接編集・自動化できます。
主なコマンドレットは Set-GPRegistryValueGet-GPONew-GPOSet-GPInheritance などです。

PowerShellでファイアウォールGPOを新規作成し、ドメインプロファイルのログ設定を反映

  1. GPOの作成または取得

    # 新しいGPOを作成
    $gpo = New-GPO -Name "Firewall-Policy-Domain"
    

    ※既存のGPOを編集する場合は Get-GPO -Name "<GPO名>" で取得できます。

  2. Firewall設定値をGPOレジストリキー経由で変更

    • 例: ドメインプロファイルのログ有効化・ログパス・最大サイズを設定
    # ファイアウォールログ設定をGPOに反映
    Set-GPRegistryValue -Name $gpo.DisplayName `
      -Key "HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile" `
      -ValueName "EnableLogging" -Type DWord -Value 1
    
    Set-GPRegistryValue -Name $gpo.DisplayName `
      -Key "HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile\Logging" `
      -ValueName "LogFilePath" -Type String -Value "%systemroot%\system32\logfiles\firewall\pfirewall.log"
    
    Set-GPRegistryValue -Name $gpo.DisplayName `
      -Key "HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\DomainProfile\Logging" `
      -ValueName "LogFileSize" -Type DWord -Value 32767
    

補足: これらのGPO設定は New-GPLink でOUにリンクした際に対象サーバーへ適用されます。

OUへリンク(New-GPLink)

New-GPLink を使って、作成したGPOを対象OUにリンクします。-Target には OU の識別名(DN)またはドメインDNを渡します。

# Active Directory モジュールを読み込み
Import-Module ActiveDirectory

# 例: 既に作成済みのGPOオブジェクトを取得
$gpo = Get-GPO -Name "Firewall-Policy-Domain"

# 例: 特定OU(名前で検索)の DN を取得してリンク
$ou = Get-ADOrganizationalUnit -LDAPFilter '(name=<<OU_NAME>>)' `
      -SearchBase (Get-ADDomain).DistinguishedName -SearchScope Subtree |
      Select-Object -First 1
$ouDn = $ou.DistinguishedName

# OU にGPOをリンク(有効、Enforcedは任意)
New-GPLink -Name $gpo.DisplayName -Target $ouDn -LinkEnabled Yes -Enforced No

ヒント: ドメイン直下にリンクする場合は、-Target (Get-ADDomain).DistinguishedName を指定できます。

要件: Import-Module ActiveDirectory(RSAT: Active Directory モジュール)と GroupPolicy モジュールが必要です。サーバー管理端末にRSATを導入してから実行してください。


Step 6: 定期検証とトラブルシュート

通信不具合の調査やルール競合の特定には、以下を使用します。

# 有効なルール一覧を確認
Get-NetFirewallRule | Where-Object {$_.Enabled -eq "True"} |
Select-Object DisplayName, Direction, Action, Profile

# 特定ポートの疎通テスト
Test-NetConnection -ComputerName <<SERVER_NAME>> -Port 3389

まとめ

Windows Defender Firewallは、OS標準で強固なネットワーク防御を提供します。受信・送信両面の制御、ログ分析、自動化運用を組み合わせることで、可視性と安全性を両立できます。特に送信制御と集中管理を徹底することで、ゼロトラスト時代に適した堅牢な防御運用が実現します。