如何处理search引擎上的DDoS攻击?

我们正在运行一个search引擎,并在过去的几天中,从数千个IP地址中看到大量的假search查询。 在查询文本或IP范围方面没有真正的模式。 似乎有一个僵尸networking试图使我们失望。 目前,我们每秒看到大约30个假查询,并且正在增加。

我们试图设置cloudflare,但它并没有真正的帮助。 我们可以尝试用Captchas阻止不好的stream量,但这会降低我们真实用户的可用性。

有人有一个想法,我们如何处理这个? 我们使用Route53在AWS上运行。

这是一个艰难的,因为他们基本上使用您的网站的合法function。

你有几个基本的select:

  • 做更多的工作来尝试识别攻击并阻止它们。 在这种情况下,我必须做的第一件事情就是创build一些工具,以便查看正在发生的事情并查找模式。 我能够很容易地做到这一点,只是使用一些awk脚本,并在各个领域的重要性来寻找共同的东西。 请求是否有相同的用户代理? 也许引荐? 也许searchstring的长度? 所有的IP都来自一个国家吗? 也许他们有一些奇怪的方式使用URL,比如附加一个“?” – 任何可以locking的东西都能识别stream量。 这部分通常是一个猫和老鼠的游戏,是一个问题,你有多less可以或愿意做你的最终与攻击者是多么勤奋。

  • 您也可以禁用您的网站的function,并保持其余的。 也就是说,用一种静态的“暂时不可用,我们正在做一些改变”的信息replace你的search引擎可能是最实际的,直到攻击结束。

  • 您还可以优化search引擎,使其在负载下运行更好。 根据你使用的是什么引擎 – 有些search引擎效率不高(Drupal的想法)。 正确优化,您可能能够处理stream量。 在运行这些数字之前,请不要低估由于代码效率低下而导致CPU,内存等丢失的程度。

如果这个search引擎是你的业务的核心,而聪明的人真的在追求它,那么你就要尽可能地优化它,并扩大你的基础设施来处理负载。

你需要改变你的function,让你过滤出不好的stream量,这将导致“军备竞赛” – 但你总是处于你正在改变的位置,他们正在回应 – 如果你总是准备提前下一步,您可以尽快中和他们的新版本,一旦它变得可用。

如果你保持这个状态,他们很快就可能放弃或改变攻击向量。

例如:

  • 添加一个隐藏的字段到search表单(只是一个常数值),拒绝请求,如果该字段丢失。

  • 当他们更新他们的机器人包括该领域改变它的价值到一个IP特定的价值(只是IP地址将是罚款)

  • 当他们再次更新时,将值更改为IP地址+密钥的散列

  • 下一次更新添加一些需要一些简单的JavaScript(例如给客户端两个数字,并要求这些数字的总和)。

  • 下一次更新从cookie获取javascript参数。

  • 等等等等。

关键是每次他们更新攻击时,你都有一个解决scheme,并且强迫他们再次更新,有时他们希望放弃并寻找一个更容易的目标。

只有在某个特定IP在x时间段内发出超过x个请求之后,才能引入validation码。