「なぜか通信が繋がらない!」を解決する: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ですが、「パケットは郵便物である」「門番は記憶がない」という視点を持つだけで、ネットワークの挙動がぐっと身近に感じられるはずです。
インフラエンジニアの仕事は、目に見えないパケットの旅を想像し、安全な道筋を作ってあげることです。ぜひ今回のエフェメラルポートの考え方を武器にして、一歩ずつ、強固で柔軟なインフラを構築していってくださいね。
もし詰まったら、またいつでもここに戻ってきてください。応援しています!
コメント