如何保护 Tomcat 7 免受 Slowloris 攻击

信息安全 攻击 拒绝服务 雄猫
2021-08-10 01:29:01

我正在使用 Apache Tomcat 7 在 Linux 上运行我的 webapp。我通过 Acunetix 对其进行了扫描,它告诉我我的 webapp 容易受到“慢速 HTTP 拒绝服务攻击”的攻击。我该如何保护它?

Acunetix 将我推荐到这里,但它是关于保护 Apache,而不是 Tomcat。

4个回答

已专门为此问题分配了一个 CVE,因为它适用于 Apache Tomcat:CVE-2012-5568那里的参考资料比给您的参考资料更合适。

Tomcat 开发人员不认为这是一个漏洞,也没有修复计划。

潜在的解决方案:

  • 使用防火墙规则来防止来自单个主机的过多连接。这将缓解普通的拒绝服务攻击,但不会缓解分布式攻击 (DDoS)。

    这是一个 iptables 命令的示例,可用于限制可以从单个客户端主机到端口 80 建立的并发连接数:

    # iptables -A INPUT -p tcp --syn --dport 80
    -m connlimit --connlimit-above 50 -j REJECT

    https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2007-6750

    但是,如果许多用户从单个 IP 合法连接(例如大型代理),这将产生副作用,因此需要合理调整连接数量 - 取决于预期的流量。

  • 不幸的是,最好的选择是将 Tomcat 服务放置在可以更好地处理 HTTP 连接的 Web 服务器的下游,例如 Apache。然后使用 Apache 解决方案,例如 mod_reqtimeout 或 mod_antiloris。

有一个 Apache 模块应用一些启发式方法来(尝试)检测“slowloris”攻击并加以应对。它被称为mod_antiloris(这是 Apache 的一个模块不是Apache 软件基金会的一个模块)。有关详细信息,请参阅此答案

请记住,就像所有拒绝服务攻击一样,没有解决方案,只有缓解措施

请注意,Tomcat 是 Apache Foundation 的一部分,因此在技术上它被称为 Apache Tomcat。然而,传统的 Apache 网络服务器(官方称为“Apache HTTP 服务器项目”)经常被简称为 Apache。下面,“Apache”指的是 Apache HTTP 服务器,而不是Tomcat。

Tomcat 通常不作为 Web 服务器运行,它作为应用程序服务器运行。如果 Tomcat 直接暴露在 Internet 上(没有与 Apache 合作),那么您的解决方案应该是以下之一:

  • 在 Tomcat 前面设置一个反向代理服务器,例如 Nginx、Lighttpd 甚至 Apache。

  • 按照传统配置将 Apache 和 Tomcat 一起设置

如果你在你的解决方案中使用 Apache,那么你需要使用一个slowloris 缓解策略。有 mod_antiloris,它将按照您链接的文章中的描述为您执行此操作。还有mod_reqtimeout,它是 Apache Core 的一部分,默认情况下通常不包含在 Apache 安装中。

mod_antiloris通过限制给定 IP 可以创建的同时连接数来工作。
mod_reqtimeout通过限制单个请求可以保持空闲的时间来工作。

两者都有自己的位置,良好的防守可能会同时使用两者。

此外,mpm_event Apache worker 配置的工作方式与其他服务器(例如 Nginx、Cherokee 和 lighttpd)相同,并且不易受到 Slowloris 攻击。这在大多数现代安装中都可用,但标记为“实验性”。特别是,它可能不兼容一些依赖于每个连接线程概念的旧模块。一个经常被引用的例子是mod_php,尽管这可能不适用于较新的版本。

你的tomcat前面有apache(网络服务器)吗?如果是这样-> 升级。自 2.2.16 IIRC 以来,apache 不再容易受到 slowloris 的影响,并且 2.2.16 附带 debian 挤压,即 oldstable。

如果您的 tomcat 前面没有反向代理:使用一个,最好使用 varnish 或 nginx。

有关使用反向代理的原因,请参阅此答案 @ serverfault