WAF カスタムエラーページの作成 (2020年)
最終更新日 2020-07-13
2021年6月30日をもって、Fastly WAF (WAF 2020) はレガシー (旧) 製品となりました。旧バージョンをご使用のすべての既存のお客様は、引き続きサポートをご利用いただけます。Fastly Next-Gen WAF (powered by Signal Sciences) は、お客様のアプリケーションやオリジンサーバーに対する疑わしい異常な Web トラフィックをプロアクティブに監視し、お客様のシステムを保護します。いずれも、コントロールパネルのダッシュボードまたはアプリケーション・プログラミング・インターフェイス (API) を介してコントロールできます。Fastly Next-Gen WAF 製品をご検討、またはそれらへの移行に興味がおありの場合は、sales@fastly.com または Fastly のアカウントチームまでお問い合わせください。
Fastly WAF のレスポンスオブジェクトによってブロックされたユーザーに表示されるカスタム HTML エラーページを作成することができます。レスポンスオブジェクトの属性には、HTTP ステータスコード、HTTP レスポンステキスト、コンテンツタイプ、および返されるコンテンツが含まれます。
この例では、以下の手順をご紹介します。
- 動的 VCL スニペットを使用して、カスタム
req.http.x-request-id
HTTP ヘッダーを作成する方法。 - リクエストと WAF のログの両方で使用できるように、そのヘッダーをグローバル変数として使用し、リクエストのトランザクション ID として保存する方法。
- シンセティックレスポンスを作成してユーザーに HTML レスポンスを表示する方法。
エラーページには、ユーザーがサポートチームに連絡する場合などに便利なトランザクション ID が表示されます。
動的 VCL スニペットの作成
トランザクション ID 用の動的 VCL スニペットを作成するには、ターミナルアプリケーションで次の API コールを実行します。
1
$ curl -X POST -s https://api.fastly.com/service/<Service ID>/version/<Editable Version Number>/snippet -H "Fastly-Key:FASTLY_API_TOKEN" -H 'Content-Type: application/x-www-form-urlencoded' --data $'name=my_dynamic_snippet_name&type=recv&dynamic=1&content=if (!req.http.x-request-id) {\n set req.http.x-request-id = digest.hash_sha256(now randomstr(64) req.http.host req.url req.http.Fastly-Client-IP server.identity);\n}'
シンセティックレスポンスの作成
カスタム HTML エラーページのシンセティックレスポンスを作成するには、次の手順に従ってください。
- Fastly コントロールパネルにログインします。
- Home ページから、該当するサービスを選択します。検索ボックスを使用して ID、名前、またはドメインで検索することができます。
- Edit configuration ボタンをクリックし、アクティブなバージョンをクローンするオプションを選択します。ドメインページが表示されます。
- Content をクリックします。Content ページが表示されます。
-
Set up advanced response ボタンをクリックします。Create a synthetic response ページが表示されます。
- 以下の要領で Create a synthetic response ページの各フィールドに入力します。
- Name フィールドに
WAF_Response
と入力します。 - Status メニューから
403 Forbidden
を選択します。 - MIME Type フィールドでは、レスポンスの Content-Type (
text/html
など) を指定します。 -
Response フィールドに、次の HTML を入力します。このレスポンスには
req.http.x-request-id
の値が表示されます。1 2 3 4 5 6 7 8 9 10 11
<html> <head> <title>403 Forbidden</title> </head> <body> <p>The requested URL was rejected.</p> <p>For additional information, please contact support and provide this reference ID:</p> <p>"} req.http.x-request-id {"</p> <p><button onclick='history.back();'>Go Back</button></p> </body> </html>
- Name フィールドに
- Create ボタンをクリックします。新しいレスポンスがレスポンスリストに表示されます。
- Activate ボタンをクリックして設定変更をデプロイします。
その他の注意点
- トランザクション ID の構成は変更可能ですが、指定された期間内 (1日など) に複数のリクエストに同じトランザクション ID 値が与えられる確率を最小限に抑える必要があります。
- 今回は例を簡略化するために VCL スニペットを使用しましたが、必ずしもカスタム WAF エラーページの作成に必要ではありません。代わりに、カスタム VCL を使用してトランザクション ID を作成することも可能です。
- 同じリクエストに対して生成された複数のメッセージが関連付けられるように、リクエストと WAF のログ形式にトランザクション ID を含めると便利です。