我正在尝试通过负载均衡器后面的Web服务器上的IP地址来限制IIS 7中的应用程序。 X-Forwarded-For标头由负载均衡器设置,具有客户端的IP地址。
在IIS 7中提取IP地址以在我的应用程序上设置IP地址过滤的最佳方法是什么?如果没有最好的方法,我最终会使用HTTPModule为我处理这个问题。
答案 0 :(得分:6)
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
可以使用此配方在网站<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范围。