mod_evasive 是一个 Apache 模块,可帮助保护您的服务器免受暴力和拒绝服务攻击。设置 mod_evasive 为您提供了一个安全网,可以在恶意行为者开始降低服务器性能之前将其捕获。
该模块带有多个配置参数,可让您定义客户端在设定的时间范围内可以发出的并发请求数。超出限制后,进一步的请求将被阻止一段时间。
安装 mod_evasive
安装步骤因您的操作系统发行版和 Apache 版本而异。对于基于 Debian 的系统上最流行的 Apache 2.4 组合,请使用以下步骤。项目的存储库中还提供了从源代码构建的说明。
apt update
apt install libapache2-mod-evasive
安装通过apt将自动启用该模块。
您可以使用该apachectl实用程序进行检查:
apachectl -M | grep evasive
如果模块处于活动状态,您应该会看到显示的模块名称。
配置阻止设置
mod_evasive 配置文件通常可以在/etc/apache2/mods-enabled/evasive.conf. 它使用与其他 Apache 配置文件相同的格式。可以在mod_evasive文档中找到完整的参考。
这是具有多个自定义项的示例配置文件:
<IfModule mod_evasive20.c>
DOSPageCount 5
DOSSiteCount 10
DOSPageInterval 1
DOSSiteInterval 2
DOSBlockingPeriod 300
DOSEmailNotify user@example.com
</IfModule>
mod_evasive 区分页面请求和站点请求。您可以相互独立地设置这两个阻塞因子。此示例将阻止在 1 秒间隔内五次请求相同 URI 的客户端。对于在两秒间隔内从单个站点请求 10 个以上 URI 的客户端,将另外施加一个块。
当超过任一限制时,客户端将被阻止在五分钟(300 秒)内发出更多请求。mod_evasive 将发送电子邮件user@example.com通知 IP 地址已被阻止。
mod_evasive 还支持在达到限制时运行任意系统命令。这可用于将该工具与您自己的应用程序或防火墙集成,以便您可以在数据库中记录块。设置DOSSystemCommand设置,%s用于表示被阻止的IP地址:
DOSSystemCommand /app/blacklisted_ip.php --ip=%s
将已知 IP 列入白名单
mod_evasive 支持已知 IP 的白名单以帮助开发和测试。开发人员有时会在服务器上工作时创建大量请求,无论是有意还是无意。
使用该DOSWhiteList设置指定要忽略的 IP 地址范围。这些地址中的任何一个都不会受到限制。
DOSWhiteList 127.0.0.1
DOSWhiteList 192.168.0.*
它是如何工作的?
mod_evasive 通过在临时黑名单中维护 IP 地址和 URI 的哈希表来发挥作用。IP 地址和 URI 被散列以创建一个密钥,该密钥可用于检查客户端之前是否请求过相同的页面。
当 URI 或站点以超出您允许的频率出现在 IP 的哈希表中时,就会发生阻止。这会导致将403状态代码发送回客户端。状态是客户端将收到的唯一响应,最大限度地减少处理被认为是虚假或恶意的请求所需的服务器资源。
一旦达到上限,客户端必须等待指定的DOSBlockingPeriod时间才能发出另一个成功的请求。在等待期间再次尝试会导致施加更长的块。其他 IP 地址将继续像往常一样被接纳,不应因拒绝服务尝试而中断。
该模块可能会导致非常活跃的服务器的性能下降。它需要记录每个请求并检查IP是否已被阻止,或需要被阻止。具有足够内存的繁忙服务器应该增加DOSHashTableSize设置以允许更大的内存哈希表。这减少了根据其他最近的请求查找传入 IP 所需的时间。
DOSHashTableSize 32768
测试您的安装
测试 mod_evasive 的最佳方法是发起大量请求以检查您的服务器如何响应。正确启用 mod_evasive 后,您应该很快就会看到 403 和电子邮件警报(如果已配置)。
该ab命令行工具可以用来发起连接集体:
ab -n 1000 -c 50 http://...
您应该调整-n和-c参数以适合您的 mod_evasive 配置和预期的服务器影响:
- -n – 要发出的请求总数。
- -c – 要打开的并发连接数。
上面的示例将以 50 个为一组发送 1,000 个请求。
ab是一个强大的工具,可以发起真正的拒绝服务攻击。在发送请求之前,请加倍确保您指定了正确的服务器地址!
概括
mod_evasive 是一个简单但有效的模块,用于防止暴力攻击影响服务器的运行。您可以配置适用于每个尝试连接的客户端的每页和每站点限制。如果客户端最终超过限制,他们将收到 403 并且必须让步到临时阻止期。
作为管理员,您可以选择在实施新阻止时接收电子邮件警报。这可以让您了解潜在的攻击,并让您监控误报。您确实需要在服务器上有一个功能正常的电子邮件堆栈 - mod_evasive 使用系统邮件传输代理发送。
最后,只要 IP 被列入黑名单,就可以通过运行系统命令将 mod_evasive 与应用程序的其他部分集成。此功能可用于标记数据库用户、在第三方监控工具中创建警报,或将块中继到您的其他服务器以保护基础架构的其他部分。