簡體   English   中英

IIS 7 - 通過 IP 限制應用程序 負載均衡器后面的地址

[英]IIS 7 - Restrict Application by IP Address behind load balancer

我正在嘗試通過負載均衡器后面的 web 服務器上的 IP 地址限制 IIS 7 中的應用程序。 X-Forwarded-For header 由負載均衡器使用客戶端的 IP 地址設置。

提取 IIS 7 中的 IP 地址以在我的應用程序上設置 IP 地址過濾的最佳方法是什么? 如果沒有最好的方法,我最終會使用 HTTPModule 來為我處理這個問題。

使用IIS URL 重寫模塊來規范化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_ADDRREMOTE_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。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM