美好的一天,
我在Tomcat前面运行Apache2服务器,我需要在Apache2层上实现DDOS保护机制。我有两个候选者:mod_evasive和mod_security2与OWASP核心规则集。
Mod_security已经安装用于整体保护,但问题是:除了mod_security之外,是否值得添加mod_evasive仅用于DDOS(它是否有任何主要优势)或/experimental_rules/目录中的OWASP crs规则(modsecurity_crs_11_dos_protection.conf)提供相同的保护?或者这只是一个偏好问题?这些网站的流量通常不是很高。
马丁
mod_evasive或fail2ban与mod_security并行使用。
mod_security已经处理的事情很少,特别是对于DDOS,但是mod_evasive或fail2ban对于解决不需要的多个请求来阻塞服务器会派上用场。
这是一个古老的问题,但由于它没有公认的答案,这里是两个工具之间的比较。在线搜索,您几乎总能找到安装两者的建议。有人可以随意告诉我我错了,但我认为这是浪费资源。在我看来,带有CRS 2.9.3.3的ModSecurity 3.3.3的当前版本可以代替运行mod_evasive。我认为它做得更好,并且更具可配置性,尽管两者略有不同。
默认情况下,mod_evasive 将阻止来自同一 Apache 站点的 IP 地址的请求,当该 IP 达到 50/秒时。它还具有单独的设置,用于阻止来自站点上"同一页面"的 IP 地址的请求。这默认为 2/秒,对于大多数网站来说,这将是低的。默认阻止期为 10 秒(在我看来很低)。当然,所有这些都可以配置。mod_evasive 和 mod_security 之间的主要区别在于,默认情况下mod_evasive还会阻止"同一页面"请求。我还应该提到,mod_evasive使用 Apache 子进程号来确定请求是否计入 IP 地址。如果 Apache 生成一个新进程,那么这些请求将不计入区块。此外,即使在阻止之后,某些请求也可能溜走。您需要确保 Apache 具有较高的MaxRequestsPerChild
值。
默认情况下,安装了核心规则集的mod_security不能抵御 DOS 攻击。您必须通过取消注释规则 900700 在crs-setup.conf
文件中专门启用该功能:
SecAction
"id:900700,
phase:1,
nolog,
pass,
t:none,
setvar:'tx.dos_burst_time_slice=60',
setvar:'tx.dos_counter_threshold=100',
setvar:'tx.dos_block_timeout=600'"
以下是它的作用:默认情况下,当客户端在 60 秒内发出 100 个或更多请求时,这将阻止来自特定 IP 地址的请求。例如,如果客户端在 30 秒内发出 100 个请求,他们将被阻止 600 秒。还有其他设置会影响这一点:如果setvar:tx.paranoia_level=1
则需要两次 100 个请求的突发,每个请求在 60 秒内才能发生阻塞。但是,如果您设置"setvar:tx.paranoia_level=2"或更大,则只需要一次突发。ModSecurity还添加了另一个不错的默认功能:它从请求计数器中排除静态文件。在规则 900260 中,默认扩展名为: setvar:'tx.static_extensions=/.jpg/ /.jpeg/ /.png/ /.gif/ /.js/ /.css/ /.ico/ /.svg/ /.webp/'
这有助于防止在客户端请求静态文件时意外阻塞,因为这些文件不需要来自服务器的大量资源。这样,我们专注于DOS攻击,这些攻击实际上可能会减慢服务器的速度,同时减少误报。
结论
如果要轻松控制特定页面请求的阻止,或者您需要快速,轻松地设置DOS保护,请启用mod_evasive。我还要补充一点,配置mod_evasive以更新您的 iptables 并在点击时运行脚本可能会更容易一些。
如果你想更好地控制DOS攻击如何被阻止的各个方面以及阻止期间会发生什么,那么你真的只需要mod_security。如果您关心的只是DOS攻击,那么mod_security可能是矫枉过正。就DDoS攻击而言,我认为这两种工具在默认设置下同样有用,因为它们都按IP地址存储哈希表。现在,如果您想为mod_security编写特定的规则,那么阻止的方式和内容没有限制,如果您认为需要,您甚至可以重新创建mod_evasive的逐页块请求功能。