IIS "IP Address and Domain Restrictions"拒绝条目,而不阻止返回状态为 400 的请求



我的Web服务器是Windows Server 2012 R2 Standard with IIS 8.5。

我一直收到来自特定 IP 地址范围的错误。 错误是"从客户端检测到具有潜在危险的 Request.Path 值"。(HTTP 状态代码为 400)。 作为响应,我为这些 IP 地址添加了 IP 地址拒绝条目。 我首先将拒绝条目添加到特定网站,但继续收到来自 IP 地址的错误。 然后,我将拒绝条目移动到应用程序文件,但仍然收到错误。

此时,我假设发生了其他事情,因此我为本地计算机设置了一个拒绝条目。 在常规 http 请求中,我收到了 403,但是当我发出"错误请求"(状态 400)时,我收到了 400 状态而不是 403。

此指向Microsoft文档的链接将 400 状态描述为:

由于请求中的问题,Http.sys 文件阻止 IIS 7.0、IIS 7.5 和 IIS 8.0 处理请求。

而这个链接显示,Http.sys是接收请求的第一步。

不过我有一些问题。

1)我找不到处理403的过程。 我现在假设这发生在 400 之后,但我不确定。

2)上面的第二个链接(IIS体系结构简介)还指出:

启动时,WAS 从 ApplicationHost.config 文件中读取某些信息,并将该信息传递给服务器上的侦听器适配器。侦听器适配器是在 WAS 和协议侦听器(如 HTTP.sys)之间建立通信的组件。侦听器适配器收到配置信息后,它们将配置其相关的协议侦听器,并准备侦听器以侦听请求。

这让我相信 Http.sys 会从 application.config 文件中提取拒绝条目并阻止请求。

无论如何,对我来说,拒绝请求似乎是第一位的,但显然情况并非如此(除非我设置错误)。

有什么想法或链接可以消除我对这种情况的无知吗?

我最近尝试使用 IIS 8.5 中的 IP 地址和域限制功能来阻止某些 IP 地址访问网站,但我遇到了您在类似服务器设置中描述的相同问题。就我而言,IIS 可能一直在阻止来自我列出的 IP 地址的有效 Web 请求,但我仍然看到我的日志中显示错误请求(400 个错误),这意味着请求正在通过 IIS 到达 ASP.NET。我不确定为什么IIS 8.5没有阻止错误的请求。这种行为对我来说特别令人困惑,因为我觉得早期版本的 IIS确实阻止了所有请求。

我希望我有一个更好的答案来解释为什么IIS 8.5以这种方式运行,但是解决此问题的替代方法是使用Windows防火墙来阻止有问题的IP地址。您可以添加自定义规则,以阻止特定 IP 地址或范围的 TCP 流量到达您的 Web 服务器。此方法的一个好处是,您可以更新列表,而不会导致应用程序池回收,当您在 IIS 中更新允许/拒绝规则时,会发生应用程序池回收。

若要添加防火墙规则,可以使用wf.msc。您应该通过添加Custom Rule来更新Inbound Rules,以阻止本地端口80上的TCP流量,并从所需的 IP 地址443(或运行 Web 服务器的任何端口)进行通信。最好先在非生产服务器上测试规则,以确保正确设置规则。

最新更新