DoS 防御サービスの構成

App Engine のサービス拒否(DoS)防御サービスを利用すると、サービス拒否攻撃や類似した不正行為を受けたときに、アプリケーションの割り当て不足を回避できます。IP アドレスまたはサブネットを拒否リストに追加して、それらのアドレスまたはサブネットからルーティングされたリクエストが、アプリケーション コードが呼び出される前に破棄されるようにできます。課金の有無を問わず、このようなリクエストでリソースの割り当てが消費されることはありません。

デフォルトでは、App Engine は拒否リストに登録されたアドレスに汎用エラーページを表示します。代わりにカスタム レスポンスを配信するようにアプリを構成できます。

始める前に

アプリケーションの root ディレクトリに dos.yaml ファイルを作成します。拒否リストに登録された IP アドレスとネットワークをこのファイルで指定します。

DoS 拒否リストによりリクエストをブロックする

IP アドレスと IP サブネットを拒否リストに登録すると、アプリへのアクセスをブロックできます。

dos.yaml のエントリ数は 100 に制限されているため、DoS 攻撃を受けているときは、サブネット全体のブロックが必要になる場合があります。同じネットワークの複数の IP アドレスがアプリに対する DoS 攻撃の構成要素であることが検出された場合にも、これは効率的な防御方法です。

拒否リストに IP アドレスを登録する

IPv4 アドレスまたは IPv6 アドレスを dos.yaml ファイルで定義することによって、1 つ以上の IP アドレスがアプリにアクセスするのをブロックできます。次に例を示します。

blacklist:
- subnet: 192.0.2.1
  description: A single IPv4 address
- subnet: abcd::123:4567
  description: A single IPv6 address

分散型サービス拒否攻撃(DDoS)では、個別の IP アドレスではなく、サブネット全体をブロックする必要があります。

次のを参考にして dos.yaml を作成してください。

dos.yaml を作成したら、アプリにアップロードする必要があります。

拒否リストに IP サブネットを登録する

特定の IP サブネットからアプリへのアクセスをブロックするには、その IP サブネットを CIDR 形式で定義します。IP を CIDR に変換するツールを使用すると、CIDR 表記を使用するルールを簡単に作成できます。

blacklist:
- subnet: 1.2.3.4/24
  description: an IPv4 subnet
- subnet: abcd::123:4567/48
  description: an IPv6 subnet

次のを参考にして dos.yaml を作成してください。

dos.yaml を作成したら、アプリにアップロードする必要があります。

dos.yaml の例

dos.yaml ファイルの例を次に示します。

blacklist:
- subnet: 1.2.3.4
  description: a single IP address
- subnet: 1.2.3.4/24
  description: an IPv4 subnet
- subnet: abcd::123:4567
  description: an IPv6 address
- subnet: abcd::123:4567/48
  description: an IPv6 subnet

拒否リストに登録されたリクエストに対するカスタム エラー メッセージを作成する

デフォルトでは、DoS 攻撃防御サービスによりブロックされたリクエストに対して、汎用のエラーページが配信されます。分散型サービス拒否攻撃には、正当なユーザーのマシンが感染されて利用されることがあり、こうしたページを作成すればアクセスが拒否された理由をユーザーに説明できます。

  1. リクエストが DoS 防御サービスでブロックされたときに表示する静的ファイルを、アプリケーション ディレクトリに作成します。

  2. app.yaml ファイルで、静的ファイルへのパスを指定し、error_handlers 型の dos_api_denial を追加することにより、DoS レスポンスのエラーハンドラを指定します。

    error_handlers:
    - error_code: dos_api_denial
      file: dos-response.html
    

拒否リストのすべてのエントリを削除する

拒否リストのエントリをすべて削除するには:

  1. dos.yaml ファイルの内容が、次の行だけになるように編集します。

    blacklist:
    

    dos.yaml を削除しても、拒否リストは削除されません。

  2. dos.yaml を再デプロイして変更を反映します。

Console に DoS 拒否エラーを表示する

拒否されたリクエストの数をグラフで表示できます。

  1. Google Cloud Console で App Engine ダッシュボードに移動します。

    App Engine のエラー詳細グラフを開く

  2. 必要に応じグラフの時間枠を調整して、結果を表示します。

DoS 拒否リストをアップロードする

gcloud ツールを使用して、更新された DoS 構成ファイルを App Engine のアプリにデプロイします。たとえば、次のコマンドを実行して dos.yaml の内容で DoS 防御サービスを更新します。

 gcloud app deploy dos.yaml

次のステップ

  • 問題を迅速に特定しアラートを表示するよう Cloud Monitoring をセットアップする。
  • お客様の体験(2013 年 1 月)を読み、分散型サービス拒否攻撃(DDoS)への対処方法を確認する。