过去两天,我们的基于 Linux 的 Tomcat 5.5 网络服务器在几分钟内就崩溃了,启动了数千次下载,然后又停止了。访问日志中的一些请求路径以类似“?jfkdsjkfsdk”的部分结尾。Tomcat 系统是否存在已知的漏洞,以应对此类攻击?
更新: 我们目前运行的是纯 Tomcat,没有 Apache。
答案1
连接数千次是任何具有 maxconnections 设置的服务器(或每个连接使用大量资源的服务器)的已知“漏洞”。作为 DDOS,他们很可能不会“停止”下载,他们只是切断连接而不发送 RST 数据包,因此连接会一直挂起直到超时,或者使用类似trickle
每次仅确认几个字节的方法以防止连接超时。
为缓解此问题而采取的任何措施都取决于您的整个设置。假设您当前正在使用 apache+mod_jk+tomcat,那么除了 Bart 的 fail2ban 之外,我还会研究mod_security检测可能的恶意请求并拒绝它们。另一个想法是,如果您确实使用 tomcat 发送静态数据,则使用域将要提供的静态数据直接从 apache(或 lighttpd 或 nginix 等轻量级服务器)移动static.example.com
。或者,如果您需要让代码决定发送哪个文件,请考虑使用mod_xsendfile在 apache 中提供您的应用程序“指向”的静态文件,这将让 tomcat 完成请求并在 apache 处理文件时继续前进(而不是让 apache 和 tomcat 都忙于发送文件)。
答案2
根据 206 个响应,您的 Tomcat 服务器正受到重叠范围攻击,如 CVE-2011-3192 中针对 Apache 所述。
当上个月这是一个热门话题时,我觉得 Tomcat 的默认 servlet 看起来很脆弱 - 请参阅这里。
阻止这种情况的最佳方法是停止让默认 servlet 提供这些静态文件,或者从Range:
传入请求中剥离标头。
答案3
您是否从 Apache 代理 Tomcat?如果没有,您很容易受到以下攻击:慢蜂。公开暴露 Tomcat 似乎是一个糟糕的主意。
即使您通过 Apache 进行代理,您也需要小心使用 mod_antiloris 防范 Slowloris 式的攻击,或者更好的是,nginx
为您的前端代理使用一个已被证明不会受到 Slowloris 攻击的服务器。
肖恩·马登有更好的答案,先听取他的建议。
答案4
我不知道,但并不代表没有。使用类似 fail2ban 的工具搜索日志以查找这些请求并自动禁止 IP。
您还可以实施资源/配额限制来限制下载请求、代理/缓存以减轻负载,以及警报以在发生这种情况时通知您。除了限制我们的传出请求外,因为即使您没有受到 DDoS 攻击,您也不希望合法请求压垮您的可用带宽。
大多数漏洞都会“控制”您的服务器;从这个角度来看,服务器崩溃/ddos 攻击是适得其反的。实际上,关闭服务器的唯一原因是如果有人对您的公司怀有私心。