每天下午 2-3 点左右,大量机器人都会访问我的网站,然后它们就会将网站彻底封杀。几天前只有 2-3 个 IP,所以我可以轻松阻止它们,但今天有超过 600 个机器人连续 3 个小时涌入我的网站。IP 各不相同,不断变化,并且来自世界各地。650 个 Apache 工作者根本无法处理它。
这些机器人 100% 可疑,因为它们引用自非常愚蠢/随机的 URL。例如:
209.141.61.45 - - [18/Apr/2019:19:37:03 +0200] "GET ***" 200 23611 "/mhrjh" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246"
195.176.3.19 - - [18/Apr/2019:19:37:03 +0200] "GET ***" 200 24330 "https://search.aol.com/search?q=sjhryp" "Mozilla/5.0 (Linux; Android 6.0.1; SM-G920V Build/MMB29K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safari/537.36"
172.96.118.14 - - [18/Apr/2019:19:37:04 +0200] "GET ***" 200 22477 "https://yandex.ru/search/?izpyzuxwbn" "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"
有什么方法可以保护我的服务器免受此类攻击?到目前为止,尝试了地理封锁,但将所有外部 IP 地址添加到 iptables 中需要很长时间。
答案1
DDOS 攻击很难缓解,正如您所发现的(至少这看起来是这样)。您可以使用诸如 之类的服务来fail2ban
禁止这些 IP 连接到 Web 服务器,在有限的攻击中,这可能会有所帮助。但是,禁止 IP 需要一些重复的请求,而这可能比 Web 服务器在这段时间内可以处理的请求还要多。
解决此问题的一个好方法是使用 CDN(内容分发网络)为静态内容建立缓存,这些内容无需接触原始服务器即可提供给客户端。市场上有许多付费 CDN,它们具有许多功能,包括通过实施相同的驱逐方法以及其他方法(尽管在可以处理初始峰值的更大网络上)来实现 DDOS 保护。
然而,如果不及时处理,持续且足够多样化的 DDOS 攻击可能会导致网站停机并向您的 CDN 提供商收取巨额费用。