[英]IIS 7 - Restrict Application by IP Address behind load balancer
我正在嘗試通過負載均衡器后面的 web 服務器上的 IP 地址限制 IIS 7 中的應用程序。 X-Forwarded-For header 由負載均衡器使用客戶端的 IP 地址設置。
提取 IIS 7 中的 IP 地址以在我的應用程序上設置 IP 地址過濾的最佳方法是什么? 如果沒有最好的方法,我最終會使用 HTTPModule 來為我處理這個問題。
REMOTE_ADDR
並實現 IP 限制。 使用以下配方REMOTE_ADDR
將設置為真實的客戶端 IP,無論前面是否有一個受信任的反向代理來設置HTTP_X_FORWARDED_FOR
。 這意味着您可以從 IIS 前面刪除反向代理,這些 IP 限制仍將按預期繼續工作。
applicationHost.config
中的REMOTE_ADDR
在全局 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>
上面的方法將它在HTTP_X_FORWARDED_FOR
中找到的最后一個 IP 地址復制到REMOTE_ADDR
和REMOTE_HOST
<serverVariables>
,前提是REMOTE_ADDR
中的原始值與受信任的反向代理的 IP 地址匹配。
要使此配方起作用,必須將第一個條件設置為匹配您的反向代理的 IP 地址:
<add input="{REMOTE_ADDR}" pattern="^10\.1\.1\.[123]$" ignoreCase="false" />
在上面的示例中,HTTP_X_FORWARDED_FOR 中的客戶端HTTP_X_FORWARDED_FOR
僅在由反向代理在以下 IP 地址之一設置時才受信任:
10.1.1.1 or 10.1.1.2 or 10.1.1.3
這負責將REMOTE_ADDR
設置為真實的客戶端 IP。
web.config
中的限制 IP 可以使用 IIS URL 在站點的web.config
重寫模塊中使用 C 重寫模塊
<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
始終設置為真實的Client-IP,以用於以后可能引用REMOTE_ADDR
的任何內容。
您可以使用IIS URL 重寫模塊來完成此操作。
添加一個新的入站規則,其中包含檢查 IP 地址是否與 {HTTP_X_Forwarded_For} 不匹配的條件。 然后,您可以設置規則以重定向、重寫或中止請求。
您可以為您希望列入白名單的每個 IP 地址設置一個新條件。
IIS 7 及更高版本包括動態 IP Restrictions模塊,該模塊支持通過其X-Forwarded-For
header 過濾客戶端請求, 當使用 AWS 時,將其添加到請求中:
Support for web servers behind a proxy - If your web server is behind a proxy, you can configure the module to use the client IP address from an X-Forwarded-For header.
您可以通過選中模塊配置頁面中的“代理”復選框來啟用代理模式支持,然后編寫規則以通過模塊允許/拒絕 IP/CIDR 范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.