IIS 7 - 通过负载均衡器后面的IP地址限制应用程序

Bra*_*don 12 .net iis-7 ip-address windows-server-2008

我试图通过负载均衡器后面的Web服务器上的IP地址限制IIS 7中的应用程序.X-Forwarded-For标头由负载均衡器设置,具有客户端的IP地址.

在IIS 7中提取IP地址以在我的应用程序上设置IP地址过滤的最佳方法是什么?如果没有最好的方法,我将最终使用HTTPModule为我处理这个问题.

小智 6

使用IIS URL重写模块来规范REMOTE_ADDR和实施IP限制。

使用以下配方REMOTE_ADDR将设置为真实的 Client-IP,而不管前面是否要设置一个受信任的反向代理HTTP_X_FORWARDED_FOR。这意味着您可以从IIS前面删除反向代理,并且这些IP限制仍将按预期继续工作。

正常化REMOTE_ADDRapplicationHost.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>
Run Code Online (Sandbox Code Playgroud)

以上复印件配方找到的最后一个IP地址HTTP_X_FORWARDED_FORREMOTE_ADDR,并REMOTE_HOST <serverVariables>只有当原始值REMOTE_ADDR相匹配的IP地址可信的反向代理。

要使此配方有效,必须将第一个条件设置为与反向代理的IP地址匹配:

<add input="{REMOTE_ADDR}" pattern="^10\.1\.1\.[123]$" ignoreCase="false" />
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,HTTP_X_FORWARDED_FOR仅当由反向代理在以下IP地址之一上进行设置时,客户端IP in 才受信任:

10.1.1.1 or 10.1.1.2 or 10.1.1.3
Run Code Online (Sandbox Code Playgroud)

这需要设置REMOTE_ADDR真实的客户端IP。

IP限制 web.config

可以使用以下方法在站点的IIS URL重写模块中设置IP限制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>
Run Code Online (Sandbox Code Playgroud)

编辑,pattern=使其仅与您需要传入的IP地址或阻止匹配。

更改<action />为所需。

因为web.config上面的配方在标准REMOTE_ADDR变量上进行过滤,所以无论有没有,它都可以使用HTTP_X_FORWARDED_FOR。中的配方applicationHost.config <rewrite> <globalRules>可确保REMOTE_ADDR始终将其设置为真实的 Client-IP,以供日后参考REMOTE_ADDR


Sha*_*e N 5

您可以使用IIS URL重写模块来完成此操作。

添加带有条件的新入站规则,以检查IP地址是否与{HTTP_X_Forwarded_For}不匹配。然后,您可以将规则设置为重定向,重写或中止请求。

您可以为要列入白名单的每个IP地址设置新条件。