网络服务器上因 null 而导致的 408 请求超时次数增加

网络服务器上因 null 而导致的 408 请求超时次数增加

在我的日志监视记录显示,这些方面一直在稳步发展:

  408 Request Timeout
      null: 694 Time(s)

在我的网络服务器上。

以下是一些看起来像是/var/log/apache2/access.log访问日志的贡献请求:

ip - - date requestsfor"-"? httpcode bytes referrer useragent
75.149.117.146 - - [28/Jan/2013:17:49:47 -0500] "-" 408 0 "-" "-"
65.55.215.247 - - [28/Jan/2013:17:57:40 -0500] "-" 408 0 "-" "-"
205.157.206.75 - - [28/Jan/2013:18:00:21 -0500] "-" 408 0 "-" "-"

正常访问请求示例当然还有更多相关信息,例如:

ip - - date request-for httpcode bytes referrer useragent
66.251.23.171 - - [28/Jan/2013:17:45:41 -0500] "GET /images/al/al-mb0608tn.jpg HTTP/1.1" 200 4085 "http://example.com/brands.php?F=S&BrandCode=AL" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"

看到这里是我的访问日志的更大样本(少数正常的 get 请求与其余的 408 一起)

我对这些 IP 进行了反向 IP 查找,发现它们似乎来自美国和加拿大的不同地区。我想这可能意味着其中涉及代理?以下是大量拦截:

96.42.74.117 - - [18/Feb/2013:02:55:58 -0500] "-" 408 0 "-" "-"

这情况经常重复。

我犹豫着是否应该立即下结论说这是一次攻击,而不是一次故障,但记录下来的探测次数一直在稳步增加,例如日志监视还说

 A total of 125 sites probed the server
    107.22.9.89
    108.132.76.100
    108.172.60.59
    108.226.133.142
    12.166.56.82
    12.54.94.24

.... 不断列出对服务器进行检测探测的各种 IP。在“探测”服务器的 IP 列表中,有一些与使用空值命中访问日志的 IP 重叠,因此这可能表明存在攻击,但由于服务器必须处理请求,因此如果这里发生的是 DOS 请求超时攻击,则很难区分合法超时和 DOS 请求超时攻击。

我该如何调试这个问题,或者如果这是一个攻击,该如何处理这个攻击?

答案1

根据我所做的研究,这些是导致408消息的一些可能性。您可以测试每一个,以确定与您的情况相关的一个。

1) 非常低的 ApacheTIMEOUT值 – 您的 Web 服务器可能在客户端有机会发送请求之前就结束会话。

访问日志中 408 错误代码过多

2) browser predictive optimization- 您可以轻松地使用不同的浏览器进行测试。tail -f /var/log/apache2/access.log只需使用相关的关键词,将您的网站带到第一个搜索页面上,将鼠标悬停在指向您网站的链接上,检查网站预览是否出现......所有这些都无需点击打开您网站的链接即可完成。

http://forum.linode.com/viewtopic.php?f=10&t=8048

3) denial of service attack- 诸如此类的 ddos​​ 攻击slow loris可能会打开过多到服务器的连接,而不发送任何消息,从而占用所有 Apache 进程。

http://blog.spiderlabs.com/2011/07/advanced-topic-of-the-week-mitigating-slow-http-dos-attacks.html

上面的引文链接 -

“诀窍是打开与服务器的连接但不发送任何字节。打开连接并等待几乎不需要攻击者投入任何资源,但它会永久地占用一个 Apache 进程以耐心等待请求。Apache 将等到超时到期,然后关闭连接。从 Apache 1.3.31 开始,请求行超时将记录到访问日志中(状态代码为 408)。请求行超时消息与级别信息一起出现在错误日志中。Apache 2 不会将此类消息记录到错误日志中,但正在努力添加与 1.x 分支中相同的功能。”

答案2

大多数 408 代码服务器响应似乎是由于客户端超时而不是前瞻造成的。我排除了所提到的案例、我的服务器和引用的文章中的拒绝服务,因为点击次数很少。我曾尝试但未能通过 OS X 下的 Safari、Chrome 或 Firefox 中的前瞻重现任何 408 错误。大多数月份我在本地(非公共)服务器上也没有看到它们,如果它们是正常的浏览器行为,那我预料到了。可能是浏览器通过打开连接但从不将它们用于请求来进行前瞻,但我认为这种行为并不常见,不足以解释这些公共服务器上 408 的数量。虽然使用空请求打开连接确实会启动连接,但前瞻抓取资源或使用 OPTIONS(我也只在罕见的跨站点和蜘蛛情况下看到)更有意义。

我对一个 47 个 IP 列表进行了 DNS 主机查找,这些 IP 收到 408 个响应,但日志中没有已识别的资源、代理或请求大小,这些响应来自一个很少使用的公共服务器。我忽略了另外 67 个 IP,它们仅在最后一个元组上有所不同,并用每组中的第一个元组表示它们。所以这是 47 个不同的客户端网络/ISP。Apache 的超时默认为 60 秒。在这 47 个 IP 中,有 20 个产生了计算机名称。其中 10 个(50%)位于中国大陆,5 个位于美国(25%,所有 OH、OK 和 NH),5 个位于巴西、英国、意大利和台湾(ROC)。我还怀疑 27 个没有产生计算机名称的 IP 中有很大一部分也在中国,但无法显示这一点。

由于它们的块已经被表示,所以在 67 个被忽略的 IP 中,有 63 个是百度蜘蛛:baiduspider-*.crawl.baidu.com(如果这看起来太多了,请记住,就每月搜索量而言,它现在比 Yahoo 或 Bing 还要大 - 仅次于 Google)。

如果是现代浏览器行为导致的,我预计美国的比例会更高。我登录的服务器位于湾区。相反,我认为这主要是网络拥塞导致连接设置时间过长,并允许在连接断开或被 Apache 超时之前发送和接收完整的请求。特别是由于需求增长、跨境带宽不足和中国国家防火墙基础设施导致的极端拥塞。这也可能是故意伪造的连接重置,但没有理由为此期望。其余的是其他地方连接不良或设备状况不佳的家庭用户。

我认为问题主要是客户端连接问题,但您可能希望有一个和解的、非图形化的 408 错误页面。尽管根据出站响应日志中显示的 0 大小来判断,Apache 并未使用错误页面。

答案3

在我的例子中,Apache 超载了。解决办法是关闭活着并在 apache.conf 中增加 MaxClients。

答案4

当我修改 FastCGI 服务器的 Apache 配置时遇到了这个问题。


将值从 60增加到-idle-timeout900 让我几个晚上都睡不着觉,因为我无法将 408 错误追溯到这个小变化。

很高兴我最终通过将其恢复到 60 来修复它。

相关内容