「NATゲートウェイが悲鳴を上げる前に」― クラウドネットワークを守るための守護神ガイド
こんにちは!SREとして日々クラウドの裏側を覗き込んでいると、ふと「ネットワークって、実は巨大な郵便局の仕分けシステムに似ているな」と思うことがあります。
今日は、皆さんがAWSなどのクラウド環境で必ずお世話になる「NATゲートウェイ」について、ちょっと深い話をしましょう。特に、「なぜか突然通信が遅くなる」「変な通信が大量に発生している」というトラブルにどう立ち向かうか、その勘所を紐解いていきます。
—
1. NATゲートウェイは「街の郵便局」
まず、NATゲートウェイの役割をイメージしてみましょう。
プライベートサブネットにいるサーバーたちは、外の世界(インターネット)と直接手紙をやり取りできません。そこで、彼らはNATゲートウェイという「郵便局」に手紙を預けます。NATゲートウェイは、みんなの手紙を自分の住所(グローバルIP)に書き換えて、外の世界へ送り出してくれるのです。
しかし、この郵便局には一つ弱点があります。「一度に処理できる手紙の数(ポート数)」には限界があるということです。
なぜポートスキャンでパンクするのか?
攻撃者が「このネットワークの穴はどこかな?」と探るポートスキャンを行うと、NATゲートウェイは「誰から、どこへ、どんな手紙を出すか」という記録(マッピング)を大量に作成しなければなりません。
郵便局の窓口が、知らない宛先への問い合わせ対応で埋め尽くされてしまい、本来届けるべき大切な手紙が滞る……これがNATゲートウェイのパフォーマンス低下の正体です。
—
2. 異常をいち早く察知する「監視の目」
NATゲートウェイが悲鳴を上げる前に、私たちは「誰が、どこへ、どれだけ通信しているか」を追跡する必要があります。ここで最強の相棒になるのが、VPCフローログとGuardDutyです。
VPCフローログ:ネットワークの「配送伝票」を追う
VPCフローログは、ネットワーク上で行われたすべての通信の記録です。これを見れば、「あ、このサーバーから突然何万件も接続リクエストが出ている!」という異常に気づけます。
VPCフローログを分析するには、CloudWatch Logs Insightsを使うのが一番早いです。例えば、特定の送信元IPからの通信数を確認するクエリはこんな感じです。
# どの送信元IPが一番通信リクエストを出しているかランキングを出す
stats count() by srcAddr
| filter dstPort = 80 or dstPort = 443
| sort count() desc
| limit 10
Amazon GuardDuty:クラウドの「凄腕警備員」
自分でログをずっと監視するのは大変ですよね。そこで出番なのがGuardDutyです。これはAWSが提供する「インテリジェントな監視サービス」で、ポートスキャンや怪しい通信パターンを自動的に検知し、アラートを出してくれます。
「あ、この通信パターンは明らかにスキャンだ!」と判断して即座に通知してくれるので、設定しておくだけで安心感が段違いです。
—
3. もし攻撃されたら?制限をかけて守り抜く
万が一、特定のサーバーが乗っ取られて外部へ攻撃を始めてしまったら、どうやって止めるべきでしょうか。
ネットワークACLとセキュリティグループ
最も強力な防御策は、ネットワークACLで悪意ある通信を遮断することです。
- セキュリティグループ: サーバー単位の門番。「このサーバーへの入室は許可していい?」
- ネットワークACL: サブネット全体の門番。「このエリアへの出入りそのものを禁止する!」
以下は、特定の悪意あるIPからの通信を完全に遮断するためのネットワークACLの概念的な設定イメージです。
# AWS CLIで特定のIPからのアクセスを拒否するルールを追加する例
aws ec2 create-network-acl-entry \
--network-acl-id acl-12345678 \
--ingress \
--rule-number 100 \
--protocol tcp \
--port-range From=0,To=65535 \
--cidr-block 203.0.113.5/32 \
--rule-action deny # ここでアクセスを拒否!
*※注:ルール番号は他の許可設定より優先されるよう、小さい数字(100など)に設定するのがポイントです。*
—
4. 最後に:エンジニアとして大切なこと
インフラを守るということは、単に技術的な設定をすることだけではありません。「いつもと様子が違うな?」という小さな違和感に気づける観察眼を養うことが、一番の防御になります。
1. VPCフローログを有効にする: 証拠がなければ何も始まりません。
2. GuardDutyをオンにする: 24時間365日の監視を機械に任せましょう。
3. 閾値アラートを設定する: NATゲートウェイの「バイト転送量」や「パケット数」にCloudWatchアラームを設定し、限界に達する前に通知を受け取れるようにしておきましょう。
ネットワークという目に見えない道を、皆さんの手で安全に守り抜いてください。もし迷ったら、いつでもこの記事を読み返して、一歩ずつ進んでいきましょうね!
それでは、良いクラウドライフを!
コメント