スキップしてコンテンツを表示

特定のドメインをブロックまたは許可するための Network Firewall ルールを設定する方法を教えてください。

所要時間4分
0

AWS Network Firewall を使用して、Amazon Virtual Cloud (Amazon VPC) 内のリソースからのアウトバウンドウェブトラフィックをフィルター処理しようとしています。

簡単な説明

AWS Network Firewall は、アウトバウンドウェブトラフィックに対するドメインベースのフィルター処理をサポートするために、アクションの順序または厳密な評価順序を使用します。ルールを設定するには、ステートフルドメインリストのルールグループまたは Suricata 互換文字列を使用します。ドメインインスペクションは、HTTP プロトコルと HTTPS プロトコルで機能します。

HTTP では、ファイアウォールはホストヘッダーを検査します。HTTPS では、ファイアウォールは TLS ハンドシェイクでサーバー名表示 (SNI) を使用します。ドメイン許可リストを使用すると、ネットワークファイアウォールは指定されたドメインにのみトラフィックを送信し、他のすべてのリクエストを破棄します。

詳細については、「AWS ネットワークファイアウォールでの Suricata 互換ルール文字列」および「AWS Network Firewall でのステートフルドメインリストのルールグループ」を参照してください。

解決策

ポリシーのドメインリストグループをデフォルトのアクション順序で設定する

次の手順を実行します。

  1. ファイアウォールを作成します
  2. Amazon VPC コンソールのナビゲーションペインにおいて、[ネットワークファイアウォール][ファイアウォールポリシー] を選択します。
  3. 編集するファイアウォールポリシーでデフォルトのアクション順序を選択します。
  4. [ステートフルルールグループ][アクション] を選択し、[ステートフルルールグループの作成] を選択します。
  5. [ステートフルルールグループの形式][ドメインリスト] を選択します。
    注: ステートフルルールの順序はポリシーから継承されるため、変更できません。[ルールの順序][アクション順序] と表示されます。
  6. 一意のルールグループ名を入力します。
  7. [キャパシティ予約] には、リストに含める推定ドメイン数を入力します。
    注: ルールグループを作成した後に、値を変更することはできません。
  8. [ドメインリスト][ドメイン名のソース] に照合するドメイン名を入力します。ドメインは、完全一致で定義できます (例: abc.example.com)。ワイルドカードでの定義も可能です (例: .example.com)。
  9. [CIDR 範囲] で次のいずれかのオプションを選択します。
    [デフォルト]: ファイアウォールと同じ VPC 内にあるソース IP アドレス。
    [カスタム]: リモートVPC 内のソース IP アドレス。[ソース IP CIDR の範囲] でファイアウォールが検査するソースサブネットを入力します。
  10. [プロトコル][HTTP と HTTPS] を選択します。
  11. [アクション][許可] を選択します。
  12. [ルールグループを作成] を選択します。

アクション順序評価を使用してポリシーに Suricata 互換 IPS ルールを定義する

次の手順を実行します。

  1. ファイアウォールを作成します
  2. Amazon VPC コンソールのナビゲーションペインにおいて、[ネットワークファイアウォール][ファイアウォールポリシー] を選択します。
  3. 編集するファイアウォールポリシーでデフォルトのアクション順序を選択します。
  4. [ステートフルルールグループ][アクション] を選択し、[ステートフルルールグループの作成] を選択します。
  5. [ステートフルールグループの形式][Suricata 互換ルール文字列] を選択します。
    注: ステートフルルールの順序はポリシーから継承されるため、変更できません。[ルールの順序][アクション順序] と表示されます。
  6. 一意のルールグループ名を入力します。
  7. [キャパシティ予約] には、リストに含める推定ドメイン数を入力します。
    注: ルールグループを作成した後に、値を変更することはできません。
  8. (オプション) Suricata 署名で使用するカスタムルール変数を定義します。
  9. (オプション) Suricata 署名で使用する IP セット参照を定義します。
  10. 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;)

注: 上記のルールにおいて、ドメインは実際に含めるドメインに置き換えてください。 [ルールを作成] を選択します。

注: ドメインルールには、多くの場合確立されたフローキーワードが含まれますが、かかるキーワードはフロー外のパケット交換におけるすべてのエッジケースに対応できるとは限りません。ルールリストの例を使用する前に、ルールをテストして想定通りに機能することを確認してください。

厳密な評価順序を含むポリシーにドメインリストルールグループを設定する

次の手順を実行します。

  1. ファイアウォールを作成します
  2. Amazon VPC コンソールのナビゲーションペインにおいて、[ネットワークファイアウォール][ファイアウォールポリシー] を選択します。
  3. 編集する、厳密な評価順序を含むファイアウォールポリシーを選択します。
  4. [ステートフルルールグループ][アクション] を選択し、[ステートフルルールグループの作成] を選択します。
  5. [ステートフルルールグループの形式][ドメインリスト] を選択します。
    注: ステートフルルールの順序はポリシーから継承されるため、変更できません。[ルール順序][厳密] と表示されます。
  6. 一意のルールグループ名を入力します。
  7. [キャパシティ予約] には、リストに含める推定ドメイン数を入力します。
    注: ルールグループを作成した後に、値を変更することはできません。
  8. [ドメインリスト][ドメイン名のソース] に照合するドメイン名を入力します。ドメインは、完全一致で定義できます (例: abc.example.com)。ワイルドカードでの定義も可能です (例: .example.com)。
  9. [CIDR 範囲] で次のいずれかのオプションを選択します。
    [デフォルト]: ファイアウォールと同じ VPC 内にあるソース IP アドレス。
    [カスタム]: リモートVPC 内のソース IP アドレス。[ソース IP CIDR の範囲] でファイアウォールが検査するソースサブネットを入力します。
  10. [プロトコル][HTTP と HTTPS] を選択します。
  11. [アクション][許可] を選択します。
  12. [ルールグループを作成] を選択します。
  13. ナビゲーションペインの [ネットワークファイアウォール][ファイアウォールポリシー] を選択します。
  14. 厳格な順序ポリシーを選択します。
  15. [ステートフルールの評価順序とデフォルトアクション][編集] を選択します。
  16. [デフォルトアクション][確立を削除] を選択し、[保存] を選択します。

厳密な評価順序を含むポリシー用の Suricata 互換 IPS ルールを定義する

次の手順を実行します。

  1. ファイアウォールを作成します
  2. Amazon VPC コンソールのナビゲーションペインにおいて、[ネットワークファイアウォール][ファイアウォールポリシー] を選択します。
  3. 編集する、厳密な評価順序を含むファイアウォールポリシーを選択します。
  4. [ステートフルルールグループ][アクション] を選択し、[ステートフルルールグループの作成] を選択します。
  5. [ステートフルールグループの形式][Suricata 互換ルール文字列] を選択します。
    注: ステートフルルールの順序はポリシーから継承されるため、変更できません。[ルール順序][厳密] と表示されます。
  6. 一意のルールグループ名を入力します。
  7. [キャパシティ予約] には、リストに含める推定ドメイン数を入力します。
    注: ルールグループを作成した後に、値を変更することはできません。
  8. (オプション) 定義した Suricata 署名で使用するカスタムルール変数を定義します。
  9. (オプション) 定義した Suricata 署名で使用する IP セット参照を定義します。
  10. 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):

関連情報

Network Firewall のファイアウォールポリシー

ステートフルルールグループを作成する

Network Firewall 用のステートフルルール例

AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ