カスタムエージェントレスポンスコードの使用
- English
- 日本語
カスタムエージェントのレスポンスコードを使用すると、Web アプリケーションへのリクエストがブロックされたときに返される HTTP ステータスコードを指定できます。デフォルトでは、すべてのブロックアクションは 406 カスタムエージェントレスポンスコードを返します。このデフォルトの動作は次の方法で変更できます。
サイト (ワークスペース) のデフォルトのブロッキングレスポンスコードを更新します。ブロッキングアクションは、ルールで別のレスポンスコードが指定されていない限り、このレスポンスコードを使用します。
ブロックアクションを持ち、指定されたレスポンスコードを返すリクエストルールを作成します。
ブロックアクションを持ち、指定されたレスポンスコードを返す高度なレート制限ルールを作成します。
カスタムエージェントレスポンスコードは、トリガーされたルールに応じて、エッジで追加アクションを可能にします。たとえば、特定のカスタムエージェントレスポンスコードを使用して、CDN にリクエストを CAPTCHA にリダイレクトするよう指示することができます。Fastly CDN は、VCL でのカスタムエージェントレスポンスコードをサポートし、リクエストを他のページ (例: カスタムエラーページ) へリダイレクトします。
制約事項
カスタムエージェントレスポンスコードを扱う際には、以下の点に留意してください。
Essential プラットフォームでは、カスタムエージェントレスポンスコードは使用できません。
サポートされているカスタムエージェントレスポンスコードは301、302、および400 - 599です。
各サイト (ワークスペース) は、いつでも最大 5個の固有のレスポンスコードを持つことができます。
カスタムエージェントレスポンスコードを使用するルールの総数に制限はありません。
カスタムエージェントレスポンスコードは、エージェントおよびモジュールの最小バージョンが必要です。カスタムエージェントレスポンスコードを使用するルールにより、サポートされていないモジュールバージョンでリクエストをブロックするよう指示された場合、そのリクエストはブロックされません。
レスポンスコードの優先順位
ブロックアクションでは、ルールで異なるレスポンスコードが指定されていない限り、サイト (ワークスペース) のデフォルトのブロックレスポンスコードが使用されます。このルールの例は以下の通りです。
共通脆弱性識別子、API、またはアカウント乗っ取りシステムシグナルによってリクエストがブロックされると、WAF はデフォルトのブロッキングレスポンスコードを返します。
カスタムエージェントレスポンスコードを指定するルールによりリクエストがブロックされた場合、WAF はそのレスポンスコードを返します。
異なるカスタムエージェントレスポンスコードを持つルールが同一のリクエストをブロックする場合、最初に作成されたカスタムエージェントレスポンスコードが他の関連するカスタムエージェントレスポンスコードよりも優先されます。たとえば、あなたのサイト (ワークスペース) に次のルールがあるとします。
| ルール | 条件 | Action | 作成日 |
| E | IPアドレス (クライアント) が 192.0.2.0 に等しい | ブロックし 500 を返す | 2022年12月1日 |
| D | IPアドレス (クライアント) が 192.0.2.0 に等しい | ブロックし 400 を返す | 2022年10月1日 |
| C | IPアドレス (クライアント) が 192.0.2.0 に等しい | ブロックし 404 を返す | 2022年8月1日 |
| B | パスが /example/path と等しい | ブロックし 400 を返す | 2022年6月1日 |
| A | パスが /example/redirect と等しい | ブロックし 301 を返す | 2022年4月1日 |
この例では、192.0.2.0 の IP アドレスを持つクライアントが、Web アプリケーションの /custom-limits ページにリクエストを送信します。リクエストがルール C、D、E の条件を満たすため、リクエストはブロックされます。ルール C はルール D と E よりも前に作成されましたが、ルール D からの 400 レスポンスコードが返されます。これは、関連するレスポンスコードの中で最も古いものであるためです。具体的には、400 レスポンスコードが6月1日にルール B に最初に追加され、404 および 500 レスポンスコードがそれぞれ8月1日と12月1日に作成されました。
カスタムエージェントレスポンスコードの選択
カスタムエージェントレスポンスコードはアップストリームシステムに返される可能性があるため、アップストリームシステムの動作を確実に理解してください。具体的には、カスタムエージェントレスポンスコードを選択する際には、以下の点に留意してください。
一部の CDN は特定のレスポンスコードを自動的にキャッシュします。例えば、Fastly CDN は自動的に 301、302、404、および 410 レスポンスをキャッシュします。
401 レスポンスコードを使用すると、クライアントブラウザにユーザー名とパスワードの入力を求めるプロンプトが表示される場合があります。
400 や 403 などのレスポンスコードを使用すると、測定された「不正リクエスト」もしくは「禁止リクエスト」が人為的に増加する可能性があります。
5xx レンジのレスポンスコードは、一般的にサーバー接続またはアプリケーションエラーに関連付けられています。
最小サポートバージョン
以下のエージェントおよびモジュールのバージョンは、カスタムエージェントレスポンスコードをサポートしています。
| Name | 最小バージョン |
| エージェント | すべてをサポート |
| Apache | 1.8.0+ |
| Cloud Foundry | すべてをサポート |
| Envoy | すべてをサポート |
| Golang | 1.8.0+ |
| HAProxy | 1.2.0+ |
| Heroku | すべてをサポート |
| IBM Cloud | すべてをサポート |
| IIS | 2.2.0+ |
| Java | 2.1.1+ |
| .Net | 1.6.0+ |
| .Net Core | 1.3.0+ |
| Nginx | 1.4.0+ |
| NGINX C バイナリ | 1.0.44+ |
| Node.js | 1.6.1+ |
サポートされていないエージェントおよびモジュールは、カスタムエージェントレスポンスコードを使用するルールによってブロックされるべきリクエストを以下の方法で処理します。
| エージェント | モジュール | 結果 |
| サポート対象 | サポート対象 | カスタムエージェントレスポンスコードでブロック |
| サポート対象 | サポート対象外 | ブロックされない |
| サポート対象外 | サポート対象 | デフォルトのレスポンスコード 406 でブロック |
| サポート対象外 | サポート対象外 | ブロックされない |
| サポート (リバースプロキシ) | 該当なし | カスタムエージェントレスポンスコードでブロック |
| サポート対象外 (リバースプロキシ) | 該当なし | デフォルトのレスポンスコード 406 でブロック |
サイト (ワークスペース) のブロックレスポンスコードの変更
デフォルトでは、サイト (ワークスペース) のすべてのブロックアクションは カスタムエージェントレスポンスコード 406 を返します。このデフォルトの動作を変更するには、以下の手順を実行してください。
ヒント : 特定の条件下でサイト (ワークスペース) のデフォルトのブロック動作を上書きするには、リクエストルールもしくは高度なレート制限ルールを作成します。ルールにはブロックアクションが必要で、代替のブロックレスポンスコードを指定する必要があります。
- Next-Gen WAF control panel
- Fastly control panel
- Next-Gen WAF コンソールにログインします。
企業ナビゲーションバーから、[Corp Manage (企業管理)] メニューをクリックし、[Sites (サイト)] を選択します。
編集するサイトの名前をクリックします。
[Agent Configurations (エージェントの設定)] をクリックします。
[Blocking response code (ブロッキングレスポンスコード)] フィールドに、サイトのデフォルトのブロッキングレスポンスコードを入力します。すべてのブロックアクションはこのレスポンスコードを返しますが、ルールで異なるレスポンスコードが指定されている場合を除きます。サポートされているレスポンスコードは 301、302、400-599 です。
(オプション) ブロックレスポンスコードフィールドに
301もしくは302を入力した場合、リダイレクト URL フィールドにリダイレクト先の絶対 URL あるいは相対 URL を入力します。Update をクリックします。
リダイレクト・カスタム・エージェント・レスポンス・コードの使用
リダイレクト・カスタム・エージェント・レスポンス・コード (つまり 301 と 302) を使用すると、リダイレクト先の場所の絶対 URL もしくは相対 URL を指定できます。
リダイレクト URL は {{REQUESTID}} 変数の 1つのインスタンス (例 : https://www.example.com/blocked/?reqid={{REQUESTID}}) を渡すことができます。この変数が使用されると、クライアントがリダイレクト先へ送信される前に、関連するリクエストの ID に置き換えられます。
また、{{URL}} 変数を使用して既存のパスとクエリ文字列を維持することもできます (例 : https://www.example.com{{URL}})。VCL における req.url に似ています。