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

时间:2011-07-22 21:08:18

标签: .net iis-7 windows-server-2008 ip-address

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

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

3 个答案:

答案 0 :(得分:6)

使用IIS URL Rewrite module规范化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>

只有HTTP_X_FORWARDED_FOR中的原始值与REMOTE_ADDR中的原始值相匹配时,上述配方才会将REMOTE_HOST中找到的最后一个IP地址复制到<serverVariables>REMOTE_ADDR <add input="{REMOTE_ADDR}" pattern="^10\.1\.1\.[123]$" ignoreCase="false" /> 可信反向代理的IP地址。

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

HTTP_X_FORWARDED_FOR

在上面的示例中,10.1.1.1 or 10.1.1.2 or 10.1.1.3 中的客户端IP仅在受其中一个IP地址的反向代理设置时才受信任:

REMOTE_ADDR

负责将web.config设置为真实客户端IP。

web.config

中的IP限制

可以使用此配方在网站<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> 中使用IIS URL Rewrite module设置IP限制:

pattern=

编辑<action />以仅匹配您需要输入的IP地址或块。

web.config更改为所需的任何内容。

由于上面的REMOTE_ADDR配方会对标准HTTP_X_FORWARDED_FOR变量进行过滤,因此无论是否使用applicationHost.config都可以使用。 <rewrite> <globalRules> REMOTE_ADDR中的食谱可确保REMOTE_ADDR始终设置为真实客户端IP,以用于稍后可能引用的{{1} }}

答案 1 :(得分:5)

您可以使用IIS URL Rewrite module来完成此操作。

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

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

答案 2 :(得分:1)

IIS 7及更高版本包括Dynamic IP Restrictions模块,该模块支持通过其X-Forwarded-For标头过滤客户端请求,该标头添加到请求when using an AWS load balancer中:

  

对代理后面的Web服务器的支持-如果您的Web服务器在代理后面,则可以配置模块以使用X-Forwarded-For标头中的客户端IP地址。

You can enable Proxy Mode support,方法是选中模块配置页面中的“代理”复选框,然后编写规则以允许/拒绝通过模块的IP / CIDR范围。