Windowsの運用管理を快適にする10の裏ワザ/表ワザ
[ テクニカルライター 山市 良 ]

テクニック.6 - Windowsファイアウォールの健全性チェック

2021年11月29日配信
2023年09月28日更新

yamaichi_tec006_top_1800x540

 

 WindowsおよびWindows Serverでは、エンドポイントのファイアウォール機能として[Windows Defenderファイアウォール](旧称、Windowsファイアウォール)が既定で有効になっており、送受信トラフィックの許可/禁止を制御しています。Windows Defenderファイアウォールは不要な、あるいは許可されていないネットワークトラフィックをブロックすることで攻撃面を縮小することが主な目的です。Windows Defenderファイアウォールが適切に構成されていないと、セキュリティを低下につながるばかりか、パフォーマンスに影響することもあります。

 

■ ネットワークの場所とファイアウォールプロファイルの関係

 Microsoft Security Compliance Toolkit(SCT)1.0は、企業のセキュリティ管理者がWindows、Windows Server、およびその他のマイクロソフト製品用の、マイクロソフト推奨のセキュリティ設定のベースラインをダウンロードし、現在の設定との比較評価、および実装するのに役立つ一連のツールです。

 コンピューターにインストールされている物理ネットワークアダプターには、アダプターごとにネットワークプロファイル(ネットワーク接続プロファイル)が関連付けられます。

 Windowsは新しいネットワーク接続を検出すると、それを識別し、ネットワークの場所(Network Category)をパブリックネットワーク(Public)またはプライベートネットワーク(Private)に設定します。既定ではパブリックに設定しようとしますが、ユーザーに対してプライベートネットワークに切り替えるか問い合わせますし、後から[設定]アプリの[ネットワークとインターネット]のGUIで変更することもできます。プライベートに設定されたネットワークがActive Directoryドメインとして認証されると(コンピューターがドメインメンバーである場合)、ネットワークの場所をドメインネットワーク(DomainAuthenticated)に設定します。デフォルトゲートウェイが存在せず、インターネット接続を確認できない接続については、識別されていないネットワークとしてパブリックネットワーク(Public)が設定されます。

 一方、Windows Defenderファイアウォールには、パブリック(Public)プライベート(Private)ドメイン(Domain)の3つのファイアウォールプロファイルが存在します。パブリック(Public)は信頼できないネットワーク接続に対して最小限の通信を許可するファイアウォールルールが、プライベート(Private)にはLAN(ローカルエリアネットワーク)上でさまざまなネットワーク機能(ファイルとプリンター共有など)を可能にする緩和されたファイアウォールルールが、ドメイン(Domain)にはActive Directoryドメインのネットワーク機能に不可欠なファイアウォールルールが定義されています。

 そして、ネットワークプロファイルのパブリックネットワーク(Public)プライベートネットワーク(Private)ドメインネットワーク(DomainAUthenticated)の設定には、パブリック(Public)プライベート(Private)ドメイン(Domain)ファイアウォールプロファイルが適用され、それぞれにファイアウォールのルールが適用されることになります。

Windows 10およびWindows Server 2016以降のデスクトップエクスペリエンスの場合、現在のネットワークの識別状態は、[設定]アプリの[ネットワークとインターネット]、およびコントロールパネルの[ネットワークと共有センター]で確認することができます。また、Windows Defenderファイアウォールの状態は[セキュリティが強化されたWindows Defenderファイアウォール](WF.msc)スナップインで確認することができます。ネットワークを安全な状態を維持するためには、最低限、ネットワークの場所が適切に識別されており、対応するファイアウォールプロファイルが有効になっていることが重要です。

 

001

画面1 ネットワークの識別と対応するファイアウォールプロファイルが有効になっていることを確認する

 

■コマンドラインによるプロファイルの確認と変更

物理ネットワークアダプターが共有タイプのHyper-V仮想スイッチとして使用されている場合や、ドメインネットワークとして識別されている場合など、Windows標準のGUIではネットワークプロファイルパブリック(Public)プライベート(Private)を切り替えする場所がなくなります(画面2、注:ドメインネットワーク(DomainAUthenticated)として識別されているのであればネットワークの識別は適切です)。Windows ServerのServer CoreはもともとGUIを提供しません。*1

 

002画面2 同じコンピューターでHyper-V仮想スイッチを作成する前(画面左)と作成した後(画面右)

 

*1 Windows Server 2019/2018以降はServer Coreアプリ互換性FoDをインストールすることで、[セキュリティが強化されたWindows Defenderファイアウォール](WF.msc)スナップインを含む一部の管理ツールを利用可能ですが、ネットワークプロファイルの確認や切り替えのためのGUIはありません。
現在のネットワークプロファイルにおけるネットワークの場所(Network Category)の識別と、ファイアウォールプロファイルの状態をコマンドラインで確認には、PowerShellのGet-NetConnectionProfileおよびGet-NetFirwewallProfileコマンドレット(↲ は Enter キーまたは改行位置、以下同じ*2)を利用できます(画面3)。
Get-NetConnectionProfile 
Get-NetFirewallProfile 

 

003

画面3 Get-NetConnectionProfileとGet-NetFirewallProfileで現在の状態を確認する

 ネットワークの場所(NeworkCategory)が適切でない場合は、Set-NetConnectionProfileコマンドレットを次のように実行することで適切なものに切り替えることが可能です(画面4)。-Nameパラメーターの他、-InterfaceAliasや-InterfaceIndexパラメーターでネットワーク接続を指定することもできます。

Set-NetConnectionProfile -Network "<ネットワーク名>" -NetworkCategory PublicまたはPrivateまたはDomainAuthenticated 

 

004

画面4 Set-NetConnectionProfileでネットワークの場所をパブリックからプライベートに切り替える

 

■ファイアウォールのルールが肥大化していないか

 Windows Defenderファイアウォールには既定のファイアウォールルールが定義済みとなっており、既定で有効になっているもの、Windows Serverのサーバーの役割や機能の有効化、WindowsやWindows Serverのリモート管理の設定やリモートデスクトップ接続の設定によって自動で有効化されるもの、サーバーアプリケーションやデスクトップアプリケーション、ストアアプリ(ユニバーサルWindowsプラットフォームアプリ、UWPアプリ)のインストールや使用によって自動またはユーザーの許可により追加されるものがあります。

 Windows Server 2019のインストール直後の状態で確認すると、デスクトップエクスペリエンスで104、Server Coreで55のファイアウォールルールが有効でした。Windows 10 Enterpriseバージョン20H2のインストール直後の状態で確認すると、202のファイアウォールルールが有効でした。

 ファイアウォールルールはレジストリに格納されるため、ルールが肥大化すると、レジストリハイブも肥大化します。大きすぎるレジストリハイブは、システムの応答停止やエラー、パフォーマンスの低下など、さまざまな問題を引き起こす可能性があります。*3

*3 レジストリ64ビット版Windows XP SP2およびWindows Server 2003 SP2からレジストリハイブの最大サイズは2GBになりました。しかし、2GBを超えた場合に再起動できなくなる問題があり、Windows 8およびWindows Server 2012以降については更新プログラムによって最大4GBまで拡張されました(Computer cannot be restarted if the registry hives are larger than 2 GB https://support.microsoft.com/help/2978366)。Windows 10およびWindows Server 2016以降については最初から4GB(4095MB)です。現在のロードされているレジストリハイブのサイズと最大サイズは、PowerShellでGet-WmiObject Win32_registryを実行して確認できます。32ビット版Windowsにはより小さな上限が設定されます。

 ルールの数に特に上限はなく、明確な基準を示すことはできませんが、異常な数のルール、あるいは同じ名称や似た名称のルールが大量に存在する場合は、早めに対処したほうがよいでしょう。ただし、Windowsに既定で用意されている定義済みのルールについては削除しないでください。

PowerShellで以下のコマンドラインを実行すると、現在、有効になっているファイアウォールルールの数を確認することができます。

(Get-NetFirewallRule | where {$_.Enabled -eq $true}).Count 

同じ名称のルールが重複して登録されている状況は、PowerShellで次のコマンドラインを実行することで、ルールの表示名でグループ化し、降順にソートして調査することができます。

Get-NetFirewallRule | Group-Object -Property DisplayName | Sort-Object -Property Count -Descending 

 次に実際のルールの肥大化の例と対処方法を示します。肥大化したルールを安易に削除することはせず、ルールの詳細な設定を確認し、削除による影響をよく検討してください。また、できるだけ現在のルールをバックアップしてから対処しましょう。次のコマンドラインを実行すると、現在のルール設定をファイル(.wfw)にエクスポートしてバックアップ、およびインポートして復元することができます。[セキュリティが強化されたWindows Defenderファイアウォール](WF.msc)スナップインでの[ポリシーのエクスポート]と[ポリシーのエクスポート]の操作と同じことをコマンドラインからすばやく実行する方法です。

Netsh advfirewall export <エクスポート先パス>¥ファイル名.wfw" 

Netsh advfirewall import <エクスポート先パス>¥ファイル名.wfw" 

 

・事例1

 Windows 10バージョン1809およびWindows Server 2019のHyper-Vホストやコンテナーホストでは、受信の規則に次のルールのペアが大量に登録されることを確認しています(画面5)。ルールの名前は完全に同一ではなく、GUID(XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)の部分はペアごとに異なります。

DNS Server Forward Rule - TCP - GUID - 0

DNS Server Forward Rule - UDP - GUID - 0

 

005

画面5 Windows 10バージョン1809やWindows Server 2019のHyper-Vホストに大量に登録されるDNS Server Forward Rule。削除しても次回起動時に再登録されるので問題ない

 

 この問題は、既定で作成されるDefault Switchという名前のHyper-V仮想スイッチが、ホストの起動のたびにリセットされることが原因と思われます。ルールの数が多くなっている場合は、以下のコマンドラインを実行して既に作成されているルールを削除し、コンピューターを再起動すると、新たなペアが自動的に登録されます。
Remove-NetFirewallRule -Displayname "DNS Server  Forward Rule -*" 
Restart-Computer 
 なお、重複して登録される問題が解決されるわけではないので、定期的にルールをクリーンアップするとよいでしょう。Windows 10およびWindows Serverのより新しいバージョンでは、次のルール名が次のペアに変更され、極端に重複登録されることはなくなったようです。Windows 10の機能更新プログラムによるアップグレードを繰り返していると、過去に自動登録され、現在は利用されていないルールとして旧名称のルールが残っていることがあるかもしれません。
HNS Container Networking - ICS DNS (TCP-In) - GUID - 0
HNS Container Networking - DNS (UDP-In) - GUID - 0

 

・事例2

 Mirantis Container Runtime(旧称、Docker Enterprise)のコンテナーホストでは受信の規則と送信の規則に、次の名前のルール(XXXXは数字)が大量に登録される場合があることを確認しています。これらのルールが存在しなくても、コンテナーのネットワーク機能に影響がないようなので、大量に登録されている場合は削除してもよいでしょう。
 Get-NetFirewallRule -Displayname "docker_*_in"  
 Get-NetFirewallRule -Displayname "docker_*_out"   

 Remove-NetFirewallRule -Displayname "docker_*_in"  
Remove-NetFirewallRule -Displayname "docker_*_out" 

 

・事例3

 Windows 10ではストアアプリ(UWPアプリ)のインストールや使用により、同じ名前のルールが重複して登録される場合があります。次の例は、Spotify MusicアプリとSkypeアプリのルールが重複して登録されている様子です。

 

006

画面6 重複登録されたSpotify MusicアプリとSkypeアプリのルール

 

 実は、このコンピューターではこれらのアプリを使用したことがありません。使用しないアプリの登録を削除しても何の問題もないでしょう。また、削除したとしても必要時に自動的に再登録されるはずです。
 Windows 10の機能更新プログラムによるアップグレードを繰り返していると、廃止やアンインストールなどで既に存在しないストアアプリのためのルールが残っている場合もあります。不要なストアアプリ用のルールは削除して問題ないでしょう。

 

・事例4

 リモートデスクトップセッションホストであるWindows Server 2016、Windows Server 2019、および仮想デスクトップインフラストラクチャ(VDI)のWindows 10仮想デスクトップでは、移動ユーザープロファイルやユーザープロファイルディスクの問題で、ファイアウォールルールが肥大化し、デスクトップの機能不全(スタートメニューが開かないなど)、パフォーマンスの劣化、サーバーのハングアップなどの症状を引き起こすことが知られています。該当する場合は、以下の対処方法に従ってください。

Windows Server 2016 および 2019 における Windows ファイアウォール規則の肥大化について
  https://jpwinsup.github.io/blog/2020/10/08/RemoteDesktopService/wnf-leak-issue-on-windows-server-2016-and-windows-server-2019/

 

※本ページは2022年6月22日現在の情報です。

 

■ ホワイトペーパーをダウンロードする

こちらのページの続きを含めた、全10テクニックをまとめたホワイトペーパーをご覧いただけます。以下のフォームよりお申込みください。

 

 

■ パフォーマンス低下をもたらすファイアウォールの設定を可視化

 山市氏がご紹介したテクニックをより簡単に自動化できる方法をご紹介します。

詳しくはこちらをご確認ください。
https://www2.say-tech.co.jp/special/ryo-yamaichi/say/tec-006

最新記事