Java で DoS 防止サービスを構成する

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

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

始める前に

アプリケーションの WEB-INF ディレクトリに dos.xml ファイルを作成します。ブラックリストに登録する IP アドレスとネットワークをこのファイルで指定します。

DoS ブラックリストによるリクエストのブロック

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

dos.xml のエントリ数は 100 に制限されています。DoS 攻撃が発生している場合、サブネット全体のブロックが必要になる可能性があります。アプリに対する DoS 攻撃で同じネットワークの複数の IP アドレスが使用されている場合にも、これは有効な手段となります。

ブラックリストに IP アドレスを登録する

1 つ以上の IP アドレスにアプリへのアクセスを禁止するには、これらの IP アドレスを IPv4 または IPv6 形式で dos.xml ファイルに定義します。次に例を示します。

<?xml version="1.0" encoding="UTF-8"?>
<blacklistentries>
  <blacklist>
    <subnet>1.2.3.4</subnet>
    <description>a single IP address</description>
  </blacklist>
  <blacklist>
    <subnet>abcd::123:4567</subnet>
    <description>an IPv6 address</description>
  </blacklist>
</blacklistentries>

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

例については dos.xml リファレンスをご覧ください。

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

ブラックリストに IP サブネットを登録する

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

<?xml version="1.0" encoding="UTF-8"?>
<blacklistentries>
  <blacklist>
    <subnet>abcd::123:4567/48</subnet>
    <description>an IPv6 subnet</description>
  </blacklist
  <blacklist>
    <subnet>abcd::123:4567/48</subnet>
    <description>an IPv6 subnet</description>
  </blacklist
</blacklistentries>
例については dos.xml リファレンスをご覧ください。

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

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

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

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

  2. appengine-web.xml ファイルの中で、DoS レスポンスのエラーハンドラを定義します。静的ファイルのパスを指定するとともに、<static-error-handlers> のタイプとして dos_api_denial を追加してください。

    <static-error-handlers>
      <handler error-code="dos_api_denial" file="dos-response.html" />
    </static-error-handlers>
    

すべてのブラックリスト エントリを削除する

すべてのブラックリスト エントリを削除するには:

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

    <?xml version="1.0" encoding="UTF-8"?>
    <blacklistentries/>
    

    dos.xml を削除してもブラックリストは削除されません。

  2. dos.xml をもう一度デプロイして変更を反映します。

コンソールに DoS 拒否エラーを表示する

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

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

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

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

DOS ブラックリストをアップロードする

appcfg.sh を使用して DoS の構成をアップロードできます。appcfg.sh update を使用してアプリケーションを App Engine にアップロードすると、DoS 防止サービスは dos.xml 構成ファイルの内容を反映して更新されます。

DoS の構成ファイルだけを更新し、アプリケーションのそれ以外の部分はアップロードしない場合は、次のコマンドを使用します。

appcfg.sh update_dos [PATH_TO_CONFIG_FILE]/dos.xml

次のステップ

  • 問題を迅速に特定して警告するように、Stackdriver Monitoring を設定します。
  • ユーザーの体験を読んで、分散型サービス拒否攻撃(DDoS)(2013 年 1 月)の対処方法を確認します。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Java の App Engine スタンダード環境