Java 8 の DoS 防御サービスの構成

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

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

始める前に

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

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

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

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

拒否リストに 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 攻撃防御サービスによりブロックされると、汎用のエラーページが表示されます。分散型サービス拒否攻撃には、正当なユーザーのマシンが感染されて利用されることがあり、こうしたページを作成すればアクセスが拒否された理由をユーザーに説明できます。

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

  2. appengine-web.xml ファイルで、静的ファイルへのパスを指定し、<static-error-handlers> 型の dos_api_denial を追加することにより、DoS レスポンスのエラーハンドラを指定します。

    <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 を再デプロイして変更を反映します。

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

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

  1. Google Cloud 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

次のステップ

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