はじめに
AWS Network Firewallは、トラフィックを制御するファイアウォールのマネージドサービスですが、どのような構成やフィルタがあって、どのように使い分けをすればよいか、と思うことはないですか?
本記事では、このようなAWS Network Firewallの構成パターンとフィルタ機能を整理してみました。
構成パターン
分散型デプロイモデル
ワークロードを割り当てたVPC単位でファイアウォールをデプロイするモデルです。VPC単位でファイアウォールポリシーを定義することにより影響範囲を局所化します。
IGW〜NAT GatewayもしくはALB間へデプロイする場合
IGWの全入出力トラフィックに対して、 同じファイアウォールポリシーを適用したい場合に有効です。インターネットからALBへSSL/TLS通信でアクセスされる場合、ファイアウォールルール次第でNetwork Firewallでインスペクションする必要がある点は要注意です。
例として、Server1からNAT Gateway経由のインターネットへの通信の流れを以下に示します。
- Server1がインターネットへのリクエストパケットを送信する
ルートテーブルに従ってNATGW1に転送する - NATGW1は送信元アドレスを10.1.1.xから10.1.3.xに変換する
ルートテーブルに従いEndpoint1に転送する - Endpoint1はNetwork Firewallに転送する
- Network Firewallはパケットをフィルタし、Endpoint1に転送する
- Endpoint1はルートテーブルに従ってIGWに転送する
- IGWは送信元アドレスを10.1.3.xからグローバルアドレスに変換する
IGWはインターネットに転送する - インターネットからIGWにレスポンスパケットを送信する
- IGWは送信先アドレスをグローバルアドレスから10.1.3.xに変換する
イングレスルートテーブルに従いEndpoint1に転送する - Endpoint1はNetwork Firewallに転送する
- Network Firewallはパケットをフィルタし、Network FirewallはEndpoint1に転送する
- Endpoint1はルートテーブルに従いLacalのNATGW1に転送する
- NATGW1は送信先アドレスを10.1.3.xから10.1.1.xに変換する
ルートテーブルに従いLocalにあるServer1に転送する
NAT GatewayもしくはALB〜Server間へデプロイする場合
特定Serverの入出力トラフィックに対しのみ、ファイアウォールポリシーを適用したい場合に有効です。ServerからNAT Gateway経由でインターネットへアクセスされる場合、変換前の各Serverのアドレスで検査可能となります。
例として、Server1からNAT Gateway経由のインターネットへの通信の流れを以下に示します。
- Server1がインターネットへのリクエストパケットを送信する
ルートテーブルに従ってEndpoint1に転送する - Endpoint1はNetwork Firewallに転送する
- Network Firewallはパケットをフィルタし、Endpoint1に転送する
- Endpoint1はルートテーブルに従ってNATGW1に転送する
- NATGW1は送信元アドレスを10.1.1.xから10.1.5.xに変換する
ルートテーブルに従いIGWに転送する - IGWは送信元アドレスを10.1.5.xからグローバルアドレスに変換する
IGWはインターネットに転送する - インターネットからIGWにレスポンスパケットを送信する
- IGWは送信先アドレスをグローバルアドレスから10.1.5.xに変換する
デフォルトルートテーブルに従いLocalにあるNATGW1に転送する - NATGW1は送信先アドレスを10.1.5.xから10.1.1.xに変換する
ルートテーブルに従いEndpoint1に転送する - Endpoint1はNetwork Firewallに転送する
- Network Firewallはパケットをフィルタし、Network FirewallはEndpoint1に転送する
- Endpoint1はルートテーブルに従いLacalにあるServer1に転送する
集約型デプロイモデル
TGWへ接続された検査用VPCにファイアウォールをデプロイするモデルです。TGW経由の全トラフィックを検査用VPCにルーティングすることによりファイアウォールポリシーを統一できます。
例として、Sever1~Server2間通信の流れを以下に示します。
- Server1がServer2へのリクエストパケットを送信する
ルートテーブルに従いTGW ENI1に転送する - TGW ENI1はTGWに転送する
- TGWはVPC2がアソシエートされたルートテーブルに従いVPC1のアタッチメントに転送する
- TGW ENI3はルーティテーブルに従いEndpoint1に転送する
- Endpoint1はNetwork Firewallに転送する
- Network Firewallはパケットをフィルタし、Network FirewallはEndpoint1に転送する
- Endpoint1はルートテーブルに従いTGW ENI3に転送する
- TGW ENI3はTGWに転送する
- TGWはVPC1がアソシエートされたルートテーブルに従いVPC3のアタッチメントに転送する
- TGW ENI2はルーティテーブルに従いLocalにあるServer2に転送する
- Server2がServer1へのレスポンスパケットを送信する
ルートテーブルに従いTGW ENI2に転送する - TGW ENI2はTGWに転送する
- TGWはVPC3がアソシエートされたルートテーブルに従いVPC1のアタッチメントに転送する
- TGW ENI3はルーティテーブルに従いEndpoint1に転送する
- Endpoint1はNetwork Firewallに転送する
- Network Firewallはパケットをフィルタし、Network FirewallはEndpoint1に転送する
- Endpoint1はルートテーブルに従いTGW ENI3に転送する
- TGW ENI3はTGWに転送する
- TGWはVPC1がアソシエートされたルートテーブルに従いVPC2のアタッチメントに転送する
- TGW ENI1はルーティテーブルに従いLocalにあるServer1に転送する
例として、Sever1からNAT Gateway経由のインターネットへの通信の流れを以下に示します。
- Server1がインターネットへのリクエストパケットを送信する
ルートテーブルに従いTGW ENI1に転送する - TGW ENI1はTGWに転送する
- TGWはVPC2がアソシエートされたルートテーブルに従いVPC1のアタッチメントに転送する
- TGW ENI3はルーティテーブルに従いEndpoint1に転送する
- Endpoint1はNetwork Firewallに転送する
- Network Firewallはパケットをフィルタし、Network FirewallはEndpoint1に転送する
- Endpoint1はルートテーブルに従いNATGW1に転送する
- NATGW1は送信元アドレスを10.2.1.xから10.1.5.xに変換する
ルートテーブルに従いIGWに転送する - IGWは送信元アドレスを10.1.5.xからグローバルアドレスに変換する
IGWはインターネットに転送する - インターネットからIGWにレスポンスパケットを送信する
- IGWは送信先アドレスをグローバルアドレスから10.1.5.xに変換する
デフォルトルートテーブルに従いLocalにあるNATGW1に転送する - NATGW1は送信先アドレスを10.1.5.xから10.2.1.xに変換する
ルートテーブルに従いEndpoint1に転送する - Endpoint1はNetwork Firewallに転送する
- Network Firewallはパケットをフィルタし、Network FirewallはEndpoint1に転送する
- Endpoint1はルートテーブルに従いTGW ENI3に転送する
- TGW ENI3はTGWに転送する
- TGWはVPC1がアソシエートされたルートテーブルに従いVPC2のアタッチメントに転送する
- TGW ENI1はルーティテーブルに従いLocalにあるServer1に転送する
フィルタ機能
Network Firewallは一つのポリシーを関連付け、ポリシーに複数のルールグループを関連付けます。ルールグループはタイプによって様々なフィルタ機能が提供されています。
ステートフル
標準ステートフルルール
プロトコル、送信元アドレス/ポート、送信先アドレス/ポート 、方向、アクションを定義します。
IPセット変数、ポート変数、IPセット参照などの機能を用いたオブジェクトベースのファイアウォールになっており、再利用性や可読性が高いです。
IPセット変数、ポート変数、IPセット参照などの機能を用いたオブジェクトベースのファイアウォールになっており、再利用性や可読性が高いです。
Network Filrewallの標準ステートフルルールとセキュリティグループは似てますが、条件、方向、アクションの観点で以下の違いがあります。
Network Firewall | Security Group | |
---|---|---|
条件 | 5タプル
※ アドレスはIPセット変数や IPセット参照も指定可能 ※ ポートはポート変数も指定可能 |
3タプル
※ アドレスはセキュリティグループや プレフィクスリストも指定可能 |
方向 | 転送/すべて ※ すべて…送信先アドレス/ポート発、 送信元アドレス/ポート着の 反対方向パケットも対象とする意 | IN/OUT |
アクション | パス/ドロップ/アラート | パスのみ |
ロギング | Network Firewallのログ記録 | VPCフローログ |
ドメインリストルール
ドメイン名、CIDR 、プロトコル、アクションを定義します。
CIDR (=送信元アドレス) はデフォルトでVPC CIDRとなっていますが、カスタムで特定Serverのみドメインフィルタを適用するなども可能です。
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である通信は拒否する」という指定も可能です。
Suricata互換ルールは汎用性が極めて高く、一例としては「TCP/443であるが非TLSである通信は拒否する」という指定も可能です。
ステートレス
ステートフルルールとほぼ同様、優先度、プロトコル、送信元アドレス/ポート、送信先アドレス/ポート、アクションが定義できます。
ただし、定義された優先順で処理される、アドレス/ポートの変数が定義/参照できない、カスタムメトリクス/TCPフラグのオプションがあるなどの違いがあります。
ただし、定義された優先順で処理される、アドレス/ポートの変数が定義/参照できない、カスタムメトリクス/TCPフラグのオプションがあるなどの違いがあります。
まとめ
- AWS Network Firewallの構成パターンは、分散型/集約型デプロイモデルがある。
- AWS Network Firewallのフィルタ機能はステートフル/ステートレスルールがあり、ステートフルルールは標準ステートフル/ドメインリスト/Suricata互換ルールがある。