防止恶意爬虫/垃圾邮件和DDoS攻击的方法

从前几个星期我一直在经历我的网站上的机器人攻击。 基本上,爬行者以高频率在网站上运行,导致负载增加。 这导致带宽消耗,从而导致其他人的糟糕的用户体验。 我想知道像谷歌,亚马逊和电子湾这样的网站如何防止这些事情:

  1. 他们如何区分有用的爬虫(谷歌/雅虎/ MSN)和恶意的不跟随robots.txt和其他规则?
  2. 如何通过检查apache访问日志来实时识别可能导致潜在有害bot的模式?

如连接或数据包/时间/ IP的阈值不能设置,因为这将导致适当的用户在网站上的糟糕的用户体验。

这是我做的,我build议:

创build一个在cron上运行1-5分钟的脚本:读取原始访问日志(比如说最后的20,000行 – 取决于你的站点的活跃程度),按IP /主机名组织数据,然后用unix附加结果。 循环查看结果,并确定哪些IP没有向已知和所需的页面元素(如图像,js,css等)发出任何请求。从中可以看出,在一秒钟内请求了多less页面请求。 我会在一秒之内描述4页的请求或更多的过度和滥用。 从那里,检查一个好的机器人白名单(preg_match对“googlebot.com”等东西的主机名),并将所有未列入白名单的结果的IP和主机名存储到数据库中。

在显示/处理任何内容之前,创build另一个在每个页面上运行的脚本。 让它validation正在请求的页面是否来自禁用IP数据库中的IP。 如果是,则返回一个带有validation码表单的403,提示用户提交重新审核。 如果他们这样做,并validation,让脚本解除他们。 如果他们不被禁止,请将其存储在会话中,以避免重复validation该访问者。

最后,在服务器上安装monit,并将其configuration为每分钟监控一次http。 如果服务器没有响应,它会自动重启。 这将有助于减less停机时间和极端的滞后。 我上面列出的脚本将自动识别刮刀和坏机器人,并撤销访问。 如果有的话,它也会自动重新审查请求。

像Cloudflare或项目HoneyPot解决scheme应该做的伎俩。 看看这个几个其他的指针 – https://drupal.stackexchange.com/questions/45678/watchdog-404-page-not-found-entries-from-spambot-guessing-urls/48448#comment50114_48448