yamamototis1105’s tech blog

ネットワークを中心とした技術ブログです

AWS Network Firewallの構成パターンとフィルタ機能

はじめに

 AWS Network Firewallは、トラフィックを制御するファイアウォールのマネージドサービスですが、どのような構成やフィルタがあって、どのように使い分けをすればよいか、と思うことはないですか?
 本記事では、このようなAWS Network Firewallの構成パターンとフィルタ機能を整理してみました。

構成パターン

分散型デプロイモデル

 ワークロードを割り当てたVPC単位でファイアウォールをデプロイするモデルです。VPC単位でファイアウォールポリシーを定義することにより影響範囲を局所化します。

IGW〜NAT GatewayもしくはALB間へデプロイする場合
 IGWの全入出力トラフィックに対して、 同じファイアウォールポリシーを適用したい場合に有効です。インターネットからALBへSSL/TLS通信でアクセスされる場合、ファイアウォールルール次第でNetwork Firewallでインスペクションする必要がある点は要注意です。
 例として、Server1からNAT Gateway経由のインターネットへの通信の流れを以下に示します。
  1. Server1がインターネットへのリクエストパケットを送信する
    ルートテーブルに従ってNATGW1に転送する
  2. NATGW1は送信元アドレスを10.1.1.xから10.1.3.xに変換する
    ルートテーブルに従いEndpoint1に転送する
  3. Endpoint1はNetwork Firewallに転送する
  4. Network Firewallはパケットをフィルタし、Endpoint1に転送する
  5. Endpoint1はルートテーブルに従ってIGWに転送する
  6. IGWは送信元アドレスを10.1.3.xからグローバルアドレスに変換する
    IGWはインターネットに転送する
  7. インターネットからIGWにレスポンスパケットを送信する
  8. IGWは送信先アドレスをグローバルアドレスから10.1.3.xに変換する
    イングレスルートテーブルに従いEndpoint1に転送する
  9. Endpoint1はNetwork Firewallに転送する
  10. Network Firewallはパケットをフィルタし、Network FirewallはEndpoint1に転送する
  11. Endpoint1はルートテーブルに従いLacalのNATGW1に転送する
  12. NATGW1は送信先アドレスを10.1.3.xから10.1.1.xに変換する
    ルートテーブルに従いLocalにあるServer1に転送する
NAT GatewayもしくはALB〜Server間へデプロイする場合
 特定Serverの入出力トラフィックに対しのみ、ファイアウォールポリシーを適用したい場合に有効です。ServerからNAT Gateway経由でインターネットへアクセスされる場合、変換前の各Serverのアドレスで検査可能となります。
 例として、Server1からNAT Gateway経由のインターネットへの通信の流れを以下に示します。
  1. Server1がインターネットへのリクエストパケットを送信する
    ルートテーブルに従ってEndpoint1に転送する
  2. Endpoint1はNetwork Firewallに転送する
  3. Network Firewallはパケットをフィルタし、Endpoint1に転送する
  4. Endpoint1はルートテーブルに従ってNATGW1に転送する
  5. NATGW1は送信元アドレスを10.1.1.xから10.1.5.xに変換する
    ルートテーブルに従いIGWに転送する
  6. IGWは送信元アドレスを10.1.5.xからグローバルアドレスに変換する
    IGWはインターネットに転送する
  7. インターネットからIGWにレスポンスパケットを送信する
  8. IGWは送信先アドレスをグローバルアドレスから10.1.5.xに変換する
    デフォルトルートテーブルに従いLocalにあるNATGW1に転送する
  9. NATGW1は送信先アドレスを10.1.5.xから10.1.1.xに変換する
    ルートテーブルに従いEndpoint1に転送する
  10. Endpoint1はNetwork Firewallに転送する
  11. Network Firewallはパケットをフィルタし、Network FirewallはEndpoint1に転送する
  12. Endpoint1はルートテーブルに従いLacalにあるServer1に転送する

集約型デプロイモデル

 TGWへ接続された検査用VPCファイアウォールをデプロイするモデルです。TGW経由の全トラフィックを検査用VPCにルーティングすることによりファイアウォールポリシーを統一できます。

VPC間のトラフィックを検査する場合
 VPC間の全トラフィックが、AWS Network Firewallがデプロイされた検査用VPC経由でルーティングされます。
 例として、Sever1~Server2間通信の流れを以下に示します。
  1. Server1がServer2へのリクエストパケットを送信する
    ルートテーブルに従いTGW ENI1に転送する
  2. TGW ENI1はTGWに転送する
  3. TGWはVPC2がアソシエートされたルートテーブルに従いVPC1のアタッチメントに転送する
  4. TGW ENI3はルーティテーブルに従いEndpoint1に転送する
  5. Endpoint1はNetwork Firewallに転送する
  6. Network Firewallはパケットをフィルタし、Network FirewallはEndpoint1に転送する
  7. Endpoint1はルートテーブルに従いTGW ENI3に転送する
  8. TGW ENI3はTGWに転送する
  9. TGWはVPC1がアソシエートされたルートテーブルに従いVPC3のアタッチメントに転送する
  10. TGW ENI2はルーティテーブルに従いLocalにあるServer2に転送する
  11. Server2がServer1へのレスポンスパケットを送信する
    ルートテーブルに従いTGW ENI2に転送する
  12. TGW ENI2はTGWに転送する
  13. TGWはVPC3がアソシエートされたルートテーブルに従いVPC1のアタッチメントに転送する
  14. TGW ENI3はルーティテーブルに従いEndpoint1に転送する
  15. Endpoint1はNetwork Firewallに転送する
  16. Network Firewallはパケットをフィルタし、Network FirewallはEndpoint1に転送する
  17. Endpoint1はルートテーブルに従いTGW ENI3に転送する
  18. TGW ENI3はTGWに転送する
  19. TGWはVPC1がアソシエートされたルートテーブルに従いVPC2のアタッチメントに転送する
  20. TGW ENI1はルーティテーブルに従いLocalにあるServer1に転送する
VPC〜インターネット間のトラフィックを検査する場合
 VPC〜インターネット間の全トラフィックが、AWS Network Firewallがデプロイされた検査用VPC経由でルーティングされます。
 例として、Sever1からNAT Gateway経由のインターネットへの通信の流れを以下に示します。
  1. Server1がインターネットへのリクエストパケットを送信する
    ルートテーブルに従いTGW ENI1に転送する
  2. TGW ENI1はTGWに転送する
  3. TGWはVPC2がアソシエートされたルートテーブルに従いVPC1のアタッチメントに転送する
  4. TGW ENI3はルーティテーブルに従いEndpoint1に転送する
  5. Endpoint1はNetwork Firewallに転送する
  6. Network Firewallはパケットをフィルタし、Network FirewallはEndpoint1に転送する
  7. Endpoint1はルートテーブルに従いNATGW1に転送する
  8. NATGW1は送信元アドレスを10.2.1.xから10.1.5.xに変換する
    ルートテーブルに従いIGWに転送する
  9. IGWは送信元アドレスを10.1.5.xからグローバルアドレスに変換する
    IGWはインターネットに転送する
  10. インターネットからIGWにレスポンスパケットを送信する
  11. IGWは送信先アドレスをグローバルアドレスから10.1.5.xに変換する
    デフォルトルートテーブルに従いLocalにあるNATGW1に転送する
  12. NATGW1は送信先アドレスを10.1.5.xから10.2.1.xに変換する
    ルートテーブルに従いEndpoint1に転送する
  13. Endpoint1はNetwork Firewallに転送する
  14. Network Firewallはパケットをフィルタし、Network FirewallはEndpoint1に転送する
  15. Endpoint1はルートテーブルに従いTGW ENI3に転送する
  16. TGW ENI3はTGWに転送する
  17. TGWはVPC1がアソシエートされたルートテーブルに従いVPC2のアタッチメントに転送する
  18. TGW ENI1はルーティテーブルに従いLocalにあるServer1に転送する

フィルタ機能

 Network Firewallは一つのポリシーを関連付け、ポリシーに複数のルールグループを関連付けます。ルールグループはタイプによって様々なフィルタ機能が提供されています。

ステートフル

標準ステートフルルール
 プロトコル、送信元アドレス/ポート、送信先アドレス/ポート 、方向、アクションを定義します。
 IPセット変数、ポート変数、IPセット参照などの機能を用いたオブジェクトベースのファイアウォールになっており、再利用性や可読性が高いです。
 Network Filrewallの標準ステートフルルールとセキュリティグループは似てますが、条件、方向、アクションの観点で以下の違いがあります。
Network Firewall Security Group
条件 5タプル ※ アドレスはIPセット変数や
  IPセット参照も指定可能
※ ポートはポート変数も指定可能
3タプル ※ アドレスはセキュリティグループや
  プレフィクスリストも指定可能
方向 転送/すべて
※ すべて…送信先アドレス/ポート発、
  送信元アドレス/ポート着の
  反対方向パケットも対象とする意
IN/OUT
アクション パス/ドロップ/アラート パスのみ
ロギング Network Firewallのログ記録 VPCフローログ
ドメインリストルール
 ドメイン名、CIDR 、プロトコル、アクションを定義します。
 CIDR (=送信元アドレス) はデフォルトでVPC CIDRとなっていますが、カスタムで特定Serverのみドメインフィルタを適用するなども可能です。
 AWS Network Firewallドメインリストルールはhttp/httpsでアクセスする時点でフィルタしますが、dnsで名前解決する時点でフィルタしたい場合にはDNS Firewallを使います。
Network Firewall DNS Firewall
タイミング WebサーバへのHTTP/HTTPSリクエスト時
(Network Firewall透過時)
DNSサーバへのDNSクエリ時
(Route53 Resolverクエリ時)
条件 ※ CIDRは送信元アドレスが指定可能
プロトコルはhttp/httpsが指定可能
ドメインリダイレクト設定は
  全て/最初のドメインのみが指定可能
※ クエリの種類は
  リソースレコードタイプが指定可能
アクション ALLOW/BLOCK/ALERT パスのみ
ロギング Network Firewallのログ記録 Route53のクエリのログ記録
Suricata互換ルール
 オープンソースIDS/IPSであるSuricata互換ルールに従い、アクション 、プロトコル、アドレス、ポート、方向、オプションが定義できます。
 Suricata互換ルールは汎用性が極めて高く、一例としては「TCP/443であるが非TLSである通信は拒否する」という指定も可能です。
 Sricata互換ルールの記述方法については、Sricataユーザガイドをご参照下さい。ただし、あくまでも互換のため、AWS Network Firewall開発者ガイドも併せてご参照下さい。
docs.suricata.io
docs.aws.amazon.com

ステートレス

 ステートフルルールとほぼ同様、優先度、プロトコル、送信元アドレス/ポート、送信先アドレス/ポート、アクションが定義できます。
 ただし、定義された優先順で処理される、アドレス/ポートの変数が定義/参照できない、カスタムメトリクス/TCPフラグのオプションがあるなどの違いがあります。

まとめ

  • AWS Network Firewallの構成パターンは、分散型/集約型デプロイモデルがある。
  • AWS Network Firewallのフィルタ機能はステートフル/ステートレスルールがあり、ステートフルルールは標準ステートフル/ドメインリスト/Suricata互換ルールがある。

おわりに

 AWS Network Firewallを設計される方々にとって、本記事がご参考になりますと幸いです。