WindowsファイアウォールのPing応答(ICMP)の許可を有効にするコマンドとバッチファイル
目次
WindowsファイアウォールでPING(ICMPプロトコル)の応答を許可されていないPCに許可する規則を有効にするコマンドを見つけたのでメモ。
netsh advfirewallというコマンドを使えばファイアウォール関連の設定ができるようです。
何台もGUIで設定するのは面倒
例えば、IPv4のアドレスに対してドメインネットワークからのPING応答を許可するとしたら、GUIでは [コントロールパネル]-[Windowsファイアウォール]-[詳細設定]-[セキュリティが強化されたWindowsファイアウォール]-[受信の規則] を開き、
ドメイン用の[ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)]のプロパティを開いて[有効]にチェックを入れます。
この作業が何台も何度もあるとちょっと面倒になってきます。そこでファイアウォール関連の netsh advfirewallコマンド をバッチファイルで保存しておけばクリック一発で設定完了です。
netsh advfirewall コマンド で有効化
コマンドプロンプトは管理者として実行しないとエラーになります。
ICMPv4 エコー要求を許可するルールを有効にするコマンド
ドメインネットワークからIPv4のアドレスからのICMP受信を許可するルールを有効にするとしたら以下となります。
netsh advfirewall firewall set rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" profile=domain new enable=yes
ICMPv6 エコー要求を許可するルールを有効にするコマンド
IPv6の場合も同様に以下となります。
netsh advfirewall firewall set rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv6 受信)" profile=domain new enable=yes
逆に無効にしたいとき
無効にする場合は enable=yes の部分を enable=no にすればOKです。
規則が見つかりませんとなるとき
上記のコマンドは既存のルールを更新するので set という命令を使っています(他にルール追加の add 、削除の delete 、確認するための show などもある)が、ルールの名前の指定が name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" と正しくても、profile=** の部分の指定が既存のルールと一致していなと 「指定された条件に一致する規則はありません。」 とエラーになります。
エラーにならない例(プロファイルの指定を変更したいとき)
例えば、既存のルールが ドメイン(domain) のみだけど、 ドメイン(domain) と プライベート(private) を許可するルールを有効に変更したいときは以下のようにします。
netsh advfirewall firewall set rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" profile=domain new enable=yes profile=domain,private
new より後ろに変更後の profile を追記します。
更に、既存のルールが プライベート(private) と パブリック(public) だけど、 パブリック(public) だけにしてルールを無効に変更したいときは以下のようにします。
netsh advfirewall firewall set rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" profile=private,public new enable=no profile=public
これで正常に変更できるはずです。
状態を確認するコマンド
ちなみに有効か無効かを確認するコマンドは以下となります。
「有効:」の行がはいになっていれば有効で、いいえの場合は無効になっています。
netsh advfirewall firewall show rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)"
設定を変更するときはsetですが、確認するときはshowを使います。上記は、ドメイン、プライベート、パブリックなど、すべての状態を表示しますが、ドメインのみの規則を確認したい場合は以下のようにprofile=domainを追加します。
netsh advfirewall firewall show rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" profile=domain
バッチファイルのソース
上記のコマンドを使い、有効か無効かを判別して無効になっている場合のみ、有効にするといったバッチファイルの例が以下となります。
@echo off
echo Windowsファイアウォールの"ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)"が有効になっているか確認しています。
netsh advfirewall firewall show rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" profile=domain | findstr "有効.*はい$"
if %ERRORLEVEL% equ 0 ( echo IPv4のエコー要求は有効になっています。 ) else ( echo IPv4のエコー要求は有効になっていませんでした。有効にしています。 netsh advfirewall firewall set rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv4 受信)" profile=domain new enable=yes )
echo. echo Windowsファイアウォールの"ファイルとプリンターの共有 (エコー要求 - ICMPv6 受信)"が有効になっているか確認しています。
netsh advfirewall firewall show rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv6 受信)" profile=domain | findstr "有効.*はい$"
if %ERRORLEVEL% equ 0 ( echo IPv6のエコー要求は有効になっています。 ) else ( echo IPv6のエコー要求は有効になっていませんでした。有効にしています。 netsh advfirewall firewall set rule name="ファイルとプリンターの共有 (エコー要求 - ICMPv6 受信)" profile=domain new enable=yes )
pause
コマンドの参考
実行後
コマンドおよびバッチファイル実行後は以下のとおり、無効だったドメインのプロファイルが有効になりました。