[英]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.