Dynamic IP Restrictions の使用
はじめに
Dynamic IP Restrictions for IIS 7.0 は、Web サーバーおよび Web サイトへのサービス拒否 (DoS) 攻撃と総当り (Brute Force) 攻撃を阻止するモジュールです。異常に多くの同時要求を行ったり、短期間で膨大な要求を行ったりする HTTP クライアントの IP アドレスを一時的にブロックすることで攻撃を防ぎます。
機能
Dynamic IP Restrictions の主な機能は次のとおりです。
- 同時要求数に基づいた IP アドレスのブロック - HTTP クライアントが多くの同時要求を実行すると、そのクライアントの IP アドレスが一時的にブロックされます。
- ある期間にわたる要求数に基づいた IP アドレスのブロック - HTTP クライアントが短期間に多くの要求を実行すると、そのクライアントの IP アドレスが一時的にブロックされます。
- さまざまな拒否の処理 - IP アドレスがブロックされる HTTP クライアントに返す応答を指定できます。モジュールでは、状態コード 403 と 404 を返すことができます。または、HTTP 接続を単純にドロップして、何の応答も返さないということもできます。
- 拒否された要求のログ記録 - 拒否された要求はすべて W3C 形式のログ ファイルに記録できます。
- 現在ブロックされている IP アドレスの表示 - 現在ブロックされている IP アドレスの一覧は、IIS マネージャーを使用して、または IIS RSCA API を使用して入手できます。
- IPv6 - モジュールは IPv6 アドレスを完全にサポートしています。
これらの機能に加えて、Dynamic IP Restrictions for IIS 7.0 には、IIS 7.0 組み込み IPv4 およびドメインの制限に存在していたものと同じ機能が用意されています。故に、Dynamic IP Restrictions は IPv4 およびドメインの制限の代わりとして提供されています。
インストール手順
Dynamic IP Restrictions の取得
- Dynamic IP Restrictions for IIS 7.0 x86 - Beta (英語)
- Dynamic IP Restrictions for IIS 7.0 x64 - Beta (英語)
前提条件
Windows Server 2008、Windows Vista SP1、Windows Server 2008 R2、または Windows 7
IPv4 およびドメインの制限があるコンピューターへのインストール
IIS の IPv4 アドレスおよび IP の制限モジュールが既に有効化されている場合、Dynamic IP Restrictions インストーラーはセットアップ プロセスを続行するために既存のモジュールをアンインストールする必要があります。既存の IPv4 構成は、旧モジュールが削除されて新しいモジュールがインストールされても保持されます。
Dynamic IP Restrictions の構成
Dynamic IP Restrictions は、IIS マネージャー、IIS 構成 API、またはコマンド ライン ツールの appcmd のいずれかを使用することで構成できます。
IIS マネージャーで Dynamic IP Restrictions の設定にアクセスするには、次の手順を使用します。
- IIS マネージャーを開きます
- サーバー全体の設定を構成する場合は、左側のツリー ビューでサーバー ノードを選択し、サイト固有の設定を構成する場合はサイト ノードを選択します。
- 機能ビューで、[Dynamic IP Address and Domain Restrictions] をクリックします。
- [Dynamic IP Address and Domain Restrictions] メイン ページで、常に許可する、または常に拒否する必要のある IP アドレスを指定できます。IP アドレスの許可エントリーを追加すると、そのアドレスは要求パターンが Dynamic Restrictions 設定に指定されている要求拒否基準を満たしていてもブロックされなくなります。IP アドレスの許可エントリーを追加すると、そのアドレスは Dynamic Restrictions の設定に関係なく常にブロックされます。
実際の Dynamic Restrictions の設定には右側の [操作] ウィンドウの [Edit Dynamic Restrictions] をクリックしてアクセスできます。
- [Dynamic IP Restrictions] ページを使用して、動的に IP アドレスをブロックする設定を次のように構成します。
同時要求数に基づく IP アドレスのブロック
このオプションを使用した場合、サーバーは、いずれのクライアントの IP アドレスに対しても、特定数 (構成可能) 同時要求のみ許可します。指定された制限を超える追加の要求は拒否されます。
この機能は、UI を使用するか、次のように appcmd コマンドを実行して同時要求の最大数を 2 に設定すれば簡単にテストできます。
%WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/ipSecurity /dynamicRestrictions.denyByConcurrentRequests.enabled:"True" /dynamicRestrictions.denyByConcurrentRequests.maxConcurrentRequests:"2" /commit:apphost
Web サイトのルート フォルダーに test.aspx ファイルを作成して、このファイルに以下のコンテンツを貼り付けます。
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(3000);
}
</script>
<html>
<head runat="server">
<title>Dynamic IP Restrictions Test</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<h1>Hello World!</h1>
</div>
</form>
</body>
</html>
この ASP.NET ページは応答が返される前に 3 秒スリープします。ファイルを保存して、Web ブラウザーを開き、https://localhost/test.aspx を要求し、F5 キーを続けて押すことでブラウザーを更新します。これによってブラウザーは 3 つ以上の同時要求を行うことになるため、サーバーから [403 許可されていません] というエラー メッセージが表示されます。
重要 : 実際の Web アプリケーションに対して同時要求の数を構成する際には、選択した制限を徹底的にテストして、有効な HTTP クライアントがブロックされないようにしてください。これは、AJAX が有効な Web ページがあり、メディア コンテンツとして機能するリッチなインターネット アプリケーションには特に重要です。
期間の要求数に基づく IP アドレスのブロック
このオプションを使用すると、ある期間にわたって特定数以上の要求を行う HTTP クライアントの IP アドレスからの要求は、サーバーによって拒否されます。この IP アドレスは、期間内の要求数が構成された制限を下回るまでブロックされたままとなります。
この機能をテストするには、IIS マネージャーを使用するか、appcmd コマンドを実行して [Maximum number of requests] を「5」に設定し、[Time period] を「5」に設定します。
%WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/ipSecurity /dynamicRestrictions.denyByRequestsOverTime.enabled:"True" /dynamicRestrictions.denyByRequestsOverTime.maxRequests:"5" /dynamicRestrictions.denyByRequestsOverTime.timeout:"00:00:05" /commit:apphost
Web ブラウザーを開き、https://localhost/welcome.png を要求して、F5 キーを連続して押してページを更新します。これによって 5 秒間に 6 回以上の要求が生成されるため、サーバーの応答として次の [403 許可されていません] という状態コードが表示されます。
10 秒待って、要求を行うと、IP アドレスが拒否リストから削除されるため要求は成功します。
重要 : 実際の Web アプリケーションに対して期間内に許可する要求数を構成する際には、選択した制限を徹底的にテストして、有効な HTTP クライアントがブロックされないようにしてください。これは、AJAX が有効な Web ページがあり、メディア コンテンツとして機能するリッチなインターネット アプリケーションには特に重要です。
拒否の処理
IP アドレスに対して要求を拒否する際に以下の処理を実行するようにモジュールを構成できます。
- クライアントに 403 (許可されていません) 応答を送信する
- クライアントに 404 (ファイルが見つかりません) 応答を送信する
- クライアントに応答を送信せずに HTTP 接続を閉じることで要求を中止する
現在ブロックされている IP アドレスの表示
現在ブロックされている IP アドレスを IIS マネージャーに表示するには、[Dynamic IP and Domain Restrictions] 機能ビューを開き、[Show Blocked Addresses] アクションをクリックします。
IIS マネージャーによって、現在ブロックされている IP アドレスが、その理由と共に表示されます。以下の [Add to allow list] および [Add to deny list] の操作を使用すると、一時的にブロックされている特定の IP アドレスを恒久的に許可または拒否することができます。