我遭受了 DDoS 攻击。我该怎么办?已经解决了这种“典型问题”,但我认为我问的是可区分的变体,如下所述。但如果这篇文章不合适,请告知。
我收到的攻击来自各种不断变化的 IP;最近几分钟来自 66.135.63.82。所有攻击都针对我自己编写的 CGI(它是 gpl 的http://www.forkosh.com/nutshell.html但除了我(显然还有黑客)之外,其他人对此并不感兴趣。攻击者使用一个看起来很傻的 ?query_string 运行我的 cgi,我添加了一个 qvalidate() 函数,到目前为止,该函数似乎可以可靠地识别它们。对于无效查询,我现在会休眠(15),然后向攻击者发出一个 ~25MB 的页面(只是为了表明我也很烦人:)。他们似乎确实在等待——而不是每秒多次攻击,它们现在分散在大约 15 秒的间隔内。
但从长远来看,这种半修复方法似乎很愚蠢,而且最终是无效的。而且它浪费了我大量的时间,每天检查几次,偶尔调整程序。所以我想问的是——我可以在我的 cgi 中编写什么代码来更好地处理这些攻击???我可以实时地掌握攻击。而且我有一个 getenv("REMOTE_ADDR") 中的 ip。所以现在我可以做任何我想做的事情(除了把他打得落花流水,这是我真正想做的,但不知道如何编写代码:)。最好的做法是什么?谢谢。
编辑-- 谢谢大家的回复。我应该提到我的网站在共享主机 dreamhost.com 上,所以有些建议对我来说不可用。我正在等待 isp 的回复。但由于目标是我自己的 cgi,我希望这能给我一个机会去做一些通常不可能的事情。
编辑-- @HBruijn 为什么偏离主题?在这篇文章的顶部,我给出了一个指向该网站关于这个主题的“典型问题”的链接。然后我继续解释为什么我认为我问的是该问题(显然是主题相关的)的“可区分变体”。此外,我最初发布https://softwareengineering.stackexchange.com/questions/316052/how-to-best-deal-with-ddos-attack-against-your-my-site他们让我把它发布在这里。想想看:)
答案1
我首先会使用 fail2ban 来查看 Web 服务器日志,一旦发现可疑的访问,就会在接下来的一个小时内对该 IP 进行防火墙保护,或者类似操作。但是,这需要拥有对服务器的 root 访问权限才能操纵防火墙。
有第三方服务,例如 cloudflare,可以在流量到达您之前对其进行清理。他们的服务范围从免费到昂贵不等。查看选项,看看是否有适合您预算的有用服务。
您可能还想与您的托管服务提供商联系,如果您没有的话,他们可能具有您服务器的根访问权限,并且可能有一系列其他 ddos 缓解选项,可以通过运行服务器和网络,也可以通过订阅第三方 ddos 服务(例如 cloudflare)。
不要费心在代码中添加 sleep 功能。它对你造成的伤害比对他们更大(如果他们并行发出请求,你的内存会更快耗尽)。尽快断开不良连接。