動態 IP 安全性 < dynamicIpSecurity>

概觀

元素 <dynamicIpSecurity> 提供動態方式來封鎖惡意 Web 要求。 使用動態 IP 限制表示系統管理員不需要識別需要封鎖的 IP 位址。 相反地,系統管理員可以設定系統,使其封鎖任何符合設定準則的 IP 位址。 如果來自該用戶端的並行 HTTP 連線要求數目超過特定數目,或如果一段時間內收到的要求數目超過特定數目,則包括封鎖遠端用戶端。 您可以在伺服器或月臺層級設定動態 IP 限制。

如果用戶端遭到封鎖,系統管理員可以指定將傳回哪些 HTTP 回應狀態碼:未經授權 (401) ;禁止 (403) ;或找不到 (404) 。 您也可以將 [拒絕動作類型] 設定為 [中止] 以卸載連線,而不傳回任何原因的指示。

如果您啟用 Proxy 模式,可以藉由識別透過 HTTP Proxy 或負載平衡器連線到網頁伺服器的用戶端原始 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 N/A
IIS 7.0 N/A
IIS 6.0 N/A

安裝程式

Windows Server 2012 或 Windows Server 2012 R2

  1. 在工作列上,按一下 [伺服器管理員]
  2. 伺服器管理員中,按一下 [管理]功能表,然後按一下 [新增角色和功能]。
  3. 在 [ 新增角色和功能 精靈] 中,按 [下一步]。 選取安裝類型,然後按 [ 下一步]。 選取目的地伺服器,然後按 [ 下一步]。
  4. 在 [ 伺服器角色] 頁面上,展開 [網頁伺服器] (IIS) 、展開 [網頁伺服器]、[ 安全性],然後選取 [ IP 和網域限制]。 按一下 [下一步] 。
    此螢幕擷取畫面顯示針對 Windows Server 2012 選取的 I P 和網域限制。 .
  5. 在 [選取功能] 頁面上,按 [下一步]
  6. 在 [確認安裝選項] 頁面上,按一下 [安裝]
  7. 在 [結果] 頁面上,按一下 [關閉]

Windows 8 或Windows 8.1

  1. 在 [開始] 畫面上,將指標全部移至左下角,以滑鼠右鍵按一下 [開始] 按鈕,然後按一下[主控台]。
  2. 主控台中,按一下 [程式和功能],然後按一下 [開啟或關閉 Windows 功能]。
  3. 展開 [網際網路資訊服務]、[ 萬維網服務]、[ 安全性],然後選取 [ IP 安全性]。
    此螢幕擷取畫面顯示針對 Windows 8 選取的 I P 安全性。
  4. 按一下 [確定]。
  5. 按一下 [關閉] 。

作法

如何新增動態 IP 限制來拒絕網站的存取

  1. (IIS) 管理員開啟 Internet Information Services

    • 如果您使用 Windows Server 2012 或更新版本:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows 8 或更新版本:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
  2. 在 [ 連線 ] 窗格中,選取伺服器名稱以新增伺服器的動態 IP 限制,或展開 [ 台],然後選取網站以新增月臺的動態 IP 限制。

  3. 在 [ 首頁 ] 窗格中,按兩下 [IP 位址和網域限制] 功能。

  4. 在 [ 動作] 窗格中,按一下 [編輯動態限制設定...]。

  5. 在 [ 動態 IP 限制設定 ] 對話方塊中,指定是否根據並行樣本數目和/或要求速率來拒絕 IP 位址,並指定是否啟用僅記錄模式,然後按一下 [ 確定]。

    顯示 [動態 I P 限制設定] 對話方塊的螢幕擷取畫面。已選取所有變數。

組態

專案 <dynamicIpSecurity> 是在伺服器或月臺層級設定。

屬性

屬性 描述
denyAction 選擇性列舉屬性。

指定 IIS 應該傳回給用戶端的預設拒絕模式回應。

預設值是 Forbidden
描述
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 不僅能夠封鎖 IIS 所看到之用戶端 IP 的要求,還能封鎖來自 x-forwarded-for HTTP 標頭中接收之 IP 位址的要求。 此標頭可讓您識別透過 HTTP Proxy 或負載平衡器連線之用戶端的原始 IP 位址。 這稱為 Proxy 模式。

預設值是 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

注意

使用AppCmd.exe設定這些設定時,您必須將 認可 參數 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