カスタム WAF エラーページの作成

Fastly WAF レスポンスオブジェクトによってブロックされたユーザーに表示されるカスタム HTML エラーページを作成できます。レスポンスオブジェクトの属性には、HTTP ステータスコード、HTTP レスポンステキスト、コンテンツタイプ、および返されるコンテンツが含まれます。

この例では、次の手順を紹介します。

  • 動的 VCL スニペットを使用して、カスタム req.http.x-request-idHTTP ヘッダーを作成する方法。
  • リクエストと 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 エラーページのシンセティックレスポンスを作成するには、次の手順に従ってください。

  1. Fastly コントロールパネルにログインし。
  2. All services ページから適切なサービスを選択します。検索ボックスを使用すると、ID、名称、ドメインでの検索が行えます。
  3. Edit configuration ボタンをクリックし、オプションを選択してアクティブバージョンをクローンします。設定画面が開きます。
  4. Content のリンクをクリックし、Content 設定画面を開きます。
  5. Set up advanced response ボタンをクリックします。Create a synthetic response ページが表示されます。

    Create a synthetic response ページ

  6. 以下のとおりに Create a synthetic responses フィールドに入力します。
    • 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>
      
  7. Create ボタンをクリックします。新しいレスポンスは、レスポンスの一覧に表示されます。
  8. Activate ボタンをクリックしてサービスをデプロイします。

その他の注意点

  • トランザクション ID の構成は変更可能ですが、指定された期間内 (1日など) に複数のリクエストに同じトランザクション ID 値が与えられる確率を最小限に抑える必要があります。
  • 今回は例を簡略化するために VCL スニペットを使用しましたが、必ずしもカスタム WAF エラーページにに必要なものではありません。代用として、カスタム VCL を使用してトランザクション ID を作成できます。
  • 同じリクエストに対して生成された複数のメッセージが関連付けられるように、リクエストと WAF ログ形式にトランザクション ID を含めると便利です。
Back to Top