AWS WAF を使用して、User-Agent ヘッダーを指定しない HTTP リクエストをブロックする方法
最終更新日: 2020 年 10 月 22 日
リクエストに User-Agent ヘッダーがないか、User-Agent ヘッダー値が空である HTTP リクエストをブロックしたいと考えています。AWS WAF または AWS WAF Classic を使用してこれらのリクエストをブロックするにはどうすればよいですか?
簡単な説明
デフォルトでは、AWS WAF フィルタは HTTP リクエストパラメータが存在するかどうかを確認しません。ただし、条件付きのルールを作成して、これらのパラメータを確認することはできます。
AWS WAF では、次の条件を使用できます。
AWS WAF Classic では、次の条件を使用できます。
解決方法
AWS WAF を使用する場合は、次の 2 つのオプションのいずれかを選択します。
オプション 1: 正規表現パターンセットを持つルールを作成する
まず、正規表現パターンセットを作成します。
- AWS WAF コンソールを開きます。
- ナビゲーションペインの [AWS WAF] で、[Regex pattern sets] を選択します。
- [Region] で、ウェブアクセスコントロールリスト (web ACL) を作成したリージョンを選択します。注意: web ACL が Amazon CloudFront 用に設定されている場合は、[Global] を選択します。
- [Create regex pattern sets] を選択します。
- [Regex pattern set name] に「testpattern」と入力します。
- [Regular expressions] に「.+」と入力します。
- [Create regex pattern set] を選択します。
正規表現パターンセットを web ACL に追加します。
- ナビゲーションペインの [AWS WAF] の下で、[Web ACL] を選択します。
- [Region] で、web ACL を作成したリージョンを選択します。注意: web ACL が Amazon CloudFront 用に設定されている場合は、[Global] を選択します。
- web ACL を選択します。
- [Rules] を選択し、[Add Rules]、[Add my own rules and rule groups] の順にクリックします。
- [Name] に「UA-Rule」と入力します。
- [If a request] に [doesn’t match the statement(NOT)] を選択します。
- [Statement] に [inspect header] を選択します。
- [Header field name] に「User-Agent」と入力します。
- [Match type] では [Matches pattern from regex pattern set] を選択します。
- [Regex pattern set] で [testpattern] を選択します。
- [Text transformation] はデフォルトの [None] のままにします。
- [Action] はデフォルトの [Block] のままにします。
- [Add Rule] をクリックします。
- web ACL でルールのプライオリティを選択します。
- [Save] を選択します。
オプション 2: サイズ制約条件でルールを作成する
注意: デフォルトでは、アカウントあたりの正規表現パターンセット数は 10 です。この AWS WAF の制限を超えた場合は、次のサイズ制約ソリューションを使用します。
- AWS WAF コンソールを開きます。
- ナビゲーションペインの [AWS WAF] の下で、[Web ACL] を選択します。
- [Region] で、web ACL を作成したリージョンを選択します。注意: web ACL が Amazon CloudFront 用に設定されている場合は、[Global] を選択します。
- web ACL を選択します。
- [Rules] を選択し、[Add Rules]、[Add my own rules and rule groups] の順にクリックします。
- [Name] に「UA-Rule2」と入力します。
- [If a request] に [doesn’t match the statement(NOT)] を選択します。
- [Statement] に [inspect header] を選択します。
- [Header field name] に「User-Agent」と入力します。
- [Match type] で、[Size greater than] を選択します。
- [Size] に、「0」 (ゼロ) と入力します。
- [Text transformation] はデフォルトの [None] のままにします。
- [Action] はデフォルトの [Block] のままにします。
- [Add Rule] をクリックします。
- web ACL でルールを保存する場所を選択します。
- [Save] を選択します。
注意: web ACL では、コアルールセット (CRS)を使用します。この AWS マネージドルールセットには、ユーザーエージェントを含まないリクエストをブロックするルールが含まれています。AWS マネージドルールの追加では、web ACL の WAF キャパシティーユニット (WCU) が使用されます。
AWS WAF Classic を使用する場合は、次の 2 つのオプションのいずれかを選択します。
オプション 1: 正規表現一致条件でルールを作成する
まず、正規表現一致条件を作成します。
- AWS WAF コンソールを開きます。
- [Switch to AWS WAF Classic] を選択します。
- ナビゲーションペインで、[String and Regex matching] を選択します。
- [Create condition] を選択します。
- [Name] に「UA-condition」と入力します。
- [Region] で、web ACL を作成したリージョンを選択します。注意: web ACL が Amazon CloudFront 用に設定されている場合は、[Global] を選択します。
- [Type] で、[Regex match] を選択します。
- [Part of the request to filter on] で、[Header] を選択します。
- [Header] で、[User-Agent] を選択します。
- [Transformation] で、 [None] を選択します。
- [Regex patterns to match to request] では、デフォルトの [Create regex pattern set] を選択したままにします。
- [New pattern set name] に 「testpattern」と入力します。
- 正規表現「.+」を入力し、プラス (+) 記号を選択します。注意: 正規表現 (regex) は、行末記号を除くすべての文字と照合します。
- [Create pattern set and add filter] を選択します。
- [Create] を選択します。
次に、ルールを作成し、条件を追加します。
- ナビゲーションペインで [Rules] を選択します。
- [Create rule] を選択します。
- [Name] に「UA-Rule」と入力します。注意: Amazon CloudWatch メトリクス名は、[Name] フィールドの入力内容に基づいて自動的に入力されます。
- [Rule type] で、[Regular rule] を選択します。
- [Region] で、web ACL を作成したリージョンを選択します。注意: web ACL が CloudFront 用に設定されている場合は、[Global] を選択します。
- [Add conditions] で、[does not] と [match at least one of the filters in the string match condition] を選択します。
- 条件ドロップダウンメニューから [UA-condition] を選択します。
- [Create] を選択します。
最後に、このルールを web ACL に追加します。
- ナビゲーションペインで、[Web ACLs] をクリックします。
- web ACL の名前を選択します。
- [Rules] タブを選択し、[Edit web ACL] をクリックします。
- [Rules] で、[UA-Rule] を選択します。
- [Add rule to web ACL] を選択します。
- [Action] に [Block] が選択されていることを確認します。
- [Default action] で、[Allow all requests to match any rules] を選択します。
- [Update] をクリックします。
オプション 2: サイズ制約条件でルールを作成する
注意: デフォルトでは、アカウントあたりのパターンセット数は 5 です。この AWS WAF の制限を超えた場合は、次のサイズ制約ソリューションを使用します。
まず、サイズ制約条件を作成します。
- AWS WAF コンソールを開きます。
- [Switch to AWS WAF Classic] をクリックします。
- ナビゲーションペインで、[Size constraints] を選択します。
- [Create condition] を選択します。
- [Name] に「UA-condition2」と入力します。
- [Region] で、web ACL を作成したリージョンを選択します。注意: web ACL が CloudFront 用に設定されている場合は、[Global] を選択します。
- [Part of the request to filter on] で、[Header] を選択します。
- [Header] に「User-Agent」と入力します。
- [Comparison operator] で、[Greater than] を選択します。
- [Size (Bytes)] では、デフォルト値の 0 のままにします。
- [Transformation] で、 [None] を選択します。
- [Add filter] を選択します。
- [Create] を選択します。
次に、ルールを作成し、条件を追加します。
- ナビゲーションペインで [Rules] を選択します。
- [Create rule] を選択します。
- [Name] に「UA-Rule2」と入力します。注意: CloudWatch メトリクス名は、[Name] フィールドの入力内容に基づいて自動的に入力されます。
- [Rule type] で、[Regular rule] を選択します。
- [Region] で、web ACL を作成したリージョンを選択します。注意: web ACL が CloudFront 用に設定されている場合は、[Global] を選択します。
- [Add conditions] で [does not] と [match at least one of the filters in the size constraint condition] を選択します。
- 条件ドロップダウンメニューから [UA-condition2] を選択します。
- [Create] を選択します。
最後に、このルールを web ACL に追加します。
- ナビゲーションペインで、[Web ACLs] をクリックします。
- web ACL の名前を選択します。
- [Rules] タブを選択し、[Edit web ACL] をクリックします。
- [Rules] で、[UA-Rule] を選択します。
- [Add rule to web ACL] を選択します。
- [Action] に [Block] が選択されていることを確認します。
- [Default action] で、[Allow all requests to match any rules] を選択します。
- [Update] をクリックします。