在没有请求或用户代理的情况下在我们的日志中获取 408 错误

Gle*_*ven 45 http apache-2.2 http-status-code-408

我在我们的 apache 日志中收到了很多类似这样的请求

www.example.com:80 10.240.1.8 - - [06/Mar/2013:00:39:19 +0000] "-" 408 0 "-" "-" -
Run Code Online (Sandbox Code Playgroud)

似乎没有请求,也没有用户代理。有没有人见过这个?

Lad*_*ada 35

您是否有机会在 Elastic Load Balancer 后面在 Amazon 中运行您的 Web 服务器?

由于他们的健康检查,他们似乎产生了很多 408 响应

该论坛主题中的一些解决方案:

  • RequestReadTimeout header=0 body=0

    如果请求超时,这将禁用 408 响应。

  • 将 ELB 健康检查更改为不同的端口。
  • 禁用 ELB IP 地址的日志记录:

    SetEnvIf Remote_Addr "10\.0\.0\.5" exclude_from_log
    CustomLog logs/access_log common env=!exclude_from_log
    
    Run Code Online (Sandbox Code Playgroud)

这篇博文中

  • 将您的请求超时调整为 60 或以上。

  • 在我的理解中,这会让你受到慢速攻击,现在对于任何使用 apache 的人来说,适当的 reqtimeout 似乎都很有用 (3认同)
  • `RequestReadTimeout header=0 body=0` 会一起禁用请求读取超时,我不推荐这个 (2认同)
  • @Ladadadada 你错了,ELB 或 ALB 几乎没有帮助对抗慢蜥蜴,它会影响大多数 Web 服务器,请参阅我的 AWS 问题和问题:https://forums.aws.amazon.com/thread.jspa ?线程ID=269176 (2认同)

小智 16

这里已经有很多不错的答案,但我想冒一个额外的注意事项,但尚未具体解决。正如之前许多评论者已经提到的,408 表示超时;并且有很多情况会在 Web 服务器上发生超时。

话虽如此,在扫描您的服务器以查找漏洞的各种情况下,可能会生成 408 错误。在这种情况下,客户端很少提供用户代理,并且通常会突然结束连接,从而导致该连接的异常关闭,从而产生 408 错误。

例如,假设我是一个卑鄙的黑客,他正在互联网上扫描仍然容易受到 POODLE 漏洞攻击的计算机。因此,我编写了一个脚本,该脚本打开与大量 IP 地址的连接以查找接受 SSL 版本 3 的服务器 - 稍后我将使用该列表专门扫描 POODLE 漏洞利用。第一个脚本所做的就是使用 openssl 建立连接以检查 SSLv3,如下所示:

openssl s_client -connect [IP]:443 -ssl3
Run Code Online (Sandbox Code Playgroud)

在 Apache 的许多配置中,此命令将完全按照您的描述产生 408 消息。在我自己的两台服务器上执行此命令会导致访问日志中出现此条目:

<remote IP address>  - - [04/Nov/2015:08:09:33 -0500] "-" 408 - "-" "-"
Run Code Online (Sandbox Code Playgroud)

我想说明这一点,因为即使在 OP 没有使用任何形式的负载平衡的情况下,408 错误也可能在各种情况下发生 - 有些是恶意的,有些表明客户端有问题,有些则表明服务器有问题。(我在 OP 提供的日志中注意到,本地 IP 被指示为远程 IP,但 OP 没有特别提到使用负载均衡器,所以我不确定 OP 是否只是出于此目的使用了不可路由的 IP演示,就像他对 URL 所做的那样)

无论如何,即使我的帖子在当天显然为时已晚,无法帮助 OP 希望它可以帮助到这里寻找所有这些该死的超时错误的解决方案的其他人。


Ins*_*yte 10

有东西连接到端口,然后从不发送数据。HTTP 408 是“超时”错误。这里有一篇很好的文章:http : //www.checkupdown.com/status/E408.html


小智 8

408 超时有多种原因。但是让我们从一切正常的前提开始,然后在某些时候这些 408 开始出现在您的访问日志中 - 即 408 0 "-" "-"。

就像网上很多人指出的那样,408 表示建立了连接,但没有在适当的时间范围内发送请求,因此服务器断开了与 408 的连接。一个傲慢的人实际上回应了有人在这个问题上寻求帮助- “你不明白超时的哪一部分”。

我认为这是一个非常新手的答案,表明完全缺乏对某些安全方法如何与网络服务器软件配合使用的理解。

回到开头,为什么我会看到所有这些 408。您与管理服务器的其他人的共同点是,您每天都会收到大量攻击。现在,你怎么办?好吧:您使用您选择的安全方法来处理它们,这就是变化。

让我们举一个非常简单的例子,删除一个 IP 地址。包含在 iptabes 文件 (rules.v4) 中,您有“-A ufw-user-input -s 37.58.64.228 -j DROP”。所以随之而来的是 37.58.64.228 防火墙识别 IP 并断开连接。在很多配置中,您甚至不知道它已经敲响了门。

现在让我们举一个更高级的例子,根据一些标准删除连接。包含在 iptabes 文件 (rules.v4) 中,您有“-A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP”。这是不同的,因为在这个 iptable 规则中,我们说查看请求字符串的前 1000 个字节,看看是否可以找到“cgi”的子字符串,如果确实找到了该子字符串,则不要去任何此外,只需断开连接即可。

这里的安全方法很好,但就您的日志而言,它具有误导性。在这种情况下,生成的 408 0 "-" "-" 是 apache 可以做的最好的事情。建立了连接并且必须接受请求直到某个点才能应用字符串比较规则,最终导致 408,因为您的规则符合要删除连接的标准。所以,如果我们的小新手宝贝们尝试了,他们就大错特错了。已建立连接并收到请求(在这些情况下您将无法看到它)。尽管生成了 408,但它不是“超时”;在与防火墙规则相关联的请求发出后,您的服务器只是断开了连接。还有许多其他规则会产生相同的 408 情况。大学教师'

理想情况下,会有另一个 Apache 生成的错误代码,例如 - '499',这意味着“服务器读取您的请求并决定它只是无法打扰您娱乐 - Sod Off HaHa”。

使用最新的网络服务器软件,您实际上可以排除 DOS 攻击,并且具有预测功能的新浏览器基因不会像某些人所建议的那样导致这个问题。

简而言之,408的产生是因为服务器没有响应请求,所以就客户端而言,连接超时,实际上服务器读取了请求但由于超时以外的原因而丢弃了连接等待一个要求。

  • 但是*为什么*它断开了连接?我们看到这是服务器日志,而不是客户端日志。 (2认同)

dsu*_*rsl 7

我们遇到了这个问题,并为此困惑了很长时间。我们提出的最佳解决方案是由 AWS 支持的 ELB 团队建议的。它本质上取决于确保您的 httpd 服务器的超时设置都大于您的 ELBidle timeout设置(默认为 60 秒)。

  • 确保您的 apacheTimeout指令值是idle timeout您的 ELB 设置的两倍。
  • 打开该KeepAlive功能,确保它MaxKeepAliveRequests非常大(0 表示无限大或非常高,如 2000),并且KeepAliveTimeout大于您的 ELB 的idle timeout.

我们发现KeepAlive(和相关设置)设置专门将 408 的数量减少到有效的 0(我们看到了一些,但很少)。