こんにちは
奥秩父で膝丈まである残雪を 気付いたら9時間ラッセル(雪をかき分けて進むこと)していた
技術課の山本です
夕日が最高でした
- 本記事は以下を理解して分かりやすく発信します
- 本記事に書かないこと
- AWS Network Firewall の仕様 (公式ドキュメント)
- AWS Network Firewall の仕様 (公式ドキュメントの意訳)
- 各コンポーネントの説明
- ルールの種類
- ルール評価の流れ
- クオータ(Quotas,制限)
- まとめ
本記事は以下を理解して分かりやすく発信します
- AWS Network Firewall のルールを使用してどのような通信フィルタリングが可能か?
- ルールの種類
- ルール評価の流れ
本記事に書かないこと
AWS Network Firewall を使用する際のネットワーク構成
- 一旦は以下の記事に譲ります
- 上の記事を読んだ所感を簡単に
- ステートフルファイアーウォールの機能があるため行きも戻りも AWS Network Firewall のエンドポイントを通るようにルーティングを設計するのが要点ですね
ログの見方や検知時の通知実装、ルールグループの設定変更時の注意事項、操作に必要な IAM 権限など運用面
- 時間見つけて新しいブログ記事にして書く予定です
Suricata互換の侵入防止 (IPS) ルールの記述方法
- 記事の記載範囲が広くなるため書きません
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 内のコンポーネントがインターネットに出ていく際の通信をフィルタリングする機能として基本形は設計されているようです
ドキュメントのアーキテクチャサンプル抜粋
参考:Multi zone architecture with an internet gateway - AWS Network Firewall
各コンポーネントの説明
- ファイアウォール
- どのサブネットに AWS Network Firewall を配置するかを設定
- ファイアーウォールポリシーを 1つだけ設定
- ログ記録方法などを設定
- ファイアーウォールポリシー
- ファイアーウォールに適用するルールグループ(ステートレス/ステートフル)を設定
- ステートレスルールに一致しないパケットに対して実行するアクション(ステートレスデフォルトアクション)を設定 ※詳細は「ルール評価の流れ」に後述
- ルールグループ
- 各ルールグループ(ステートレス/ステートフル)に適用するルールを設定
作成の流れとしては
- まず用途に応じたファイアーウォールルールを入れたルールグループを作成します
どういったルールがあるかについては、この後の見出し「ルールの種類」にて解説します - 次に必要なルールグループをファイアーウォールポリシーにアタッチしルール評価の流れを決めます
どういったルール評価の流れがあるかについては、この後の見出し「ルール評価の流れ」にて解説します - 最後にファイアーウォールを作成してVPCに配置しファイアーウォールポリシーをアタッチします (本番環境に適用する前になるべくテストしましょう)
ルールの種類
AWS Network Firewall のルールグループには以下の種類があります
- ステートレスルール
- 5タプルルール
- 送信元・先のIPアドレスによるフィルタリング
- プロトコルとポートによるフィルタリング (HTTPなどプロトコルのみの指定も可能)
- TCPフラグを指定可能
- 5タプルルール
- ステートフルルール
- 5タプルルール
- 送信元・先のIPアドレスによるフィルタリング
- プロトコルとポートによるフィルタリング (HTTPなどプロトコルのみの指定も可能)
- IP セット変数とポート変数を定義してルールグループ内のルールに使用可能
- ドメイン名によるフィルタリング
- 送信先ドメイン・送信元IPアドレス(デフォルトはVPC内)を指定してフィルタリング可能
- プロトコルは http / https から選択可能
- Suricata互換の侵入防止 (IPS) ルール
- Suricata 互換 のルールを指定してフィルタリング可能
- IP セット変数とポート変数を定義してルールグループ内のルールに使用可能
- マネージドステートフルルール
- AWS マネージドルールグループ
- 脅威インテリジェンスデータに基づいたルールをAWSが提供
- AWSが作っているSuricata互換のルール
- AWS マネージドルールグループ
- 5タプルルール
AWS マネージドルールグループ に関する補足
AWS マネージドルールグループを使うと独自のルールを作成して維持することなく、最新のセキュリティ脅威に常に備えることが可能です
AWSが作っているSuricata互換のルールです
ファイアーウォールポリシーの詳細画面からファイアーウォールポリシーに追加できます
しかし注意点があります
AWS マネージドルールグループの注意点 (重要)
この見出しに記載している注意点は、2023 年 5月のアップデートで、改善されました。🎉
詳細については、以下の記事を参照ください。
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 にいないと使えません)
AWS Network Firewall 応用編1 の P10より抜粋 (ピンク色の文字は山本が上から書いてます)
「HOME_NET」変数については以下記事の「構築時のハマりどころ」も参考にしてください (ネットワーク構成等は2020年時点のものなので参考にしないほうが良いです)
AWS マネージドルールグループ には以下 のルールがあります(2022/3/15 時点)
- BotNetCommandAndControlDomainsActionOrder
- ボットネットのホスティングで知られているドメインへのリクエストをブロックできるルール
- AbusedLegitBotNetCommandAndControlDomainsActionOrder
- ボットネットをホストしている可能性のあるドメインのクラスへの要求をブロックできるルール
- MalwareDomainsActionOrder
- マルウェアのホスティングで知られているドメインへのリクエストをブロックできるルール
- AbusedLegitMalwareDomainsActionOrder
- マルウェアをホストする可能性のあるドメインのクラスへのリクエストをブロックできるルール
AWS マネージドルールグループ 豆知識
「テストモードで実行しますか?」を「有効」にするとそのルールでフィルタリングしつつ drop しないように出来ます (フィルタリング結果をログに記録して確認だけしたい時などに有効)
他、ルールグループに関する注意点
Suricata互換の侵入防止 (IPS) ルールを作成する際に Suricata では提供している機能が使えない場合もあります(Datasets 等) 作成する方は事前に一読ください
AWS WAF と同じように ルールグループにはキャパシティを設定して作成します キャパシティの計算方法はドキュメントを参照ください
〜休憩〜
ルール評価の流れ
さてAWS Network Firewall のルール評価の流れを見ていきます
ルール評価の流れはファイアーウォールポリシーに設定します
デフォルトの動作をすごくざっくり書くと以下です
- 最初にステートレスルールを評価します ※複数あるときは作成者の決めた優先順位に基づいて評価します
- 次にステートフルルールを評価します ※複数あるときはアクションが「パス」「ドロップ」「アラート」の順に並べ替えられて評価されます
- どのステートフルルールにも引っかからなかったパケットは「パス」します
ドキュメントより抜粋します(私の作成した詳細なフロー図はもう少し先の見出しに載せます)
ルール評価の流れをデフォルトから変更する場合
ステートレスルールのデフォルトアクションを変更する
最初にステートレスルールを評価したあとの動作をデフォルトからカスタマイズ(変更)することもできます
- デフォルト
→ステートレスルールを評価したあとに「パス」「ドロップ」のアクションも選べますね
- 「完全なパケットとフラグメント化されたパケットに異なるアクションを使用する」を選んだ画面
→ 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)から変更可能です
デフォルトアクションの pass と drop の切り替えが出来ない点に注意ください
ルール評価の流れをフロー図に示します
なにかの際にご利用ください
ステートフルルールのデフォルトアクションを「厳格」にする場合は時間の都合もあり書けませんでした (ご了承ください)
フラグメント化されたパケットの処理を一緒に処理する場合 のフロー図
フラグメント化されたパケットの処理を分けて処理する場合も含めたフロー図
クオータ(Quotas,制限)
デフォルトでは作成可能なファイアーウォール数が 5になっています
要件に応じて制限緩和ください
まとめ
AWS Network Firewall のルールグループと評価の流れを詳細に理解しました
次は運用面についても理解を深めようと策略しています
山本 哲也 (記事一覧)
カスタマーサクセス部のエンジニア。2024 Japan AWS Top Engineers に選んでもらいました。
今年の目標は Advanced Networking – Specialty と Machine Learning - Specialty を取得することです。
山を走るのが趣味です。今年の目標は 100 km と 100 mile を完走することです。 100 km は Gran Trail みなかみで完走しました。OSJ koumi 100 で 100 mile 砕け散りました。どこかで 100 mile やりたいです。
基本的にのんびりした性格です。座右の銘は「いつか着く」