共用方式為


使用動態IP限制

納粹拉拉

簡介

IIS 7.0 和更新版本的動態IP限制 (DIPR) 模組提供防止 Web 伺服器和網站上的阻斷服務和暴力密碼破解攻擊的保護。 為了提供此保護,模組會暫時封鎖 HTTP 用戶端的 IP 位址,這些用戶端會發出異常大量的並行要求,或在短時間內提出大量要求。

功能

動態 IP 限制模組包含下列主要功能:

  • 根據並行要求 數目封鎖IP位址 - 如果 HTTP 用戶端超過允許的並行要求數目,該用戶端的 IP 位址就會暫時遭到封鎖。
  • 根據一段時間 的要求數目封鎖IP位址 - 如果 HTTP 用戶端超過在指定時間間隔中提出的要求數目,該用戶端的 IP 位址就會暫時遭到封鎖。
  • 允許不會封鎖的IP位址清單 - 您可以新增您想要排除的用戶端IP位址清單,使其不受模組封鎖,而不論其他組態為何。
  • 各種拒絕動作 - 您可以指定要傳回 IP 位址封鎖之 HTTP 用戶端的回應。 模組可以傳回狀態代碼 403 和 404,或只是終止 HTTP 連線,而不會傳回任何回應。
  • Proxy 後方的網頁伺服器支援 - 如果您的網頁伺服器位於 Proxy 後方,您可以將模組設定為使用來自 X-Forwarded-For 標頭的用戶端 IP 位址。
  • IPv6 - 模組提供 IPv6 位址的完整支援。

安裝 DIPR 模組

您可以嘗試下列方法來安裝動態IP限制:

從 [選取角色服務] 畫面,流覽至 [Web 伺服器] [IIS] > [Web 伺服器 > 安全性]。 核取 [IP 和網域限制] 複選框,然後按 [下一步] 繼續。

必要條件

您必須有下列其中一個作業系統。

  • Windows Server 2008
  • Windows Vista SP1
  • Windows Server 2008 R2
  • Windows 7

卸載 DIPR 模組的 Beta 版本

如果您使用 DIPR 模組的第一個 Beta 版本,您必須先將它卸載,才能安裝候選版,否則會發生錯誤,安裝將會失敗。 卸載 Beta 版本之前,請務必先備份您的設定。

如果您使用 DIPR 模組的 Beta 2 版本,您可以直接升級至最終版本。 您的組態設定將會保留。

設定動態IP限制

您可以使用 IIS 管理員、IIS 組態 API 或使用命令行工具 appcmd 來設定動態 IP 限制。

若要存取 IIS 管理員中的動態 IP 限制設定,請遵循下列步驟:

  1. 開啟 IIS 管理員
  2. 如果您想要設定全伺服器設定,或在左側樹視圖中選取伺服器節點,或選取要設定月臺特定設定的網站節點。
  3. 在 [功能檢視] 中,按兩下 [動態IP限制]
    I S 管理員的螢幕快照,其中顯示主要窗格中的功能清單,已選取 [動態IP限制]。
  4. 在 [動態 IP 限制] 主頁面中,您可以啟用並指定任何功能的設定。 若要將 IP 位址新增至 [允許] 列表,您可以按下右側的 [顯示允許位址] 連結:
    I S 管理員的螢幕快照,其中顯示主窗格中的動態 I P 限制。[動作] 窗格中已選取 [允許的位址]。
  5. 選取上方的 [顯示允許的位址] 鏈接會顯示視窗,如下所示,您可以看到允許略過動態IP限制驗證的所有IP位址。 您可以選取右邊的[新增允許專案] 連結,將更多IP位址新增至清單中。
    I S 管理員的螢幕快照,其中顯示 [新增允許限制規則] 對話方塊。對話框後面的 [動作] 窗格中會反白顯示 [新增允許專案]。

根據並行要求數目封鎖IP位址

使用此選項時,伺服器會允許任何用戶端的IP位址只發出可設定的並行要求數目。 任何超過指定限制的其他要求都會遭到拒絕。

測試這項功能的簡單方法是使用UI或執行 appcmd 命令,將並行要求數目上限設定為 2:

%WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/dynamicIpSecurity 
/denyByConcurrentRequests.enabled:"True" 
/denyByConcurrentRequests.maxConcurrentRequests:"2" 
/commit:apphost

在網站的根資料夾中,建立檔案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 xmlns="http://www.w3.org/1999/xhtml">
 <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 秒。 儲存盤案,然後開啟網頁瀏覽器,要求 http://localhost/test.aspx 並持續按 F5 重新整理瀏覽器。 這會導致瀏覽器發出 2 個以上的並行要求,因此您會看到伺服器發生 403 - 禁止錯誤:

伺服器錯誤頁面的螢幕快照。錯誤摘要會顯示 H T T P 錯誤 403.7 禁止。

重要

設定實際 Web 應用程式的並行要求數目時,請徹底測試您挑選的限制,以確保有效的 HTTP 用戶端不會遭到封鎖。 對於已啟用 AJAX 且提供媒體內容的豐富因特網應用程式來說,這特別重要。

根據一段時間的要求數目封鎖IP位址

使用此選項時,伺服器會拒絕來自任何 HTTP 用戶端 IP 位址的要求,在一段時間內發出超過可設定的要求數目。 IP 位址會維持封鎖狀態,直到一段時間內的要求數目低於設定的限制為止。

若要測試這項功能,請使用 IIS 管理員或執行 appcmd 命令,將「要求數目上限」設定為 5,並將「時間週期」設定為 5000:

%WINDIR%\system32\inetsrv\appcmd.exe set config -section:system.webServer/security/dynamicIpSecurity /denyByRequestRate.enabled:"True" /denyByRequestRate.maxRequests:"5" /denyByRequestRate.requestIntervalInMilliseconds:"5000" /commit:apphost

開啟網頁瀏覽器,要求 http://localhost/welcome.png ,然後按 F5 以持續重新整理頁面。 這會在 5 秒內產生超過 5 個要求,因此您會看到伺服器回應 403 - 禁止狀態代碼:

伺服器錯誤頁面的螢幕快照。錯誤摘要會顯示 H T T P 錯誤 403.8 禁止。

如果您在所有先前的要求都已執行,然後提出要求時再等候 5 秒,要求將會成功。

重要

設定即時 Web 應用程式一段時間允許的要求數目時,請徹底測試您挑選的限制,以確保有效的 HTTP 用戶端不會遭到封鎖。 對於已啟用 AJAX 且提供媒體內容的豐富因特網應用程式來說,這特別重要。

拒絕動作

模組可以設定為在拒絕IP位址要求時執行下列動作:

  • 傳送 403 (禁止) 回應給用戶端;
  • 傳送 404 (找不到檔案) 回應給用戶端;
  • 關閉 HTTP 連線以中止要求,而不傳送任何回應給用戶端。

支援 Proxy 後方的網頁伺服器

如果您的網頁伺服器位於防火牆或 Proxy 計算機後方,則所有要求的用戶端 IP 可能會顯示為 Proxy 或防火牆伺服器的 IP。 這會阻礙動態IP限制模組很有用的能力。 不過,大部分這類伺服器會在包含原始用戶端 IP 位址的 HTTP 要求中新增 X-Forwarded-For 標頭。 選取主要動態IP限制組態頁面中的 [Proxy] 模式複選框,會先檢查此標頭中的用戶端IP位址。