NACL/セキュリティグループでRDP,ICMPを許可しています。RDPは通りますがPingは応答しません。どうすれば疎通できますか?

2022.04.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!AWS事業本部コンサルティング部のたかくに(@takakuni_)です。

タイトルの通り、「NACL/セキュリティグループでRDP,ICMPを許可しているがWindowsサーバーへのPingが通らない」事象の解決方法の1つを共有しようと思います。

結論

  • Windowsファイアウォールの初期設定では「PINGを許可しない設定」になっている。
  • Windowsファイアウォールの設定を確認して、PING通信の設定状況を確認してみる。
  • Windowsファイアウォールの無効化または、ICMP通信の許可を行うと通信できました。

発生条件

今回のPINGで疎通できなかった状況をもう少し深掘りしてみます。

構成は以下の通り、パブリックサブネット上にWindowsサーバーを配置して疎通確認を行なっていました。

Windowsインスタンスに対してRDP接続はできるが、pingが通らなかったため疑問に思い調べてみました。

各種AWS基盤の設定は以下の通りです。

ルートテーブル

default(Windowsインスタンスのサブネットに関連付け済み)

送信先 ターゲット ステータス
VPC CIDR local アクティブ
0.0.0.0/0 Internet Gateway アクティブ

セキュリティグループ

win-ping(インバウンドルール)

タイプ プロトコル ポート範囲 ソース
RDP TCP 3389 MyIP
すべてのICMP ICMP すべて MyIP

win-ping(アウトバウンドルール)

タイプ プロトコル ポート範囲 ソース
すべてのトラフィック すべて すべて 0.0.0.0/0

Network ACL

default(インバウンドルール)

ルール番号 タイプ プロトコル ポート範囲 送信元 許可/拒否
100 すべてのトラフィック すべて すべて 0.0.0.0/0 Allow
* すべてのトラフィック すべて すべて 0.0.0.0/0 Deny

default(アウトバウンドルール)

ルール番号 タイプ プロトコル ポート範囲 送信元 許可/拒否
100 すべてのトラフィック すべて すべて 0.0.0.0/0 Allow
* すべてのトラフィック すべて すべて 0.0.0.0/0 Deny

疎通確認(RDP)

まずは、エラーの切り分けのためWindowsインスタンスへRDP接続できるかどうかを検証します。

RDP接続できた場合、ルートテーブル、Network ACLの設定が問題ないことを確認できます。

対象のWindowsインスタンスを選択し「接続」をクリックします。

「RDPファイルのダウンロード」、「キーペアからパスワードの復号」を行います。

RDPは問題なく接続できました。

疎通確認(PING)

本題に入ります。今回作成したインスタンスに向けてpingを送信してみます。

※192.0.2.10をWindowsインスタンスのIPアドレスとします。

想定通り、Windows Server 2019の初期設定では、PINGは通信できないことが確認できました。

ping -c 5 ec2-192-0-2-10.ap-northeast-1.compute.amazonaws.com
PING ec2-192-0-2-10.ap-northeast-1.compute.amazonaws.com (192.0.2.10): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3

--- ec2-192-0-2-10.ap-northeast-1.compute.amazonaws.com ping statistics ---
5 packets transmitted, 0 packets received, 100.0% packet loss

PING許可ルール追加

今回は、Windows FirewallのPINGを許可する設定を行いたいと思います。

[ホーム]から[Server Manager]を開きます。

[Tools]から[Windows Defender Firewall with Advanced Security]を開きます。

「Inbound Rules」 - 「New Rule」を選択します。

ICMPに対する制御を行うため「Custom」を選択します。

「All programs」を選択します。

「Protocol Type」から「ICMPv4」を選択します。

IPアドレスを指定する画面ですが、特段用件がなければ「Any IP Address」で進めます。

「Allow the connection」を選択します。

今回は、パブリックIPを使用して通信を行うため「Public」にもチェックボックスを入れます。

任意のルール名を入れれば完了です。

takakuni@~ % ping -c 5 ec2-192-0-2-10.ap-northeast-1.compute.amazonaws.com
PING ec2-192-0-2-10.ap-northeast-1.compute.amazonaws.com (192.0.2.10): 56 data bytes
64 bytes from 192.0.2.10: icmp_seq=0 ttl=108 time=17.703 ms
64 bytes from 192.0.2.10: icmp_seq=1 ttl=108 time=11.229 ms
64 bytes from 192.0.2.10: icmp_seq=2 ttl=108 time=11.737 ms
64 bytes from 192.0.2.10: icmp_seq=3 ttl=108 time=11.739 ms
64 bytes from 192.0.2.10: icmp_seq=4 ttl=108 time=18.158 ms

--- ec2-192-0-2-10.ap-northeast-1.compute.amazonaws.com ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss

PING許可ルール追加(CLIベース)

以下のサイトがとても参考になるためオススメです。

日本語のGUIも参考になるため言語を日本語設定している場合はこちらも合わせてご確認ください。

VPC Flowlogで検知できるのか

結論、VPC FlowlogではWindowsファイアーウォールの状況は検知できません。

VPC Flowlogは、ネットワーク ACLとセキュリティグループの結果でログを記録するためログ上では、今回のケースだと「ACCEPT」と判定されてしまいます。

セキュリティグループとネットワーク ACL ルール

そのため、Windowsファイアーウォールは無効にして、ネットワーク ACL、セキュリティグループ、VPC Flowlogで管理する(AWS基盤に寄せる)方法が個人的にはオススメです。

まとめ

以上、「NACL/セキュリティグループでRDP,ICMPを許可しているがWindowsサーバーへのPingが通らない」事象の解決方法でした。

AWSを使用する上で、NACL/セキュリティグループに目が行きがちですが、OSも把握する必要があると思える機会でした。

この記事がどなたかの参考になれば幸いです。

以上、AWS事業本部コンサルティング部のたかくに(@takakuni_)でした!