概要
本記事では、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-GPRegistryValue、Get-GPO、New-GPO、Set-GPInheritance などです。
PowerShellでファイアウォールGPOを新規作成し、ドメインプロファイルのログ設定を反映
-
GPOの作成または取得
# 新しいGPOを作成 $gpo = New-GPO -Name "Firewall-Policy-Domain"※既存のGPOを編集する場合は
Get-GPO -Name "<GPO名>"で取得できます。 -
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標準で強固なネットワーク防御を提供します。受信・送信両面の制御、ログ分析、自動化運用を組み合わせることで、可視性と安全性を両立できます。特に送信制御と集中管理を徹底することで、ゼロトラスト時代に適した堅牢な防御運用が実現します。
