zzxworld

浅谈个人网站如何应对 DDoS 攻击

平日里比较喜欢逛一些个人博客网站,逛的多了会注意到,这些不同的个人网站却时常会碰到同一个问题:网站被 DDoS 攻击了。我这个小站也许是因为籍籍无名的关系,暂时还未碰到类似的事情。但我相信该来的总是会来的,所以未雨绸缪,来假设一下在碰到这种问题后,自己能采取哪些措施和方案。

使用 CDN 服务

这是大部分个人网站在受到 DDoS 攻击后会采取的首选方案。服务商也必定会优先考虑 CloudFlare,因为免费且不限流量。只是在国内访问速度方面会有点影响,所以通常会搭配一个国内的 CDN 来使用。

CDN 是一个分布式的缓存系统,所以对纯静态站点来说,使用 CDN 会是一个完美的 DDoS 应对方案。如果网站有站内留言或是后台管理系统等这类靠后端语言支撑的功能,用 CDN 还是无法防止一些别有用心的 DDoS 攻击者。因为动态内容无法被 CDN 缓存,在访问这些功能地址时,请求会绕过 CDN 直接来到服务器。对于动静混合的常规站点,CDN 只能拿来作为第一层防御屏障。

使用 iptables

Linux 服务器一般都自带了 iptables 流量控制功能,使用它可以实现一个软件网络防火墙。软件防火墙虽然无法跟真正的硬件防火墙对比,但对于那种只用少量 IP 发起大量 DDoS 的小型 DDoS 攻击者,还是能起到一点作用的。

只是在使用 iptables 时需要注意一点,要搭配 ipset 来使用。ipset 用来管理要拦截的 IP 池,然后在 iptables 拦截规则中引用这个 IP 池。这样比纯使用 iptables 要高效。关于这两个命令的使用,可以参考我前面总结的两篇文章:

使用扩容方案

使用这个方案需要花点钱,但也是最有效的 DDoS 应对方案。在受到攻击时,通过增加服务器的数量来应对攻击负载。使用这个方案唯一要考虑的就是如何用最小的成本来达到效果。

以阿里云为例,使用它的免费云解析功能,可以为单个域名提供 10 个主机地址的负载均衡。然后它为 4 核 CPU 的 ECS 免费提供 5G 的 DDoS 防护功能。也就是说,把免费的 10 个域名负载均衡解析名额用满,至少能获得 50G 的 DDoS 防护能力。10 台云服务器成本的确不小,不过除了一台主服务器的成本,剩下的 9 台可以采用阿里云提供的「抢占式实例」。我看了下,一台 4 核 8G 的共享型抢占式 ECS,价格为 0.275/小时。买 9 台一天的成本约为 0.275 x 24 x 9 = 59.4 元。以这个成本来获得 50G 的防护能力,我个人还是能接受的。而且这 9 台服务器也不是一直要启用,只需要在受到 DDoS 攻击使用即可。

注意,以上扩容方案建立在网站能够分布式部署的前提下。也就是说这 10 台机器代码虽然保存在不同的机器上,但要确保数据库和上传图片这类数据能共用,否则可能会导致防护期间出现数据不一致问题。

另外,阿里云提供的抢占式服务器只能确保 1 小时的稳定可用,所以最好配合它的接口脚本实现一键式创建。

终极方案

对于利益攸关的网站来说,DDoS 的终极方案是购买高防服务。这类服务通常价格不菲,价格一个月上万。这价格一看就明白,不是提供给我这种个人网站的产品。所以对我来说,终极方案就是:…………装死。

如果我用上面的方案都无法解决被 DDoS,那就只有任他去了。把服务器一关,爱咋咋地。等他玩累了,我再开起来。来了我就又关。反正也不靠这个挣钱,没啥影响。