IIS 7 - 通過負載均衡器後面的 IP 地址限制應用程序
我正在嘗試通過負載均衡器後面的 Web 伺服器上的 IP 地址來限制 IIS 7 中的應用程序。X-Forwarded-For 標頭由負載均衡器使用客戶端的 IP 地址設置。
在 IIS 7 中提取該 IP 地址以在我的應用程序上設置 IP 地址過濾的最佳方法是什麼?如果沒有最好的方法,我最終會使用 HTTPModule 來為我處理這個問題。
您可以使用IIS URL 重寫模組來完成此操作。
添加一個新的入站規則,其中包含檢查 IP 地址是否與 {HTTP_X_Forwarded_For} 不匹配的條件。然後,您可以設置規則以重定向、重寫或中止請求。
您可以為要列入白名單的每個 IP 地址設置一個新條件。
使用IIS URL 重寫模組來規範
REMOTE_ADDR和實施 IP 限制。使用以下配方
REMOTE_ADDR將設置為真實的客戶端 IP,無論前面是否有可信的反向代理來設置HTTP_X_FORWARDED_FOR。這意味著您可以從 IIS 前面刪除反向代理,並且這些 IP 限制仍將繼續按預期工作。歸一
REMOTE_ADDR化applicationHost.config在全域 IIS 中設置
applicationHost.config:<rewrite> <allowedServerVariables> <add name="REMOTE_ADDR" /> <add name="REMOTE_HOST" /> </allowedServerVariables> <globalRules> <rule name="Remote" patternSyntax="ECMAScript"> <match url=".*" ignoreCase="false" /> <conditions> <add input="{REMOTE_ADDR}" pattern="^10\.1\.1\.[123]$" ignoreCase="false" /> <add input="{HTTP_X_FORWARDED_FOR}" pattern="\d+\.\d+\.\d+\.\d+$" ignoreCase="false" /> </conditions> <serverVariables> <set name="REMOTE_ADDR" value="{C:0}" /> <set name="REMOTE_HOST" value="{C:0}" /> </serverVariables> <action type="None" /> </rule> </globalRules> </rewrite>上面的方法將它找到的最後一個 IP 地址複製
HTTP_X_FORWARDED_FOR到REMOTE_ADDR並且REMOTE_HOST<serverVariables>僅當原始值REMOTE_ADDR與受信任的反向代理的 IP 地址匹配時。要讓這個秘籍工作,第一個條件必須設置為匹配你的反向代理的 IP 地址:
<add input="{REMOTE_ADDR}" pattern="^10\.1\.1\.[123]$" ignoreCase="false" />
HTTP_X_FORWARDED_FOR在上面的範例中,只有在以下 IP 地址之一由反向代理設置時,客戶端 IP才受信任:10.1.1.1 or 10.1.1.2 or 10.1.1.3這需要設置
REMOTE_ADDR為真正的客戶端 IP。智慧財產權限制
web.configIP 限制可以使用站點中的IIS URL 重寫模組
web.config設置,使用以下配方:<system.webServer> <rewrite> <rules> <rule name="IP Restricted" patternSyntax="ECMAScript" stopProcessing="true"> <match url=".*" ignoreCase="false" /> <conditions> <add input="{REMOTE_ADDR}" pattern="^(127\.|10\.20\.74\.|10\.25\.182\.|10\.64\.105\.10)" ignoreCase="false" negate="true" /> </conditions> <action type="Rewrite" url="/403.html" appendQueryString="false" logRewrittenUrl="true" /> </rule> </rules> </rewrite> </system.webServer>編輯
pattern=以僅匹配您需要允許的 IP 地址或塊。更改
<action />為所需的任何內容。因為
web.config上面的配方過濾了標準REMOTE_ADDR變數,所以它可以使用和不使用HTTP_X_FORWARDED_FOR. 中的配方applicationHost.config<rewrite><globalRules>確保REMOTE_ADDR始終將其設置為真實的客戶端 IP,以供以後可能引用的任何內容REMOTE_ADDR。