
Windows ファイアウォールのルールを自動的に作成するPowerShellスクリプト
![代替テキスト][corporate firewall]
[![アルファリリース][badge status]][alpha]
PowerShellを使用したWindowsファイアウォールの完全自動化ソリューション
Windows Firewall RulesetはWindowsファイアウォールを自動的に設定し、対象システムおよびそのシステムにインストールされたソフトウェアに特化した制限的なファイアウォールルールを適用します。
このプロジェクトのステータスはまだアルファです。詳細については、上記の「status」バッジをクリックしてください。
このプロジェクトは、以下に示すように、ファイアウォールルールとファイアウォールフレームワークの2つの主要部分から構成されています。
Windowsファイアウォールルールは、以下に従って個別のPowerShellスクリプトに分類されています。
例えば以下のようなものです。
ファイアウォールフレームワークは、対象システムに特化したファイアウォールを構築および展開するための環境情報を収集するために使用される、いくつかのPowerShellモジュール、スクリプト、およびドキュメントから構成されています。例えば次のようなものです。
したがって、このリポジトリは、必要に応じてファイアウォールを簡単に拡張し、より多くのルールや機能を追加するための良い出発点となります。
現在、800以上のファイアウォールルール、100以上の関数を持つ10以上のモジュール、いくつかのスクリプト、および有用なドキュメントが多数含まれています。
必要なルールを対話的に選択して展開することも、プロセスを自動化して必要なすべてのルールと設定をファイアウォールに展開することもできます。
[![VSCodeで管理][badge vscode]][vscode] [![PowerShell][badge language]][powershell]
詳細なファイアウォール構成は時間のかかるプロセスであり、多くのトラブルシューティングを必要とし、変更にはテストとセキュリティ監査が必要であり、数百または数千のリモートコンピュータにファイアウォールを展開する必要がある場合はさらに悪化します。例えば、すべてのコンピュータが同じソフトウェアや制限要件を持っているわけではありません。
コントロールパネルのファイアウォールルールとは異なり、これらのルールはGPOファイアウォール(ローカルグループポリシー)に読み込まれます。つまり、システム設定の変更や、インストールプロセスの一部としてルールをインストールするランダムなプログラムは、明示的に例外を作成しない限り、ファイアウォールに影響を与えません。
プログラムとサービスに基づくルールでは、指定された実行可能ファイルのデジタル署名がチェックされ、デジタル署名がない場合はVirusTotalでスキャンされます。セキュリティ上の理由から、この検証に失敗した場合、ルールは作成されず、ファイアウォールに読み込まれません(強制可能)。
デフォルトの送信は「ブロック」ですが、ネットワークトラフィックを許可するルールがある場合を除きます。ほとんどのファイアウォールでは、すべての可能なプログラムやサービスのルールを管理しない限り、これは不可能です。このルールコレクションのおかげで、デフォルトの送信をブロックに設定するために追加の作業はほとんどまたはまったく必要ありません。
通常のシナリオとは異なり、どのルールが効果を失ったか、または冗長になったかを把握できます。例えば、アンインストールされたプログラム、存在しなくなったシステムサービス、Windowsアップデート後に名前が変更された実行ファイルなどが原因です。
定義済みのWindowsファイアウォールルールとは異なり、これらのルールはより制限的です。例えば、明示的なユーザーアカウントに結び付けられ、特定のポート、ネットワークインターフェース、特定の実行ファイル、サービスなどに適用され、これらすべてが対象システムから自動的に学習されます。
ルールや属性(ポート、アドレスなど)の更新、フィルタリング、検索は、これらのルールがスクリプト内にあるためはるかに簡単です。regex、[multicursor][multicursor]、または CTRL + F などのエディタツールを使用してルールに一括操作を実行できます。ファイアウォールUIではユーザーインターフェースの制限によりこれを行うことはできません。
コードのかなりの部分は、対象システムとユーザーに特化したファイアウォールを自動的に構築および定義するソリューションを提供することに専念しており、手動で何かを行う必要性を最小限に抑え、貴重な管理時間を節約します。
このプロジェクト Windows Firewall Ruleset は MIT ライセンスの下でライセンスされています。
一部のスクリプト、ファイル、またはモジュールは MIT ライセンスではないか、独自の著作権者を持つ場合があります。そのため、ライセンスと著作権表示は 「ファイルごと」 に維持されています。
[![Windows][badge system]][windows]
次の表は、Windows Firewall Ruleset がテストされたオペレーティングシステムを示しています。
| OS | エディション | バージョン | アーキテクチャ |
|---|---|---|---|
| Windows 10 | Pro | 1809 - 22H2 | x64 |
| Windows 10 | Pro Education | 20H2 | x64 |
| Windows 10 | Enterprise | 1809 - 20H2 | x64 |
| Windows 10 | Education | 20H2 - 22H2 | x64 |
| Windows 11 | Pro Education | 21H2 | x64 |
| Windows 11 | Pro | 22H2 - 23H2 | x64 |
| Windows 11 | Enterprise | 22H2 | x64 |
| Windows Server 2019 | Essentials | 1809 | x64 |
| Windows Server 2019 | Standard | 1809 | x64 |
| Windows Server 2019 | Datacenter | 1809 | x64 |
| Windows Server 2022 | Standard | 21H2 | x64 |
| Windows Server 2022 | Datacenter | 21H2 | x64 |
sigcheck64.exe(推奨)[sigcheckをダウンロード][sigcheck]すべてのWindows 10.0システム(メジャー10、マイナー0)以上で、Homeエディションを除くすべてがサポートされていますが、上記の表にリストされたエディションのみがテストされています。
「バージョン」列はテストされたリリースを示していますが、最新のOSビルドのみが引き続きテストされています。
テストされていないがサポートされているその他のシステムと機能のリストは、将来にあります。
PowerShell Core はWindowsに組み込まれていません。別途インストールするか、オペレーティングシステムの一部であるWindows PowerShellを使用する必要があります。
.NET Framework は、PowerShell CoreではなくWindows PowerShell(デスクトップエディション)を使用する場合、最低バージョン4.5が必要です。
Windows 10には最低.NET 4.6(.NET 4.5を含む)が付属し、Windows 11には最低.NET 4.8が付属しています。
sigcheck64.exe(または32ビット版 sigcheck.exe)はデジタル署名検証ツールであり、Microsoftサイトからダウンロードし、C:\toolsディレクトリまたは%PATH%環境変数に配置する必要があります。
Windows Firewall Ruleset はこれを使用して、デジタル署名されていない実行可能ファイルごとに、ファイアウォールルールが作成される前にVirusTotalでハッシュベースのオンラインマルウェア分析を実行します。
これは推奨事項にすぎません。PATHに sigcheck64.exe がない場合はダウンロードするように求められ、拒否した場合はマルウェア分析は行われません。
この機能を使用することにより、[VirusTotal利用規約][virustotal terms]、[VirusTotalプライバシーポリシー][virustotal privacy]、および[Sysinternalsソフトウェアライセンス条項][sysinternals terms]に同意したものとみなされます。
更新をチェックしたり、ブランチを簡単に切り替えたり、コードをコントリビュートしたりするために、gitを用意するとよいでしょう。
VS Codeは、コードをナビゲートしたり、自分用またはコントリビューションのためにスクリプトを編集したりするための推奨エディターです。
VSCodeを入手した場合、コードナビゲーションとPowerShell言語機能のためにPowerShell拡張機能も必要です。
VSCodeでコードをナビゲートおよび編集するには、PSScriptAnalyzer を強くお勧めします。そうしないと、リポジトリのさまざまな設定により、編集エクスペリエンスが異常に動作する可能性があります。
ハードウェア要件はありませんが、コードの記述とデバッグを行う予定がある場合は、最低8GBのメモリとSSDドライブをお勧めします。個人のファイアウォールにルールを展開するだけの場合は、それより少なくても問題なく動作します。
現時点では、このファイアウォールは最新のWindowsデスクトップ/サーバー向けにテストおよび設計されており、動作することが確認されています。古いシステムで使用するには追加の作業が必要です。
テストは64ビットWindowsで行われています。ルールのごく一部は32ビットシステムでは機能せず、調整が必要です。32ビットシステムの完全な機能は現在開発中です。
現時点では、おそらく構成に関連しないいくつかのルールを除き、32ビットシステムでもルールを問題なく読み込むことができます。
Windows 7やWindows Server 2008などの古いWindowsシステムでこのファイアウォールを使用する方法については、レガシーサポートを参照してください。
以下は、ファイアウォールを展開する前に初めてのユーザーが知っておくべき簡単な警告と注意事項です。
一部のプログラムでインターネット接続が失われる可能性があり、まれにインターネット接続が完全に失われる可能性があります。その場合は、GPOで送信ネットワークを一時的に許可するか、
.\Scripts\Reset-Firewall.ps1 -Remoting -Service を実行してGPOファイアウォールをシステムデフォルトにリセットし、すべてのルールを削除し、WinRMと変更されたサービスをシステムデフォルトに戻すことができます。
(その後、PowerShellの再起動が必要です)
docs ディレクトリ内に ResetFirewall.md があり、何らかの理由でスクリプトを実行できない場合、またはスクリプトが問題を解決しない場合に、手動でリセットする方法が説明されています。
このルールセットのルールとまったく同じグループ名を持つルールがGPOにない限り、既存のルールは削除されません。ただし、これは Scripts\Reset-Firewall.ps1 には適用されません。これにより、GPOルールが完全にクリアされ、コントロールパネルのルールのみが残ります。
完全に確実にしたい場合は、エクスポート/インポートルールで説明されているように、GPOルールをエクスポートしてください。