【入門編】 AWS Network FirewallのステートフルインスペクションとIDS/IPSルールセット – クラウド&コンテナネットワーク実践ガイド

「VPCの門番」を使いこなせ!AWS Network Firewallでパケットの「中身」まで見抜く方法

こんにちは!クラウドアーキテクトとして日々ネットワークの迷宮を駆け巡っているSREです。

皆さんは、クラウドのネットワーク設計をしていて「ただ通信を通すだけじゃなくて、もっと中身までしっかり監視したい!」と思ったことはありませんか?

AWSのVPCには、標準で Security Group や Network ACL という強力な門番がいます。でも、彼らは言ってみれば「名簿を確認する受付係」。この人が誰で、どこから来たかまでは見ますが、「カバンの中に何が入っているか」までは見てくれません。

そこで登場するのが、今回解説する AWS Network Firewall です。今日は、この「最強の検査官」の仕組みを、郵便配達に例えて紐解いていきましょう!

—

1. なぜ「中身」を見る必要があるの?

例えば、皆さんがネット通販で荷物を送る時、運送会社は「宛先(IPアドレス)」や「送り主」は確認しますよね。これが Security Group の役割です。

しかし、もしその荷物の中に「隠し持った危険物」が入っていたらどうでしょう?送り主が正当な相手でも、中身が不正なデータだったら大惨事です。

AWS Network Firewallの「ステートフルインスペクション」は、まさに熟練の検査官がX線や開封確認を行って、「このパケットは本当に安全か?」を判断するプロセスなんです。

—

2. ステートフルインスペクションの仕組み:郵便局の仕分け作業

「ステートフル(Stateful)」という言葉、難しそうに聞こえますが、要するに「文脈を理解している」ということです。

郵便局で例えると、ただ単に「この手紙は怪しいから捨てる」と判断するのではなく、「あ、これはさっき返信した手紙への『返信』だから許可してあげよう」と、通信の流れを記憶(ステート)しながら判断します。

そして、この判断の基準となるのが Suricata(スリカータ) という世界的に有名なルール形式です。これを使うことで、パケットの中に特定の「キーワード」や「攻撃パターン」が含まれていないかをチェックできるんです。

—

3. 実際にルールを書いてみよう!

では、さっそく「怪しい通信を遮断する」ルールを書いてみましょう。Network Firewallのルールセットは、以下のような書き方をします。

# 例:特定の悪意あるドメインへのアクセスを遮断するルール
# drop: 通信を破棄する
# http: プロトコルを指定
# any: 送信元・送信先を問わず
# msg: ログに残すメッセージ
drop http any any -> any any (msg:"悪意あるドメインへの通信を検知"; http.host; content:"malicious-site.example.com"; sid:1000001; rev:1;)

このルールの読み解き方

1. drop: 「この条件に合致したら、荷物を没収(破棄)せよ!」という命令です。
2. http.host: 「通信先(Webサイト)の住所を見てね」という指定です。
3. content: 「中身にこの文字列が含まれていたらアウト!」という具体的なチェックポイントです。
4. sid: 「ルール番号」です。管理のためにユニークな番号を振ります。

こうしてルールを定義しておくと、AWS Network Firewallがパケットを一つずつ開封し、「中身に malicious-site.example.com という文字が含まれていないか?」をチェックしてくれるわけです。

—

4. 現場で役立つ実装のコツ

実際に環境を構築する際は、以下のステップで進めるのが鉄則です。

  • まずは「Alertモード」で流す: 最初から drop(遮断)にすると、業務に必要な通信まで止めてしまうリスクがあります。まずは alert(警告のみ)に設定し、どんな通信が引っかかるかログを確認しましょう。
  • ログをCloudWatchへ送る: 検査官の報告書(ログ)をしっかり保存しましょう。AWS Network Firewallは CloudWatch Logs に詳細を吐き出せます。「何が拒否されたか」を可視化することが、運用の第一歩です。

AWS CLIでのルールグループ作成例

(※実際にはマネジメントコンソールやTerraformで行うことが多いですが、仕組みを理解するために見ておきましょう)

# ルールグループを作成するための設定サンプル
aws network-firewall create-rule-group \
    --rule-group-name "my-security-rules" \
    --type STATEFUL \
    --capacity 100 \
    --rule-group '{"RulesSource": {"RulesString": "drop http any any -> any any (msg:\"不正な通信\"; http.host; content:\"bad-domain.com\"; sid:1; rev:1;)"}}'

—

最後に:ネットワークは「おもてなし」と「警戒」のバランス

いかがでしたか?AWS Network Firewallは、VPCを守るための非常に頼もしい存在です。

最初は難しく感じるかもしれませんが、「通信という荷物を、ルールに従って丁寧に検査する」というイメージを持てば、ぐっと理解が深まるはずです。

最初は小さなルールから始めて、少しずつ「どんな通信が来ているのか」を覗いてみることから始めてみてください。それが、最強のインフラエンジニアへの第一歩です!

もし設定で迷ったり、「こんなケースはどうすればいいの?」という疑問があれば、いつでもまた聞きに来てくださいね。現場からは以上です!

コメント

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