動的 IP セキュリティ <dynamicIpSecurity>

概要

<dynamicIpSecurity> 要素は、悪意のある Web 要求をブロックする動的な手段を提供します。 動的 IP 制限を使用すると、管理者は、ブロックする必要がある IP アドレスを識別する必要がなくなります。 代わりに、管理者は、設定された条件を満たす任意の IP アドレスをブロックするようにシステムを構成できます。 これには、そのクライアントからの同時 HTTP 接続要求の数が特定の数を超えた場合のリモート クライアントのブロックや、一定期間に受信した要求の数が特定の数を超えた場合のクライアントのブロックが含まれます。 動的 IP 制限は、サーバー レベルまたはサイト レベルで構成できます。

管理者は、クライアントがブロックされた場合に返される HTTP 応答状態コード (承認されていない (401)、禁止 (403)、見つからない (404)) を指定できます。 [拒否時の動作の種類] を [中止] に設定して、理由を示さずに接続を削除することもできます。

プロキシ モードを有効にした場合、HTTP プロキシまたはロード バランサーを介して Web サーバーに接続するクライアントの送信元 IP アドレスを識別することで、要求をブロックできます。 これを行うには、x-forwarded-for-HTTP ヘッダーを調べます。

互換性

バージョン メモ
IIS 10.0 <dynamicIpSecurity> 要素は、IIS 10.0 では変更されませんでした。
IIS 8.5 <dynamicIpSecurity> 要素は、IIS 8.5 では変更されませんでした。
IIS 8.0 <dynamicIpSecurity> 要素が IIS 8.0 で導入されました。
IIS 7.5 該当なし
IIS 7.0 該当なし
IIS 6.0 該当なし

段取り

Windows Server 2012 または Windows Server 2012 R2

  1. タスク バーで [サーバー マネージャー]をクリックします。
  2. [サーバー マネージャー] で、[管理] メニューを選択し、[役割と機能の追加] を選択します。
  3. 役割と機能の追加ウィザードで、[次へ] を選択します。 [インストールの種類] を選択し、[次へ] を選択します。 対象サーバーを選択し、[次へ] を選択します。
  4. [サーバーの役割] ページで [Web サーバー (IIS)] を展開し、[Web サーバー][セキュリティ] の順に展開し、[IP およびドメインの制限] を選択します。 次へ をクリックします。
    Screenshot that shows the I P and Domain Restrictions selected for Windows Server 2012.
  5. [機能の選択] ページで、[次へ] をクリックします。
  6. [インストール オプションの確認] ページで、[インストール] をクリックします。
  7. [結果] ページで、 [閉じる]をクリックします。

Windows 8 または Windows 8.1

  1. [スタート] 画面で、ポインターを左下隅まで移動し、[スタート] ボタンを右クリックし、[コントロール パネル] を選択します。
  2. [コントロール パネル][プログラムと機能] を選択し、[Windows の機能の有効化または無効化] を選択します。
  3. [インターネット インフォメーション サービス]を展開し、[World Wide Web サービス] を展開し、[セキュリティ] を展開して、[IP セキュリティ] を選択します。
    Screenshot that shows the I P Security selected for Windows 8.
  4. OK をクリックします。
  5. 閉じるをクリックします。

操作方法

動的 IP 制限を追加して Web サイトのアクセスを拒否する方法

  1. インターネット インフォメーション サービス (IIS) マネージャーを開きます。

    • Windows Server 2012 以降を使用している場合:

      • タスク バーで、[サーバー マネージャー] を選択し、[ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順に選択します。
    • Windows 8 以降を使用している場合:

      • Windows キーを押しながら文字 X を押し、[コントロール パネル] を選択します。
      • [管理ツール] を選択し、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
  2. [接続] ウィンドウで、サーバー名を選択してサーバーの動的 IP 制限を追加するか、[サイト] を展開し、サイトを選択してサイトの動的 IP 制限を追加します。

  3. [ホーム] ウィンドウで、[IP アドレスおよびドメインの制限] 機能をダブルクリックします。

  4. [操作] ウィンドウで、[ダイナミック制限の設定の編集] を選択します。

  5. [Dynamic IP Restriction の設定] ダイアログ ボックスで、同時サンプル数や要求レートに基づいて IP アドレスを拒否するかどうかを指定し、ログ専用モードを有効にするかどうかを指定して、[OK] を選択します。

    Screenshot that shows the Dynamic I P Restrictions Settings dialog box. All variables are selected.

構成

<dynamicIpSecurity> 要素は、サーバーまたはサイト レベルで構成されます。

属性

属性 説明
denyAction 省略可能な列挙型属性。

IIS がクライアントに返す既定の拒否モード応答を指定します。

既定値は Forbidden です。
Value 説明
AbortRequest IIS が既定で拒否モードの Abort の応答をクライアントに送り返す必要があることを指定します。

この数値は 0 です。

Unauthorized IIS が既定で拒否モードの Unauthorized の応答をクライアントに送り返す必要があることを指定します。 ブラウザー ベースのクライアントがリモート側で使用されている場合、「未承認」を返すと、認証ダイアログがリモート クライアントに表示され、IIS に対する誤った認証試行が発生する可能性があります。

この数値は 401 です。

Forbidden IIS が既定で拒否モードの Forbidden の応答をクライアントに送り返す必要があることを指定します。

この数値は 403 です。

NotFound IIS が既定で拒否モードの Not Found の応答をクライアントに送り返す必要があることを指定します。

この数値は 404 です。

enableLoggingOnlyMode 省略可能な Boolean 属性です。

IIS がクライアントからの要求を実際に拒否せずにログに記録することを指定します。

既定値は false です。
enableProxyMode 省略可能な Boolean 属性です。

IIS で表示されるクライアント IP からの要求をブロックするだけでなく、x-forwarded-for HTTP ヘッダーで受信した IP アドレスからの要求をブロックすることもできます。 このヘッダーを使用すると、HTTP プロキシまたはロード バランサーを介して接続するクライアントの送信元 IP アドレスを識別できます。 これはプロキシ モードと呼ばれます。

既定値は false です。

子要素

要素 説明
denyByConcurrentRequests 省略可能な要素です。

特定のリモート クライアントが時間の経過と同時に受信した要求の数に基づいてブロックされることを指定します。
denyByRequestRate 省略可能な要素です。

クライアントからの同時 HTTP 接続要求の数に基づいて、特定のリモート クライアントをブロックすることを指定します。

構成サンプル

次の構成サンプルでは、動的 IP アドレス制限を設定する方法を示します。

<system.webServer>
   <security>
      <dynamicIpSecurity enableLoggingOnlyMode="true">
         <denyByConcurrentRequests enabled="true" maxConcurrentRequests="10" />
         <denyByRequestRate enabled="true" maxRequests="30" 
            requestIntervalInMilliseconds="300" />
      </dynamicIpSecurity>
   </security>
</system.webServer>

サンプル コード

次の例では、サイトの <dynamicIpSecurity> を構成します。

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/security/dynamicIpSecurity /denyAction:"Unauthorized" /enableProxyMode:"True" /enableLoggingOnlyMode:"True"  /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/dynamicIpSecurity /denyByConcurrentRequests.enabled:"True" /denyByConcurrentRequests.maxConcurrentRequests:"10" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/security/dynamicIpSecurity /denyByRequestRate.enabled:"True" /denyByRequestRate.maxRequests:"25" /denyByRequestRate.requestIntervalInMilliseconds:"210"  /commit:apphost

Note

AppCmd.exe を使用してこれらの設定を構成する場合は、commit パラメーターを必ず apphost に設定する必要があります。 これにより、ApplicationHost.config ファイルの適切な場所セクションに構成設定がコミットされます。

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample {

    private static void Main() {
        
        using(ServerManager serverManager = new ServerManager()) { 
            Configuration config = serverManager.GetApplicationHostConfiguration();
            
            ConfigurationSection dynamicIpSecuritySection = config.GetSection("system.webServer/security/dynamicIpSecurity", "Default Web Site");
            dynamicIpSecuritySection["denyAction"] = @"Forbidden";
            dynamicIpSecuritySection["enableProxyMode"] = true;
            dynamicIpSecuritySection["enableLoggingOnlyMode"] = true;
            
            ConfigurationElement denyByConcurrentRequestsElement = dynamicIpSecuritySection.GetChildElement("denyByConcurrentRequests");
            denyByConcurrentRequestsElement["enabled"] = true;
            denyByConcurrentRequestsElement["maxConcurrentRequests"] = 10;
            
            ConfigurationElement denyByRequestRateElement = dynamicIpSecuritySection.GetChildElement("denyByRequestRate");
            denyByRequestRateElement["enabled"] = true;
            denyByRequestRateElement["maxRequests"] = 10;
            denyByRequestRateElement["requestIntervalInMilliseconds"] = 10;
            
            serverManager.CommitChanges();
        }
    }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim dynamicIpSecuritySection As ConfigurationSection = config.GetSection("system.webServer/security/dynamicIpSecurity", "Default Web Site")
      dynamicIpSecuritySection("denyAction") = "Forbidden"
      dynamicIpSecuritySection("enableProxyMode") = true
      dynamicIpSecuritySection("enableLoggingOnlyMode") = true
      Dim denyByConcurrentRequestsElement As ConfigurationElement = dynamicIpSecuritySection.GetChildElement("denyByConcurrentRequests")
      denyByConcurrentRequestsElement("enabled") = true
      denyByConcurrentRequestsElement("maxConcurrentRequests") = 10
      Dim denyByRequestRateElement As ConfigurationElement = dynamicIpSecuritySection.GetChildElement("denyByRequestRate")
      denyByRequestRateElement("enabled") = true
      denyByRequestRateElement("maxRequests") = 10
      denyByRequestRateElement("requestIntervalInMilliseconds") = 10
      serverManager.CommitChanges
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var dynamicIpSecuritySection = adminManager.GetAdminSection ("system.webServer/security/dynamicIpSecurity", "MACHINE/WEBROOT/APPHOST/Default Web Site");
dynamicIpSecuritySection.Properties.Item("denyAction").Value = "Unauthorized";
dynamicIpSecuritySection.Properties.Item("enableProxyMode").Value = true;
dynamicIpSecuritySection.Properties.Item("enableLoggingOnlyMode").Value = true;
var denyByConcurrentRequestsElement = dynamicIpSecuritySection.ChildElements.Item("denyByConcurrentRequests");
denyByConcurrentRequestsElement.Properties.Item("enabled").Value = true;
denyByConcurrentRequestsElement.Properties.Item("maxConcurrentRequests").Value = 10;
var denyByRequestRateElement = dynamicIpSecuritySection.ChildElements.Item("denyByRequestRate");
denyByRequestRateElement.Properties.Item("enabled").Value = true;
denyByRequestRateElement.Properties.Item("maxRequests").Value = 25;
denyByRequestRateElement.Properties.Item("requestIntervalInMilliseconds").Value = 210;

adminManager.CommitChanges();

VBScript

Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set dynamicIpSecuritySection = adminManager.GetAdminSection ("system.webServer/security/dynamicIpSecurity", "MACHINE/WEBROOT/APPHOST/Default Web Site")
dynamicIpSecuritySection.Properties.Item("denyAction").Value = "Unauthorized"
dynamicIpSecuritySection.Properties.Item("enableProxyMode").Value = true
dynamicIpSecuritySection.Properties.Item("enableLoggingOnlyMode").Value = true
Set denyByConcurrentRequestsElement = dynamicIpSecuritySection.ChildElements.Item ("denyByConcurrentRequests")
denyByConcurrentRequestsElement.Properties.Item("enabled").Value = true
denyByConcurrentRequestsElement.Properties.Item("maxConcurrentRequests").Value = 10
Set denyByRequestRateElement = dynamicIpSecuritySection.ChildElements.Item("denyByRequestRate")
denyByRequestRateElement.Properties.Item("enabled").Value = true
denyByRequestRateElement.Properties.Item("maxRequests").Value = 25
denyByRequestRateElement.Properties.Item("requestIntervalInMilliseconds").Value = 210

adminManager.CommitChanges()

PowerShell

Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity" -name "denyAction" -value "Unauthorized"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity" -name "enableProxyMode" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity" -name "enableLoggingOnlyMode" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByConcurrentRequests" -name "enabled" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByConcurrentRequests" -name "maxConcurrentRequests" -value 20
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByRequestRate" -name "enabled" -value "True"
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByRequestRate" -name "maxRequests" -value 20
Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' -location 'Default Web Site' -filter "system.webServer/security/dynamicIpSecurity/denyByRequestRate" -name "requestIntervalInMilliseconds" -value 20