所有流量都通过代理到达我的 IIS 服务器。我无法阻止或将 IP 地址列入白名单,因为所有流量都来自代理的 IP 地址。
我可以在 IIS 中使用 X-Forwarded-For 标头吗?
所有流量都通过代理到达我的 IIS 服务器。我无法阻止或将 IP 地址列入白名单,因为所有流量都来自代理的 IP 地址。
我可以在 IIS 中使用 X-Forwarded-For 标头吗?
考虑到它们可以由客户端控制,除非您的网络服务器在转发您的请求时考虑到这一点,否则我会谨慎使用 HTTP 标头进行 IP 过滤。
如果我未经授权在我的标题中发送 X-Forwarded-For 会发生什么?您的网络服务器会添加额外的 X-Forwarded-For 吗?它会在我的下方或上方添加它吗?IIS 将使用哪一个进行验证?
在实现对标头值的任何信任之前,您需要能够回答这些问题。
编辑:我不知道有更好的选择,但如果你要问的问题,你应该能够先回答问题。我不是在谈论通过多个代理,而是如果我将自己的 X-Forwarder-For 标头放在请求的底部会发生什么?你的代理会再增加一个吗?会有两个 X-Forwarder-For 吗?网络服务器将查看哪一个?
IIS 7 及更高版本包括动态 IP 限制模块,该模块支持通过标头过滤客户端请求,在使用 AWS 负载均衡器时X-Forwarded-For
添加到请求中:
支持代理后面的 Web 服务器 - 如果您的 Web 服务器位于代理后面,您可以将模块配置为使用 X-Forwarded-For 标头中的客户端 IP 地址。
您可以通过选中模块配置页面中的“代理”复选框来启用代理模式支持,然后编写规则以通过模块允许/拒绝 IP/CIDR 范围。
Stack Overflow 上的这个问题名义上是在问同样的问题。
您可以使用URL Rewrite 模块通过在变量周围添加条件来进行过滤,{HTTP_X_FORWARDED_FOR}
如本答案中所述。
或者,另一个答案描述了一种方法,您可以通过该方法使用全局重写规则将 IP 地址设置回其预代理值。(我个人认为,如果你这样做,你可能还想添加一个X-Forwarded-By
标题。)然后你可以编写任何你喜欢的普通规则来进行过滤。
但是,总的来说,我同意vcsjones对您的问题的评论,其中她/他建议您在代理上进行此过滤,如果这是一个可用的选项。
ModSecurity具有此功能,因为它具有交易的完全可见性。这意味着它可以检查请求和响应中的标头和有效负载。只需要为这个条件创建一个规则。有一个警告,尽管 ModSecurity 是由 Microsoft 和 Trustwave 编写的,但它被认为是社区支持。如果这是一个生产应用程序,您将无法致电 Microsoft 支持寻求帮助。有了这个,ModSecurity 的邮件列表很棒,Trustwave 工程师也很有帮助。如果您需要对规则的付费支持,Trustwave 可以提供此服务以及商业规则集(类似于 snort 模型)。
其他 Web 应用程序防火墙 (WAF) 也可以使用,但 ModSecurity 是免费的。