防御 DOS 攻击

信息安全 网络服务器 阿帕奇 拒绝服务
2021-08-20 15:29:31

我们当前的站点很容易被DOS。我可以从 Apache 对它执行 AB 测试,它会消失大约 5-10 分钟。我们一直在与其他人对站点进行 DOS 操作时遇到问题 - 以至于我们不得不将其关闭 8 小时(由服务器主机推荐)。

该服务器由 Rackspace 托管。他们建议将其关闭 8 小时,当我们将其重新启动时,攻击又恢复了。

我们为 DNS 设置了云闪现,但是在发送了 58,000 个请求的 AB 测试之后,该站点再次离线(不像最初那样长)。

Rackspace 不再提供任何建议,我暂时需要想办法,此时切换服务器主机不是一种选择(首席开发人员将在 1 周内离职,换一个新职位)。

这种特定的攻击使用命令在 mysql 数据库中创建了很多连接sleep

有没有人对如何保护再次 DOS 攻击有任何建议或建议?

增加虚拟主机上的 RAM 会有所帮助吗?

4个回答

您可以采取一些措施来防止 DOS/DDOS。
首先,我建议使用 autoban 防火墙。我已经使用Fail2Ban一段时间了。我对 SSH、FTP、BIND 等的 DDOS/DOS 攻击的大部分问题都已解决。fail2ban 实际上做的是扫描日志文件,当正则表达式模式匹配 X 次时,它会禁止该人。多做一点工作,您就可以让它读取几乎任何类型的日志文件。

其次,有几个用于 apache 的 mods 可以防止 DDOS/DOS 攻击。其中之一是mod_evasive我使用了一段时间,但 fail2ban 对我来说效果最好(目前),所以我并没有完全进入 mod_evasive。

另一种可能性是使用 Nginx 作为前端,它将代理转发连接请求到您的 Apache 服务器。然后将 Nginx 的HttpLimitZoneModule( info ) 设置为所需的数字。这将减少来自单个 IP 的最大传入连接,但不会阻止 DDOS。

最后 - 关闭所有未使用的端口。仅将需要公开的端口保留为端口 21、53、80、443 等。这将限制攻击者可能瞄准的可能性。

编辑:
通过设置一些限制 icmp 的 iptables 规则,确保您不会得到 ping flood。这是一个解释 ping flood 工作原理的链接。试着先看图片,然后文字对你来说会更有意义。
如果您使用的是 iptables,此命令可以帮助您防止 ping/icmp 泛洪:

iptables -A INPUT -p icmp -m limit --limit 6/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p icmp -j DROP

第一个将限制 icmp 请求每秒最多 6 个请求。之后,此人将不再收到任何回复。这将消除正在执行循环的机器人:

for(i=0; i<1000000; i++){ 
   some evil code that will bring your server down 
   either by pinging or just connecting to random ports. 
};

如果攻击是使用命令创建大量数据库连接sleep,那么听起来 DoS 不是您的直接问题,而是问题的后果。也就是说,您的数据库正在sleep运行很多。

我想说这里有两种可能性:

  • 第一种可能性是这是一个内置函数,在某些情况下,您的应用程序显式导致数据库休眠(如@Rory 所述)。如果是这种情况,这是一个非常糟糕的模式,应该被删除。还有其他解决方案,您绝对应该避免这种情况。
  • 更有可能,甚至更糟糕的是,您的网站中存在SQL 注入漏洞。消息是,到目前为止,攻击者似乎使用它对您的站点进行 DoS。坏消息是它可能比这更糟糕。
    但是,更好的消息是,它是代码中的一个特定错误,任何有能力的程序员都应该很容易找到并修复它,而不是无定形和匿名的“DoS”(实际上可以是任意数量的东西)。

整治?
首先,弄清楚以上哪种情况。应该很容易,首先询问程序员是否sleep故意向数据库发送命令。也应该很容易在代码库中搜索相关sleep字符串。
如果是第一种情况 - 只需重构代码以删除有问题的命令。
否则 - 无论如何你都应该这样做 - 阅读一下 SQL 注入,并让所有程序员都这样做。找到并修复缺陷,然后进行有针对性的渗透测试。(您可以在这里获得经验丰富的安全专家的帮助)。然后考虑此类严重安全漏洞的根本原因,并开始通过培训、代码审查、SDL、渗透测试等来提高整体安全水平(安全专家也可以提供帮助)。

这篇文章对于外行来说是一个好的开始。它最终建议您聘请安全专家。

如果这不是一个选项(如果您希望成为专家),那么我已经读到有效的 DOS 缓解策略涉及:

  • 拥有尖端的 IDS 工具(第三方甚至自己开发的)来检测 DOS 攻击的开始(流量突然激增等);
  • 让某人全职(至少一段时间)监控网络流量并阻止冗余连接到服务器的 IP 地址(不止一次) --> 请参阅本文了解更多信息

在不知道您是谁/为谁工作的情况下,很难猜测您是否一直受到同一方的再次攻击。如果你是一家大公司,它可能有多个(不同的)团体试图让你关闭。如果您较小,则可能是同一实体/团体攻击您。如果是这种情况,那么如果您承诺以这种方式积极阻止违规 IP 数周,您很可能会随着时间的推移将攻击者碾压并阻止他们。

安全方面的大事是让获取资产的成本大于资产本身的价值。

而且,如果您是一家大公司,您可以聘请一位比我更了解联赛的真正专家/顾问;-)

阅读此问题以获取有关 DoS 攻击如何工作的更多信息。

对于这种特定情况,攻击使用您允许 ( sleep) 的函数强制等待循环,直到您的数据库不再响应。

您的解决方案可能是sleep完全禁止该命令,除非您需要它。一个更好的解决方案是阻止所有与数据库的连接,除非通过存储过程,以便只允许运行应用程序所需的那些命令。这将使攻击者更难找到和利用漏洞。