AWS Network Firewall のルールグループと評価の流れを詳細に理解する ※ハマりポイントも解説しています

記事タイトルとURLをコピーする

こんにちは
奥秩父で膝丈まである残雪を 気付いたら9時間ラッセル(雪をかき分けて進むこと)していた
技術課の山本です

f:id:swx-yamamoto:20220315231753p:plain

夕日が最高でした
f:id:swx-yamamoto:20220315231633p:plain

本記事は以下を理解して分かりやすく発信します

  • AWS Network Firewall のルールを使用してどのような通信フィルタリングが可能か?
    • ルールの種類
    • ルール評価の流れ

本記事に書かないこと

AWS Network Firewall の仕様 (公式ドキュメント)

まずはドキュメントを見ていきましょう

What is AWS Network Firewall? - AWS Network Firewall

AWS Network Firewall is a stateful, managed, network firewall and intrusion detection and prevention service for your virtual private cloud (VPC) that you created in Amazon Virtual Private Cloud (Amazon VPC).

With Network Firewall, you can filter traffic at the perimeter of your VPC. This includes filtering traffic going to and coming from an internet gateway, NAT gateway, or over VPN or AWS Direct Connect. Network Firewall uses the open source intrusion prevention system (IPS), Suricata, for stateful inspection. Network Firewall supports Suricata compatible rules. For more information, see Stateful rule groups in AWS Network Firewall.

You can use Network Firewall to monitor and protect your Amazon VPC traffic in a number of ways, including the following:

・Pass traffic through only from known AWS service domains or IP address endpoints, such as Amazon S3.

・Use custom lists of known bad domains to limit the types of domain names that your applications can access.

・Perform deep packet inspection on traffic entering or leaving your VPC.

・Use stateful protocol detection to filter protocols like HTTPS, independent of the port used.

AWS Network Firewall の仕様 (公式ドキュメントの意訳)

AWS Network Firewallは、Amazon Virtual Private Cloud (VPC) 向けの マネージド・ネットワークファイアウォール です
ステートフルインスペクションにはオープンソースの侵入防止システム(IPS)であるSuricataを使用していて Suricata互換のルール作成をサポートしています
以下の通信を対象にフィルタリングすることができます

  • VPC内の通信
  • インターネットゲートウェイやNATゲートウェイ、VPNやAWS DirectConnectを介して VPCに送受信される通信

AWS Network Firewall の具体的な機能は以下になります

  • 5タプルルール (ステートレス/フル)
    • 送信元・先のIPアドレスによるフィルタリング
    • プロトコルとポートによるフィルタリング (HTTPなどプロトコルのみの指定も可能)
  • ドメイン名によるフィルタリング (ステートフル)
  • Suricata互換の侵入防止 (IPS) ルール (ステートフル)

VPC 内のコンポーネントがインターネットに出ていく際の通信をフィルタリングする機能として基本形は設計されているようです
ドキュメントのアーキテクチャサンプル抜粋
f:id:swx-yamamoto:20220315221523p:plain

参考:Multi zone architecture with an internet gateway - AWS Network Firewall

各コンポーネントの説明

f:id:swx-yamamoto:20220315201943p:plain

  • ファイアウォール
    • どのサブネットに AWS Network Firewall を配置するかを設定
    • ファイアーウォールポリシーを 1つだけ設定
    • ログ記録方法などを設定
  • ファイアーウォールポリシー
    • ファイアーウォールに適用するルールグループ(ステートレス/ステートフル)を設定
    • ステートレスルールに一致しないパケットに対して実行するアクション(ステートレスデフォルトアクション)を設定 ※詳細は「ルール評価の流れ」に後述
  • ルールグループ
    • 各ルールグループ(ステートレス/ステートフル)に適用するルールを設定

作成の流れとしては

  1. まず用途に応じたファイアーウォールルールを入れたルールグループを作成します
    どういったルールがあるかについては、この後の見出し「ルールの種類」にて解説します
  2. 次に必要なルールグループをファイアーウォールポリシーにアタッチしルール評価の流れを決めます
    どういったルール評価の流れがあるかについては、この後の見出し「ルール評価の流れ」にて解説します
  3. 最後にファイアーウォールを作成してVPCに配置しファイアーウォールポリシーをアタッチします (本番環境に適用する前になるべくテストしましょう)

ルールの種類

AWS Network Firewall のルールグループには以下の種類があります

  1. ステートレスルール 
    • 5タプルルール
      • 送信元・先のIPアドレスによるフィルタリング
      • プロトコルとポートによるフィルタリング (HTTPなどプロトコルのみの指定も可能)
      • TCPフラグを指定可能
        • f:id:swx-yamamoto:20220315204507p:plain
  2. ステートフルルール 
    • 5タプルルール
      • 送信元・先のIPアドレスによるフィルタリング
      • プロトコルとポートによるフィルタリング (HTTPなどプロトコルのみの指定も可能)
      • IP セット変数とポート変数を定義してルールグループ内のルールに使用可能
        • f:id:swx-yamamoto:20220315204721p:plain
        • f:id:swx-yamamoto:20220315204754p:plain
    • ドメイン名によるフィルタリング
      • 送信先ドメイン・送信元IPアドレス(デフォルトはVPC内)を指定してフィルタリング可能
      • プロトコルは http / https から選択可能
        • f:id:swx-yamamoto:20220315205101p:plain
    • Suricata互換の侵入防止 (IPS) ルール
      • Suricata 互換 のルールを指定してフィルタリング可能
      • IP セット変数とポート変数を定義してルールグループ内のルールに使用可能
        • f:id:swx-yamamoto:20220315205214p:plain
    • マネージドステートフルルール
      • AWS マネージドルールグループ
        • 脅威インテリジェンスデータに基づいたルールをAWSが提供
        • AWSが作っているSuricata互換のルール
        • f:id:swx-yamamoto:20220315210213p:plain

AWS マネージドルールグループ に関する補足

AWS マネージドルールグループを使うと独自のルールを作成して維持することなく、最新のセキュリティ脅威に常に備えることが可能です
AWSが作っているSuricata互換のルールです

ファイアーウォールポリシーの詳細画面からファイアーウォールポリシーに追加できます f:id:swx-yamamoto:20220315233727p:plain

しかし注意点があります

AWS マネージドルールグループの注意点 (重要)

AWSマネージドルールでは 「HOME_NET」 変数 (=フィルタリングするときに「送信元」になるCIDR 範囲)を変更することはできません
「HOME_NET」 変数 には AWS Network Firewall を配置した VPC の CIDR が入ります
そのため Transit Gateway などを用いて 監査VPC に集約した 通信をフィルタリングしている場合には注意が必要です
「HOME_NET」 変数 (=送信元のCIDR 範囲) が 監査 VPC の CIDR 範囲になってしまうため正常にフィルタリング出来ません
その場合は 自身で Suricata互換の侵入防止 (IPS) ルール (ステートフル) を作成する必要があります
(通信元となるコンポーネントが AWS Network Firewall を配置した VPC と同じ VPC にいないと使えません)

f:id:swx-yamamoto:20220315234421p:plain

AWS Network Firewall 応用編1 の P10より抜粋 (ピンク色の文字は山本が上から書いてます)

参考:
Limitations for AWS Managed Rules in AWS Network Firewall - AWS Network Firewall

「HOME_NET」変数については以下記事の「構築時のハマりどころ」も参考にしてください (ネットワーク構成等は2020年時点のものなので参考にしないほうが良いです)

blog.serverworks.co.jp

AWS マネージドルールグループ には以下 のルールがあります(2022/3/15 時点)

  • BotNetCommandAndControlDomainsActionOrder
    • ボットネットのホスティングで知られているドメインへのリクエストをブロックできるルール
  • AbusedLegitBotNetCommandAndControlDomainsActionOrder
    • ボットネットをホストしている可能性のあるドメインのクラスへの要求をブロックできるルール
  • MalwareDomainsActionOrder
    • マルウェアのホスティングで知られているドメインへのリクエストをブロックできるルール
  • AbusedLegitMalwareDomainsActionOrder
    • マルウェアをホストする可能性のあるドメインのクラスへのリクエストをブロックできるルール

AWS マネージドルールグループ 豆知識

「テストモードで実行しますか?」を「有効」にするとそのルールでフィルタリングしつつ drop しないように出来ます (フィルタリング結果をログに記録して確認だけしたい時などに有効)
f:id:swx-yamamoto:20220315210213p:plain

他、ルールグループに関する注意点

〜休憩〜





ルール評価の流れ

さてAWS Network Firewall のルール評価の流れを見ていきます
ルール評価の流れはファイアーウォールポリシーに設定します

デフォルトの動作をすごくざっくり書くと以下です

  1. 最初にステートレスルールを評価します ※複数あるときは作成者の決めた優先順位に基づいて評価します
  2. 次にステートフルルールを評価します ※複数あるときはアクションが「パス」「ドロップ」「アラート」の順に並べ替えられて評価されます
  3. どのステートフルルールにも引っかからなかったパケットは「パス」します

ドキュメントより抜粋します(私の作成した詳細なフロー図はもう少し先の見出しに載せます)
f:id:swx-yamamoto:20220315215810p:plain

ルール評価の流れをデフォルトから変更する場合

ステートレスルールのデフォルトアクションを変更する

最初にステートレスルールを評価したあとの動作をデフォルトからカスタマイズ(変更)することもできます

  • デフォルト f:id:swx-yamamoto:20220315214547p:plain

→ステートレスルールを評価したあとに「パス」「ドロップ」のアクションも選べますね


  • 「完全なパケットとフラグメント化されたパケットに異なるアクションを使用する」を選んだ画面
    f:id:swx-yamamoto:20220315214628p:plain

→ IPフラグメンテーションされたパケットの処理を分けることができます(フラグメント攻撃への対処時等に使用することが予想されます)

「フラグメント化されたパケット」に関する注意点

注意点としまして UDP以外のIPフラグメンテーションされたパケットは破棄されます

The firewall policy allows you to specify different default settings for full packets and for UDP packet fragments. Network Firewall silently drops packet fragments for other protocols. The action options are the same as for the stateless rules that you use in the firewall policy's stateless rule groups.

参考
Stateless default actions in your firewall policy - AWS Network Firewall

TCP の場合は TCP にフラグメントする機能があるため 基本的には IPフラグメンテーションされないでしょうし 特にこの注意点に引っかかることもないとは思います
仕様上の注意点ではあるため念の為に書いておきました
追加情報:
IPヘッダのプロトコル番号フィールドを用いてプロトコルを判断しているようでした

ステートフルルールのデフォルトアクションを変更する(要注意)

ステートフルルールのデフォルトアクションはファイアーウォールの作成時のみデフォルト(pass)から変更可能です

f:id:swx-yamamoto:20220315223441p:plain

デフォルトアクションの pass と drop の切り替えが出来ない点に注意ください
f:id:swx-yamamoto:20220315224013p:plain

ルール評価の流れをフロー図に示します

なにかの際にご利用ください
ステートフルルールのデフォルトアクションを「厳格」にする場合は時間の都合もあり書けませんでした (ご了承ください)

フラグメント化されたパケットの処理を一緒に処理する場合 のフロー図

f:id:swx-yamamoto:20220310041152p:plain
フラグメント化されたパケットの処理を一緒に処理する場合 のフロー図

フラグメント化されたパケットの処理を分けて処理する場合も含めたフロー図

f:id:swx-yamamoto:20220310041227p:plain
フラグメント化されたパケットの処理を分けて処理する場合も含めたフロー図

クオータ(Quotas,制限)

デフォルトでは作成可能なファイアーウォール数が 5になっています
要件に応じて制限緩和ください

まとめ

AWS Network Firewall のルールグループと評価の流れを詳細に理解しました
次は運用面についても理解を深めようと策略しています

山本 哲也 (記事一覧)

クラウドインテグレーション部 技術課

好きなサービス:ALB,ECS,API Gateway,Lambda

登山(春夏秋冬) サウナ(施設/テント) 乃木坂46ファン(筒井あやめ推し)