繁体   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