Windows Azure Web サイトで動的 IP アドレス制限を構成する


このポストは、8 月 28 日に投稿された Configuring Dynamic IP Address Restrictions in Windows Azure Web Sites の翻訳です。

Windows Azure Web サイトが最近更新され、IIS8 用の Dynamic IP Restrictions モジュールが使用できるようになりました。これにより、お客様の Web サイトに Dynamic IP Restrictions (DIPR) 機能を構成し、有効化できるようになりました。

この IIS8 の機能の概要については、下記のページからご確認いただけます。

http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-dynamic-ip-address-restrictions (英語)

DIPR には、主に次の 2 つの保護機能があります。

  • 同時要求数に基づいて IP アドレスをブロックする
  • 一定時間内の要求数に基づいて IP アドレスをブロックする

また、追加構成することで、DIPR の動作を変化させることもできます。たとえば、要求をブロックした場合に返す HTTP エラーのステータス コードの種類を変更できます。

Azure Web サイトでは、該当する Web サイトのルート フォルダーに存在する web.config ファイルに構成セクションを追加して DIRP を構成します。

同時要求数 (つまり、任意の時点で同時に処理中のアクティブな要求) に基づいて接続をブロックしたい場合には、Web サイトの web.config ファイルに次の構成スニペットを追加します。

denyByConcurrentRequests 要素の enabled 属性を true に設定すると、maxConcurrentRequests 属性で設定された値 (上の例では 10) を超える数の同時要求がある場合に、IIS が自動的に当該 IP アドレスからの要求のブロックを開始します。

また、一定時間内に受け取った要求の合計数に基づいて接続をブロックしたい場合には、次の構成スニペットを使用します。

上の例では、denyByRequestRate 要素の enabled 属性を true に設定し、requestIntervalInMilliseconds で定義された時間 (上の例では 2000 ミリ秒) 内に要求された接続数の合計が maxRequests 属性で定義された値 (上の例では 10) を超えた場合に、IIS が当該 IP アドレスからの要求をブロックします。つまり、2 秒以内に 10 を超える要求を送信したクライアントがブロックされます。

最後になりますが、両方のブロック機能を同時に使用することもできます。下のスニペットでは、処理中の要求数が 10 を超えた場合、または 5 秒以内に 20 を超える要求を受け取った場合のいずれでも、DIPR がクライアントをブロックします。

DIPR が IP アドレスをブロックすると、そのときの時間枠内ではブロックが継続され、時間枠が終了した後に、該当する IP アドレスから Web サイトへの要求が再び有効になります。たとえば、requestIntervalInMilliseconds が 5000 (5 秒) に設定されていて、IP アドレスのブロックが2 秒経過時点で開始された場合、そのときの時間枠の残りの 3 秒間は、ブロックが継続されます。

dynamicIpSecurity 要素の denyAction 属性の設定により、クライアントをブロックした際に返すエラーの種類をカスタマイズすることができます。denyAction では、次の値を設定できます。

  • AbortRequest (HTTP ステータス コード 0 を返す)
  • Unauthorized (HTTP ステータス コード 401 を返す)
  • Forbidden (HTTP ステータス コード 403 を返す)。これが既定の設定です。
  • NotFound (HTTP ステータス コード 404 を返す)

たとえば、既定の設定である Forbidden 403 ではなく 404 のステータス コードを返すようにしたい場合、次のように構成します。

ここで、「Web アプリケーションが Azure Web サイトで実行されている場合に、DIPR はどの IP アドレスを見て処理を実行しているのか?」という疑問を持たれる方もいらっしゃるかと思います。Windows Azure で実行されている Web アプリケーションは、さまざまなロード バランサーを介しています。このため、Web サイトに示されるクライアント IP アドレスは、実際にクライアントがインターネットで使用しているアドレスではなく、上流にあるロード バランサーのアドレスではないかとお考えになるかもしれません。しかし、Azure Web サイトはユーザーに代わって自動的に必要な変換を行うため、DIPR モジュールが「見ている」クライアントの IP アドレスが、HTTP 要求を送信したインターネット クライアントの実際の IP アドレスであることは確実です。

Comments (0)

Skip to main content