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

所要時間4分
0

AWS Network Firewall を使用して、Amazon Virtual Cloud (Amazon VPC) 内にあるリソースからの、アウトバウンドウェブトラフィックをフィルタリングしたいと考えています。

簡単な説明

Network Firewall のポリシーとルールグループは、デフォルトのアクション順序または厳密な評価順序のどちらかのルール評価順序によって定義されます。デフォルトのアクション順序に設定されたファイアウォールポリシーは、パス、ドロップ、拒否、アラートの順序でルールを評価します。デフォルトポリシーのステートフルデフォルトアクションは「パス」です。

厳密な評価順序では、ルールグループは優先順位の低いものから順に評価されます。グループ内のルールは、設定された順序で評価されます。厳密な順序ポリシーのステートフルデフォルトアクションは、確立されたドロップの設定などの設定が可能です。デフォルトルールグループはデフォルトのアクション順序ポリシーに関連付けられ、厳密な順序ルールグループは厳密な評価順序ポリシーに関連付けられます。

特定のドメインへのアクセスを許可またはブロックするように Network Firewall を構成できます。これは、デフォルトのアクション順序または厳密な評価順序のいずれかを使用するポリシーまたはルールに対して、次のいずれかを使用して実行できます。

  • ステートフルドメインリストルールグループ
  • Suricata 対応の IPS ルール

ステートフルドメイン名検査は、HTTP プロトコルと HTTPS プロトコルに対して設定できます。HTTP の場合、要求は暗号化されず、Network Firewall は HTTP ホストヘッダーのホスト名値を確認できます。HTTPS の場合、Network Firewall は TLS ハンドシェイクの Server Name Indication (SNI) 拡張子を使用してホスト名を決定します。次に、ファイアウォールはホスト名 (またはドメイン名) を設定された HTTP ルールまたは TLS ルールと比較します。

ドメイン許可リストを使用すると、ファイアウォールは指定されたドメインにのみ HTTP リクエストまたは HTTPS リクエストを渡します。他のすべてのドメインへのリクエストはドロップされます。

解決策

既定のアクション順序

デフォルトのアクション順序のポリシーでは、特定のドメインへの HTTP リクエストおよび HTTPS リクエストを許可するようにドメインリストルールグループを設定します。

1.Amazon VPC コンソールを開きます。

2.ファイアウォールを作成します

3.ナビゲーションペインの [Network Firewall] で、[ファイアウォールポリシー] を選択します。

4.編集するデフォルトのアクション順序ファイアウォールポリシーを選択します。

5.[ステートフルルールグループ]] で [アクション] を選択し、[ステートフルルールグループの作成] を選択します。

6.一意のルールグループ名を入力します。

7.[キャパシティ予約] には、リストに含まれるドメインの推定数を入力します。この値は、ルールグループの作成後に変更することはできません。

8.ステートフルルールグループのオプションについては、[ドメインリスト] を選択します。
注:ステートフルルールの順序はポリシーから継承されるため、変更できません。[ルール順序][デフォルト] として表示されます。

9.[ドメインリスト][ドメイン名ソース] に、照合対象となるドメイン名を入力します。ドメインとしては、abc.example.com のように完全に一致するドメインが定義できます。.example.com のようにワイルドカードとしての定義も可能です。

10.送信元 IP がファイアウォールと同じ VPC に存在する場合は、[送信元 IP タイプ][デフォルト] を選択します。送信元 IP がリモート VPC に存在する場合は、[定義済み] を選択します。[定義済み] を選択する場合は、[送信元 IP CIDR 範囲] に、ファイアウォールの検査対象とする送信元サブネットを入力します。

11.[プロトコル] で、[HTTP と HTTPS] を選択します。

12.[アクション][許可] を選択します。

13.[作成してポリシーに追加] を選択します。

HTTP と HTTPS の Suricata 互換 IPS ルールを手動で定義するには、ルールグループのデフォルトのアクション順序である Suricata 互換 IPS ルールを設定します。

1.Amazon VPC コンソールを開きます。

2.ファイアウォールを作成します

3.ナビゲーションペインの [Network Firewall] で、[ファイアウォールポリシー] を選択します。

4.編集するデフォルトのアクション順序ファイアウォールポリシーを選択します。

5.[ステートフルルールグループ][アクション][ステートフルルールグループの作成] の順に選択します。

6.一意のルールグループ名を入力します。

7.[キャパシティ予約] には、リストに含めることになるルール数を入力します。この値は、ルールグループの作成後に変更することはできません。

8.[ステートフルールグループのオプション] で、[Suricata 互換 IPS ルール] を選択します。
注:ステートフルルールの順序はポリシーから継承されるため、変更できません。[ルール順序][デフォルト] として表示されます。

9.(オプション) Suricata 署名で使用するカスタムルール変数を定義します。

10.(オプション) Suricata 署名で使用する IP セット参照を定義します。

11.**[Suricata 互換 IPS ルール]**に、次のルールを入力します。ドメインを、実際に送信先とする特定のドメインに変更します。

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;)

12.[作成してポリシーに追加] を選択します。
**注:**確立されたフローキーワードはドメインルールでは一般的に使用されるものですが、フロー外のパケット交換における、エッジケースのすべてに対応できるとは限りません。ルールリストの例を使用する前に、ルールをテストして、期待どおりに機能することを確認してください。

厳密な評価順序

厳密な評価順序のポリシーでは、特定のドメインへの HTTP リクエストおよび HTTPS リクエストを許可するように、ドメインリストルールグループを設定します。

1.Amazon VPC コンソールを開きます。

2.ファイアウォールを作成します

3.ナビゲーションペインの [Network Firewall] で、[ファイアウォールポリシー] を選択します。

4.編集する厳密な評価順序のファイアウォールポリシーを選択します。

5.[ステートフルルールグループ][アクション][ステートフルルールグループの作成] の順に選択します。

6.一意のルールグループ名を入力します。

7.[キャパシティ予約] には、リストに含めることになるドメインの数を入力します。この値は、ルールグループの作成後に変更することはできません。

8.ステートフルルールグループのオプションについては、[ドメインリスト] を選択します。
注:ステートフルルールの順序はポリシーから継承されるため、変更できません。[ルール順序][厳密] として表示されます。

9.[ドメインリスト][ドメイン名ソース] に、照合対象となるドメイン名を入力します。ドメインとしては、abc.example.com のように完全に一致するドメインが定義できます。.example.com のようにワイルドカードとしての定義も可能です。

10.送信元 IP がファイアウォールと同じ VPC に存在する場合は、[送信元 IP タイプ][デフォルト] を選択します。送信元 IP がリモート VPC に存在する場合は、[定義済み] を選択します。[定義済み] を選択する場合は、[送信元 IP CIDR 範囲] に、ファイアウォールの検査対象とする送信元サブネットを入力します。

11.[プロトコル] で、[HTTP と HTTPS] を選択します。

12.[アクション][許可] を選択します。

13.[作成してポリシーに追加] を選択します。

14.ナビゲーションペインの [Network Firewall] で、[ファイアウォールポリシー] を選択します。

15.このルールグループを追加した厳密な順序ポリシーを選択してください。

16.[ステートフルールの評価順序とデフォルトアクション] で、[編集] を選択します。

17.[デフォルトアクション] で、[確立されたドロップ] を選択します。次に、[保存] を選択します。

HTTP と HTTPS の Suricata 互換 IPS ルールを手動で定義するには、ルールグループの中で、厳密な評価順序の Suricata 互換 IPS ルールを設定します。

1.Amazon VPC コンソールを開きます。

2.ファイアウォールを作成します

3.ナビゲーションペインの [Network Firewall] で、[ファイアウォールポリシー] を選択します。

4.編集する厳密な評価順序のファイアウォールポリシーを選択します。

5.[ステートフルルールグループ][アクション][ステートフルルールグループの作成] の順に選択します。

6.一意のルールグループ名を入力します。

7.[キャパシティ予約] には、リストに含めることになるルール数を入力します。この値は、ルールグループの作成後に変更することはできません。

8.[ステートフルールグループのオプション] で、[Suricata 互換 IPS ルール] を選択します。
注:ステートフルルールの順序はポリシーから継承されるため、変更できません。[ルール順序][厳密] として表示されます。

9.(オプション) 定義した Suricata 署名で使用するカスタムルール変数を定義します。

10.(オプション) 定義した Suricata 署名で使用する IP セット参照を定義します。

11.**[Suricata 互換 IPS ルール]**に、次のルールを入力します。ドメインを、実際に送信先とする特定のドメインに変更します。

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;)

12.[作成してポリシーに追加] を選択します。

13.ナビゲーションペインの [Network Firewall] で、[ファイアウォールポリシー] を選択します。

14.このルールグループを追加した厳密な順序ポリシーを選択してください。

15.[ステートフルールの評価順序とデフォルトアクション] で、[編集] を選択します。

16.[デフォルトアクション] で、[確立されたドロップ] を選択します。次に、[保存] を選択します。

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

検証

対象のドメイン対してにテストコマンドを実行することで、設定した内容に基づいてドメインが正しく処理されていることを確認できます。

次の例では、ドメインhttps://example.com が許可されているので、クライアントに対して 200 OK 応答が返されます。

curl -v --silent https://example.com --stderr - | grep 200
< HTTP/2 200

次の例では、HTTP ドメイン http://www.google.com はブロックされています。

curl -v http://www.google.com
* 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 ドメイン https://www.google.com はブロックされています。

curl -v https://www.google.com
* Trying 172.253.115.147:443...
* Connected to www.google.com (http://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公式
AWS公式更新しました 1年前
コメントはありません