【入門編】 ネットワークACL(NACL)のステートレス挙動とエフェメラルポートの双方向許可要件 – クラウドインフラと仮想化ネットワーク実践ガイド

「なぜか通信が繋がらない!」を解決する:NACLの「ステートレス」という性格とエフェメラルポートの秘密

クラウドインフラの世界に足を踏み入れたばかりの皆さん、こんにちは!AWSのVPCを触り始めると、必ずと言っていいほど直面するのが「セキュリティ」の壁ですよね。「セキュリティグループ(SG)は設定したのに、なぜか通信が通らない……」そんな経験はありませんか?

実はその犯人、NACL(Network ACL)かもしれません。今日は、多くのエンジニアが一度は頭を抱える「NACLのステートレスな性格」と「エフェメラルポート」について、郵便局の配達員さんを例にして紐解いていきましょう。

—

1. セキュリティグループとNACLは「ガードマン」の役割が違う

まずイメージしてください。皆さんのVPCという「マンション」には、2種類のガードマンがいます。

  • セキュリティグループ(SG): 玄関のドアにいるガードマン。「お名前は?」「招待状は持っていますか?」と、個々の部屋の入り口で厳しくチェックしてくれます。しかも、彼らは非常に優秀で「さっき入っていった人だから、帰りはチェックなしで通してあげよう」という記憶力(ステートフル)を持っています。
  • NACL: マンションの入り口(サブネットの境界)にいる門番です。彼らは超絶記憶喪失(ステートレス)です。行き(リクエスト)と帰り(レスポンス)を全く別のものとして扱います。

この「記憶がない」という特性が、今回のトラブルの根源なんです。

—

2. なぜ「エフェメラルポート」の許可が必要なのか?

あなたがWebサイトにアクセスするとき、通信は以下のように進みます。

1. あなたがブラウザを開くと、あなたのPCから「Webページを見せて!」というお手紙が出発します。
2. この時、送り主のPCは、返事を受け取るための「戻り先」として、自分自身の中にランダムな番号の引き出し(ポート)を割り当てます。これがエフェメラルポート(一時的なポート)です。
3. Webサーバーは「はい、これだよ」と、指定されたその引き出し宛に返事を送り返します。

NACLが起こす「悲劇」

ここで門番(NACL)の登場です。門番は「行き」の通信を許可しても、その通信に対する「帰り」の通信が来たとき、「誰から頼まれた通信かなんて知らないよ!とりあえず入ってくるな!」と返事のパケットを門前払いしてしまうのです。

だからこそ、NACLには「1024番から65535番までの広い範囲のポートを使って、外からの返事を受け取れるようにしておきますね」という許可ルールを、わざわざ書いてあげる必要があるんです。

—

3. 実践!NACLの正しい設定ルール

では、具体的にどう設定すべきかを見ていきましょう。
プライベートサブネットからインターネット上のWebサーバーへアクセスする場合、NACLには以下のようなルールを「インバウンド(帰り)」と「アウトバウンド(行き)」の両方に記述する必要があります。

アウトバウンドルール(外への出発)

まずは目的地へのお手紙を送り出します。

  • ルール番号: 100
  • タイプ: HTTP (または HTTPS)
  • プロトコル: TCP
  • ポート範囲: 80 (または 443)
  • 送信先: 0.0.0.0/0
  • 許可/拒否: 許可

インバウンドルール(返事の受け取り)

ここが肝心です!返事が届くための「広い入り口」を作ります。

  • ルール番号: 100
  • タイプ: カスタムTCP
  • プロトコル: TCP
  • ポート範囲: 1024-65535(これがエフェメラルポートの範囲です!)
  • 送信元: 0.0.0.0/0
  • 許可/拒否: 許可

—

4. トラブルシューティングの極意

もし皆さんの環境で「特定の通信だけがなぜか通らない」という事態になったら、以下のステップで確認してみてください。

1. フローログを確認する: VPCフローログを有効にして、パケットがREJECT(拒否)されていないか確認しましょう。
2. ルール番号の順序を確認する: NACLは番号が小さいものから優先されます。もし番号100で許可していても、番号90で「すべて拒否」があったらそこで終了です。
3. 双方向を疑う: 「行き」だけ許可して「帰り」を忘れていないか? 常にパケットが往復していることを意識しましょう。

AWS CLIでの確認例

もしコマンドラインで現在のルールを確認したい場合は、以下のコマンドが役立ちます。

# 特定のNACLのルール一覧を取得して確認する
aws ec2 describe-network-acls --network-acl-ids acl-0123456789abcdef0

—

最後に:ネットワークを「血の通ったもの」として捉えよう

最初は難しく感じるNACLですが、「パケットは郵便物である」「門番は記憶がない」という視点を持つだけで、ネットワークの挙動がぐっと身近に感じられるはずです。

インフラエンジニアの仕事は、目に見えないパケットの旅を想像し、安全な道筋を作ってあげることです。ぜひ今回のエフェメラルポートの考え方を武器にして、一歩ずつ、強固で柔軟なインフラを構築していってくださいね。

もし詰まったら、またいつでもここに戻ってきてください。応援しています!

コメント

タイトルとURLをコピーしました