Global outage event
If you're experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
特定のドメインをブロックまたは許可するための Network Firewall ルールを設定する方法を教えてください。
AWS Network Firewall を使用して、Amazon Virtual Cloud (Amazon VPC) 内のリソースからのアウトバウンドウェブトラフィックをフィルター処理しようとしています。
簡単な説明
AWS Network Firewall は、アウトバウンドウェブトラフィックに対するドメインベースのフィルター処理をサポートするために、アクションの順序または厳密な評価順序を使用します。ルールを設定するには、ステートフルドメインリストのルールグループまたは Suricata 互換文字列を使用します。ドメインインスペクションは、HTTP プロトコルと HTTPS プロトコルで機能します。
HTTP では、ファイアウォールはホストヘッダーを検査します。HTTPS では、ファイアウォールは TLS ハンドシェイクでサーバー名表示 (SNI) を使用します。ドメイン許可リストを使用すると、ネットワークファイアウォールは指定されたドメインにのみトラフィックを送信し、他のすべてのリクエストを破棄します。
詳細については、「AWS ネットワークファイアウォールでの Suricata 互換ルール文字列」および「AWS Network Firewall でのステートフルドメインリストのルールグループ」を参照してください。
解決策
ポリシーのドメインリストグループをデフォルトのアクション順序で設定する
次の手順を実行します。
- ファイアウォールを作成します。
- Amazon VPC コンソールのナビゲーションペインにおいて、[ネットワークファイアウォール] で [ファイアウォールポリシー] を選択します。
- 編集するファイアウォールポリシーでデフォルトのアクション順序を選択します。
- [ステートフルルールグループ] で [アクション] を選択し、[ステートフルルールグループの作成] を選択します。
- [ステートフルルールグループの形式] で [ドメインリスト] を選択します。
注: ステートフルルールの順序はポリシーから継承されるため、変更できません。[ルールの順序] は [アクション順序] と表示されます。 - 一意のルールグループ名を入力します。
- [キャパシティ予約] には、リストに含める推定ドメイン数を入力します。
注: ルールグループを作成した後に、値を変更することはできません。 - [ドメインリスト] の [ドメイン名のソース] に照合するドメイン名を入力します。ドメインは、完全一致で定義できます (例: abc.example.com)。ワイルドカードでの定義も可能です (例: .example.com)。
- [CIDR 範囲] で次のいずれかのオプションを選択します。
[デフォルト]: ファイアウォールと同じ VPC 内にあるソース IP アドレス。
[カスタム]: リモートVPC 内のソース IP アドレス。[ソース IP CIDR の範囲] でファイアウォールが検査するソースサブネットを入力します。 - [プロトコル] で [HTTP と HTTPS] を選択します。
- [アクション] で [許可] を選択します。
- [ルールグループを作成] を選択します。
アクション順序評価を使用してポリシーに Suricata 互換 IPS ルールを定義する
次の手順を実行します。
- ファイアウォールを作成します。
- Amazon VPC コンソールのナビゲーションペインにおいて、[ネットワークファイアウォール] で [ファイアウォールポリシー] を選択します。
- 編集するファイアウォールポリシーでデフォルトのアクション順序を選択します。
- [ステートフルルールグループ] で [アクション] を選択し、[ステートフルルールグループの作成] を選択します。
- [ステートフルールグループの形式] で [Suricata 互換ルール文字列] を選択します。
注: ステートフルルールの順序はポリシーから継承されるため、変更できません。[ルールの順序] は [アクション順序] と表示されます。 - 一意のルールグループ名を入力します。
- [キャパシティ予約] には、リストに含める推定ドメイン数を入力します。
注: ルールグループを作成した後に、値を変更することはできません。 - (オプション) Suricata 署名で使用するカスタムルール変数を定義します。
- (オプション) Suricata 署名で使用する IP セット参照を定義します。
- Suricata 互換ルールの文字列に次のルールを入力します。
pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; dotprefix; content:".amazonaws.com"; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:1; rev:1;) pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; content:"example.com"; startswith; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:2; rev:1;) pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; dotprefix; content:".amazonaws.com"; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:3; rev:1;) pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; content:"example.com"; startswith; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:4; rev:1;) drop http $HOME_NET any -> $EXTERNAL_NET any (http.header_names; content:"|0d 0a|"; startswith; msg:"not matching any HTTP allowlisted FQDNs"; flow:to_server, established; sid:5; rev:1;) drop tls $HOME_NET any -> $EXTERNAL_NET any (msg:"not matching any TLS allowlisted FQDNs"; flow:to_server, established; sid:6; rev:1;)
注: 上記のルールにおいて、ドメインは実際に含めるドメインに置き換えてください。 [ルールを作成] を選択します。
注: ドメインルールには、多くの場合確立されたフローキーワードが含まれますが、かかるキーワードはフロー外のパケット交換におけるすべてのエッジケースに対応できるとは限りません。ルールリストの例を使用する前に、ルールをテストして想定通りに機能することを確認してください。
厳密な評価順序を含むポリシーにドメインリストルールグループを設定する
次の手順を実行します。
- ファイアウォールを作成します。
- Amazon VPC コンソールのナビゲーションペインにおいて、[ネットワークファイアウォール] で [ファイアウォールポリシー] を選択します。
- 編集する、厳密な評価順序を含むファイアウォールポリシーを選択します。
- [ステートフルルールグループ] で [アクション] を選択し、[ステートフルルールグループの作成] を選択します。
- [ステートフルルールグループの形式] で [ドメインリスト] を選択します。
注: ステートフルルールの順序はポリシーから継承されるため、変更できません。[ルール順序] は [厳密] と表示されます。 - 一意のルールグループ名を入力します。
- [キャパシティ予約] には、リストに含める推定ドメイン数を入力します。
注: ルールグループを作成した後に、値を変更することはできません。 - [ドメインリスト] の [ドメイン名のソース] に照合するドメイン名を入力します。ドメインは、完全一致で定義できます (例: abc.example.com)。ワイルドカードでの定義も可能です (例: .example.com)。
- [CIDR 範囲] で次のいずれかのオプションを選択します。
[デフォルト]: ファイアウォールと同じ VPC 内にあるソース IP アドレス。
[カスタム]: リモートVPC 内のソース IP アドレス。[ソース IP CIDR の範囲] でファイアウォールが検査するソースサブネットを入力します。 - [プロトコル] で [HTTP と HTTPS] を選択します。
- [アクション] で [許可] を選択します。
- [ルールグループを作成] を選択します。
- ナビゲーションペインの [ネットワークファイアウォール] で [ファイアウォールポリシー] を選択します。
- 厳格な順序ポリシーを選択します。
- [ステートフルールの評価順序とデフォルトアクション] で [編集] を選択します。
- [デフォルトアクション] で [確立を削除] を選択し、[保存] を選択します。
厳密な評価順序を含むポリシー用の Suricata 互換 IPS ルールを定義する
次の手順を実行します。
- ファイアウォールを作成します。
- Amazon VPC コンソールのナビゲーションペインにおいて、[ネットワークファイアウォール] で [ファイアウォールポリシー] を選択します。
- 編集する、厳密な評価順序を含むファイアウォールポリシーを選択します。
- [ステートフルルールグループ] で [アクション] を選択し、[ステートフルルールグループの作成] を選択します。
- [ステートフルールグループの形式] で [Suricata 互換ルール文字列] を選択します。
注: ステートフルルールの順序はポリシーから継承されるため、変更できません。[ルール順序] は [厳密] と表示されます。 - 一意のルールグループ名を入力します。
- [キャパシティ予約] には、リストに含める推定ドメイン数を入力します。
注: ルールグループを作成した後に、値を変更することはできません。 - (オプション) 定義した Suricata 署名で使用するカスタムルール変数を定義します。
- (オプション) 定義した Suricata 署名で使用する IP セット参照を定義します。
- Suricata 互換ルールの文字列に次のルールを入力します。
pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; dotprefix; content:".amazonaws.com"; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:1; rev:1;) pass http $HOME_NET any -> $EXTERNAL_NET any (http.host; content:"example.com"; startswith; endswith; msg:"matching HTTP allowlisted FQDNs"; flow:to_server, established; sid:2; rev:1;) pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; dotprefix; content:".amazonaws.com"; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:3; rev:1;) pass tls $HOME_NET any -> $EXTERNAL_NET any (tls.sni; content:"example.com"; startswith; nocase; endswith; msg:"matching TLS allowlisted FQDNs"; flow:to_server, established; sid:4; rev:1;)
注: 上記のルールにおいて、ドメインは実際に含めるドメインに置き換えてください。 [ルールグループを作成] を選択します。 ナビゲーションペインの [ネットワークファイアウォール] で [ファイアウォールポリシー] を選択します。 厳格な順序ポリシーを選択します。 [ステートフルールの評価順序とデフォルトアクション] で [編集] を選択します。 [デフォルトアクション] で [確立を削除] を選択し、[保存] を選択します。
注: ドメインルールには、多くの場合確立されたフローキーワードが含まれますが、このキーワードは通常のフロー外でパケットが交換される、すべてのエッジケースをキャプチャするとは限りません。ルールリストの例を使用する前に、ルールをテストして想定通りに機能することを確認してください。
設定をテストする
設定が機能するかどうかをテストするには、指定したドメインに対して curl コマンドを実行します。
次のコマンド例では、https://example.com というドメインへの HTTPS アクセスをテストします。
curl -v --silent https://example.com --stderr - | grep 200
アクセスが許可されている場合、次の出力が表示されます。
< HTTP/2 200
次のコマンド例では、http://www.google.com への HTTP アクセスをテストします。
curl -v http://www.google.com
次の出力例は、GET リクエストで接続が停止したため、ファイアウォールルールにより HTTP トラフィックがブロックされたことを示しています。
* Trying 172.253.115.99:80... * Connected to www.google.com (http://www.google.com/) (172.253.115.99) port 80 (#0) > GET / HTTP/1.1 > Host: www.google.com (http://www.google.com/) > User-Agent: curl/7.79.1 > Accept: /
次のコマンド例では、https://www.google.com への HTTPS アクセスをテストします。
curl -v https://www.google.com
出力は、TLS ハンドシェイク中に接続が停止したため、HTTPS トラフィックがブロックされたことを示しています。
* Trying 172.253.115.147:443... * Connected to www.google.com (https://www.google.com/) (172.253.115.147) port 443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH * successfully set certificate verify locations: * CAfile: /etc/pki/tls/certs/ca-bundle.crt * CApath: none * TLSv1.2 (OUT), TLS header, Certificate Status (22): * TLSv1.2 (OUT), TLS handshake, Client hello (1):
関連情報
- 言語
- 日本語
