PowerShellを使ってファイアウォールのプロファイルや受信規則を設定する方法
本エントリーの目次
PowerShellを使って、ファイアウォールのプロファイルや受信規則を設定したい!
以前にこのブログでは、GPOを使ってWindowsのファイアウォールの規則を設定したり、有効化を強制する方法について、ご紹介しています。
参考:GPOでWindowsのファイアウォールを設定したり、有効化を強制する方法
Active Directoryを使用しているドメイン環境にて、多数のPCに対して同様の設定を行う場合には、GPOを使った設定を行う方法がおすすめです。
しかし、数台のPCに対してのみ同様の設定を行いたいケースや、WorkGroup環境(非AD環境)のPCに対して設定を行う場合など、PowerShellを使ってファイアウォールの設定を行いたいこともあるでしょう。
そこで今回は、PowerShellを使ってファイアウォールを有効化・無効化したり、プロファイルや受信規則の設定を行う方法をご紹介します!
はじめに
Windows OSでは、Windowsの標準機能のファイアウォール機能である『Windows Defender ファイアウォール』や、『セキュリティが強化されたWindowsファイアウォール』の他に、サードパーティー※が作成しているウイルス対策ソフトウェアに付属するファイアウォールも使用可能です。
※シマンテックさんやカスペルスキーさんなど。
しかし本エントリーでご紹介しているのは、Windowsの標準機能のファイアウォールの設定方法であり、サードパーティー製品のファイアウォール機能の設定はできません。
また、ご紹介している設定方法は、Windows 10 1909(PowerShellのバージョン:5.1.18362.145) Professionalの環境にて、正常に動作することを確認しています。
ですが以前のバージョンのWindowsでは、ファイアウォールの規則名など一部の項目について異なっている、あるいは使用できないコマンドレットをご紹介しているかもしれません。
あらかじめご了承ください。
PowerShellを使って、ファイアウォールを有効化したり無効化する方法
Windows 10に標準搭載されているファイアウォール機能である『Windows Defender ファイアウォール』では、プライベート、パブリック、ドメインなどのプロファイルが定義されています。
そしてファイアウォール機能の有効化と無効化設定については、プロファイルごとに設定を行う仕組みです。
PowerShellを使って、ファイアウォールの有効化や無効化を設定する場合は、PowerShellの『Set-NetFirewallProfile』コマンドレットを使用します。
たとえば『プライベート』プロファイルのファイアウォールを無効化したいときは、以下コマンドを実行してください。
1 2 3 | Set-NetFirewallProfile -Profile Private -Enabled false #または Set-NetFirewallProfile -Name Private -Enabled false |
複数のプロファイルに対して同時に設定することも可能であり、『プライベート』と『パブリック』プロファイルのファイアウォールを無効化したいときは、以下コマンドを実行します。
1 2 3 | Set-NetFirewallProfile -Profile Private,Public -Enabled false #または Set-NetFirewallProfile -Name Private,Public -Enabled false |
また『プライベート』プロファイルのファイアウォールを有効化したいときは、『-Enabled』パラメーターに『true』を指定してください。
1 2 3 | Set-NetFirewallProfile -Profile Private -Enabled true #または Set-NetFirewallProfile -Name Private -Enabled true |
すべてのプロファイルのファイアウォールを対象にして設定を行う場合には、プロファイルを指定せずにコマンドを実行すればOKです。
1 2 3 4 | #すべてのプロファイルのファイアウォールを無効化する Set-NetFirewallProfile -Enabled false #すべてのプロファイルのファイアウォールを有効化する Set-NetFirewallProfile -Enabled true |
ファイアウォールのプロファイル設定を変更する方法
ファイアウォールのプロファイル設定の変更も、『Set-NetFirewallProfile』コマンドレットを使用することで可能です。
これは、『Set-NetFirewallProfile -Profile <変更対象のプロファイル名> <変更内容>』という形式でコマンドを実行します。
たとえば『プライベート』プロファイルの『破棄されたパケットをログに記録する』を、『はい』に変更したい場合には、以下コマンドを実行してください。
1 | Set-NetFirewallProfile -Profile Private -LogBlocked True |
その他設定変更に使用可能な各種パラメーターについては、MicrosoftさんのDocsの記載内容を参照ください。
参考:Microsoft – Docs Set-NetFirewallProfile
ファイアウォールのプロファイル設定を取得・表示する方法
ファイアウォールの各プロファイルに設定されている設定情報を取得・表示することも、もちろん可能です。
『プライベート』プロファイルの設定情報を取得したい場合には、『Get-NetFirewallProfile -Profile private』というコマンドを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | PS C:\> Get-NetFirewallProfile -Profile private Name : Private Enabled : True DefaultInboundAction : NotConfigured DefaultOutboundAction : NotConfigured 中略 LogMaxSizeKilobytes : 4096 LogAllowed : False LogBlocked : False LogIgnored : NotConfigured DisabledInterfaceAliases : {NotConfigured} PS C:\> |
また、すべてのプロファイルの設定情報を一括で取得したい場合には、プロファイル名を指定せずにコマンドを実行してください。
1 | Get-NetFirewallProfile |
ただし全プロファイルの設定情報を一括取得した場合には、取得される情報が多く、少し見づらい結果となります。
そのため、『Format-Table』コマンドレットを併用し、結果情報を一覧表形式で取得する方法を利用すると良いでしょう。
1 | Get-NetFirewallProfile | Format-Table |
さらに各プロファイルの特定の設定情報のみを一覧表形式で取得したいときは、対象の設定情報を指定してコマンドを実行してください。(下記実行例では『Name』と『Enabled』、『LogAllowed』、『LogBlocked』の情報を指定して取得。)
1 2 3 4 5 6 7 8 9 10 | PS C:\> Get-NetFirewallProfile | Format-Table -Property Name,Enabled,LogAllowed,LogBlocked Name Enabled LogAllowed LogBlocked ---- ------- ---------- ---------- Domain False False False Private True False True Public True False False PS C:\> |
ファイアウォールの規則(『受信の規則』・『送信の規則』)を追加・編集(変更)・削除する方法
『受信の規則』や『送信の規則』など、ファイアウォールの規則を追加・編集(変更)・削除、また有効化したり無効化したい場合には、以下のような方法で設定を行います。
ファイアウォールの規則を追加する方法
PowerShellを使ってファイアウォールの規則を追加する場合には、『受信の規則』と『送信の規則』のどちらも『New-NetFirewallRule』コマンドレットを使用します。
具体的な使用方法については、以下実行例を参考にすると良いでしょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #対象のプロファイルが『パブリック』、プロトコルが『TCP』、ローカルポートが『443』の通信を『許可』する #『Allow-Inbound-TCP443』という名称の『受信の規則』を作成する New-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" -Profile Public -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow #対象のプロファイルが『プライベート』と『パブリック』、プロトコルが『TCP』、ローカルポートが『443』の通信を『許可』する #『Allow-Inbound-TCP443』という名称の『受信の規則』を作成する New-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" -Profile Private,Public -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow #すべてのプロファイルを対象とし、プロトコルが『TCP』、ローカルポートが『443』の通信を『許可』する #『Allow-Inbound-TCP443』という名称の『受信の規則』を作成する New-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow #説明に『TCP443のインバウンド通信を許可』、グループに『testグループ』と設定し、 #すべてのプロファイルを対象とした、プロトコルが『TCP』、ローカルポートが『443』の通信を『許可』する #『Allow-Inbound-TCP443』という名称の『受信の規則』を作成する New-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow -Description "TCP443のインバウンド通信を許可" -Group "testグループ" #すべてのプロファイルを対象とし、プロトコルが『TCP』、ローカルポートが『443』の通信を『許可』する #『Allow-Inbound-TCP443』という名称の『受信の規則』を、『無効』(有効にチェックが入っていない)状態で作成する New-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow -Enabled False #すべてのプロファイルを対象とし、プロトコルが『TCP』、ローカルポートが『80』および『443』の通信を『ブロック』する #『Block-Inbound-TCP80and443』という名称の『受信の規則』を作成する New-NetFirewallRule -DisplayName "Block-Inbound-TCP80and443" -Direction Inbound -Protocol TCP -LocalPort 80,443 -Action Block |
尚、ローカルポートの設定には、以下のようなキーワードを設定可能です。
- すべてのポート:-LocalPort Any
- RPC 動的ポート:-LocalPort RPC
- RPC エンドポイントマッパー:-LocalPort RPCEPMap
- IPHTTPS:-LocalPort IPHTTPSIN
ファイアウォールの規則を編集(変更)する方法
ファイアウォールの規則を編集(変更)する際は、『Set-NetFirewallRule -DisplayName <変更対象の規則の名前> <変更内容>』という形式でコマンドを実行してください。
たとえば『Allow-WebAccess』という名称の規則のローカルポートの設定を、『80』および『443』に変更するケースでは、以下コマンドを実行します。
1 | Set-NetFirewallRule -DisplayName "Allow-WebAccess" -LocalPort 80,443 |
また以下コマンドを実行することで、『Allow-Inbound-TCP443』という名称の規則のリモートアドレスの設定が、『192.168.1.0/24』に変更されます。
1 | Set-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" -RemoteAddress "192.168.1.0/24" |
その他設定変更に使用可能な各種パラメーターについては、MicrosoftさんのDocsの記載内容を参照ください。
参考:Microsoft – Docs Set-NetFirewallRule
ファイアウォールの規則を削除する方法
不要になったファイアウォールの規則は、『Remove-NetFirewallRule』コマンドレットを使って削除しましょう。
1 2 3 4 5 | #『Allow-Inbound-TCP443』という名称が設定されている規則を削除する Remove-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" #『testグループ』というグループが設定されている規則を削除する Remove-NetFirewallRule -Group "testグループ" |
尚、『Remove-NetFirewallRule』コマンドレットを使った削除操作では、『-DisplayName』パラメーターに指定した値と一致する名前を持つ規則が削除されます。
また、『-Group』パラメーターに指定したグループが設定されている規則が削除されます。
条件に合致する規則が複数あった場合には、複数の規則が削除されてしまうため、実行する際はご注意ください。
ファイアウォールの規則の有効化と無効化の設定方法
ファイアウォールの規則を有効化したり無効化したいときは、『Enable-NetFirewallRule』や『Disable-NetFirewallRule』コマンドレットを使用します。
具体的な設定方法については、以下実行例を参考になさってください。
1 2 3 4 5 6 7 8 9 10 11 12 | #『Allow-Inbound-TCP443』という名称の規則を有効化する Enable-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" #『Allow-Inbound-TCP443』という名称の規則を無効化する Disable-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" #『testグループ』というグループの規則を有効化する Enable-NetFirewallRule -Group "testグループ" #『testグループ』というグループの規則を無効化する Disable-NetFirewallRule -Group "testグループ" |
『Enable-NetFirewallRule』と『Disable-NetFirewallRule』コマンドレットでは、『Remove-NetFirewallRule』コマンドレットと同じように、条件に合致する規則が複数あった場合には、複数の規則に対して変更が適用されます。
ファイアウォールの規則の設定情報を取得する方法
特定のファイアウォールの規則の設定情報を取得したいときは、『Get-NetFirewallRule -DisplayName <取得対象の規則の名前>』や『Get-NetFirewallRule -Group <取得対象の規則のグループ名称>』という形式のコマンドを実行します。
1 2 3 4 5 | #『Allow-Inbound-TCP443』という名前の規則の設定情報を取得する Get-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" #『testグループ』というグループの規則の設定情報を取得する Get-NetFirewallRule -Group "testグループ" |
また詳細な情報を取得したいときは、『Format-List』コマンドレットを併用し、以下のようなコマンドを実行してください。
1 | Get-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" | Format-List -Property * |
ファイアウォールの規則に設定されているポートフィルターやアドレスフィルターの情報を取得する方法
実は、先ほど紹介した『Get-NetFirewallRule』コマンドレットの実行例では、GUI上の『プロトコルおよびポート』タブや『スコープ』タブで設定・確認できる設定情報を取得できません。
これら、ファイアウォールの規則のフィルター設定についての情報を取得したい場合には、以下のようなコマンドを実行する必要があります。(以下実行例では、『Allow-Inbound-TCP443』という名称の規則のフィルター設定を取得。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #ポートフィルターの設定情報を取得する Get-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" | Get-NetFirewallPortFilter #アドレスフィルターの設定情報を取得する Get-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" | Get-NetFirewallAddressFilter #アプリケーションフィルターの設定情報を取得する Get-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" | Get-NetFirewallApplicationFilter #インターフェースフィルターの設定情報を取得する Get-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" | Get-NetFirewallInterfaceFilter #インターフェースタイプフィルターの設定情報を取得する Get-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" | Get-NetFirewallInterfaceTypeFilter #セキュリティフィルターの設定情報を取得する Get-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" | Get-NetFirewallSecurityFilter #サービスフィルターの設定情報を取得する Get-NetFirewallRule -DisplayName "Allow-Inbound-TCP443" | Get-NetFirewallServiceFilter |
ファイアウォールの規則の一覧情報を取得する方法
現在設定されているファイアウォールの規則の一覧情報を取得する場合には、『Get-NetFirewallRule』コマンドレットを規則の名前を指定せずに実行します。
ただしこのコマンドレットを単体で実行した場合は結果が見づらいため、『Format-Table』コマンドレットの併用をおすすめします。
また併せて『-Direction』パラメーターを使って『受信』/『送信』の片方を指定し、『Enabled』と『Action』でソートした結果を取得することで、より見やすい結果表示となることでしょう。
1 2 3 4 5 6 7 8 | #現在設定されているファイアウォールの規則について、『DisplayName』と『Enabled』、 #『Profile』、『Direction』、『Action』、『Group』のみを一覧表形式で取得する Get-NetFirewallRule | Format-Table -Property DisplayName,Enabled,Profile,Direction,Action,Group #現在設定されているファイアウォールの『受信の規則』について、『DisplayName』と『Enabled』、 #『Profile』、『Direction』、『Action』、『Group』のみを『Enabled』と『Action』でソートし、一覧表形式で取得する Get-NetFirewallRule -Direction Inbound | Sort-Object -Property Enabled,Action | Format-Table -Property DisplayName,Enabled,Profile,Direction,Action,Group |
あらかじめ定義されているファイアウォールの設定について
初期設定状態のWindowsでは、あらかじめ多数のファイアウォールの規則が定義されています。
これら規則の設定変更や有効化、削除については、ファイアウォールの規則(『受信の規則』・『送信の規則』)を追加・編集(変更)・削除する方法でご紹介している設定方法を使うことで、対応可能です。
たとえば、グループポリシーのリモート更新を設定する際は、あらかじめ定義されている以下ファイアウォール規則の有効化が必要です。
- Windows Management Instrumentation (WMI 受信)
- スケジュールされたリモート タスク管理 (RPC)
- スケジュールされたリモート タスク管理 (RPC-EPMAP)
参考:グループポリシーをただちに適用する方法や更新間隔の設定方法、リモート更新する方法
上記規則をPowerShellを使って有効化するケースでは、以下コマンドを実行すればOKです。
1 2 3 | Enable-NetFirewallRule -DisplayName "Windows Management Instrumentation (WMI 受信)" Enable-NetFirewallRule -DisplayName "スケジュールされたリモート タスク管理 (RPC)" Enable-NetFirewallRule -DisplayName "スケジュールされたリモート タスク管理 (RPC-EPMAP)" |
以上、参考になさってくださーい!