由 納粹拉拉
簡介
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 限制設定,請遵循下列步驟:
- 開啟 IIS 管理員
- 如果您想要設定全伺服器設定,或在左側樹視圖中選取伺服器節點,或選取要設定月臺特定設定的網站節點。
- 在 [功能檢視] 中,按兩下 [動態IP限制]
- 在 [動態 IP 限制] 主頁面中,您可以啟用並指定任何功能的設定。 若要將 IP 位址新增至 [允許] 列表,您可以按下右側的 [顯示允許位址] 連結:
- 選取上方的 [顯示允許的位址] 鏈接會顯示視窗,如下所示,您可以看到允許略過動態IP限制驗證的所有IP位址。 您可以選取右邊的[新增允許專案] 連結,將更多IP位址新增至清單中。
根據並行要求數目封鎖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 - 禁止錯誤:
重要
設定實際 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 - 禁止狀態代碼:
如果您在所有先前的要求都已執行,然後提出要求時再等候 5 秒,要求將會成功。
重要
設定即時 Web 應用程式一段時間允許的要求數目時,請徹底測試您挑選的限制,以確保有效的 HTTP 用戶端不會遭到封鎖。 對於已啟用 AJAX 且提供媒體內容的豐富因特網應用程式來說,這特別重要。
拒絕動作
模組可以設定為在拒絕IP位址要求時執行下列動作:
- 傳送 403 (禁止) 回應給用戶端;
- 傳送 404 (找不到檔案) 回應給用戶端;
- 關閉 HTTP 連線以中止要求,而不傳送任何回應給用戶端。
支援 Proxy 後方的網頁伺服器
如果您的網頁伺服器位於防火牆或 Proxy 計算機後方,則所有要求的用戶端 IP 可能會顯示為 Proxy 或防火牆伺服器的 IP。 這會阻礙動態IP限制模組很有用的能力。 不過,大部分這類伺服器會在包含原始用戶端 IP 位址的 HTTP 要求中新增 X-Forwarded-For 標頭。 選取主要動態IP限制組態頁面中的 [Proxy] 模式複選框,會先檢查此標頭中的用戶端IP位址。