在我的日志监视记录显示,这些方面一直在稳步发展:
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 服务器可能在客户端有机会发送请求之前就结束会话。
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-timeout
900 让我几个晚上都睡不着觉,因为我无法将 408 错误追溯到这个小变化。
很高兴我最终通过将其恢复到 60 来修复它。