最近3天,我的小站godbmw.com经历了2次DDoS。第一次因为没有限制QPS,短短几分钟内CDN被盗刷了300G流量。第二次完善了相关保护措施后,CDN依然被D了90G的流量。经过2天的迁移和补救,终于使得网站服务恢复正常。用此篇记录下整个奋战过程。希望对广大站长有帮助。
- 图片无法正常加载的朋友请移步:被DDos后的及时补救与一些思考:原文地址
- 欢迎来小站看更多干货 + 免费教程:godbmw.com
- 由于最近经常被DDoS,所以不是很稳定,请见谅🙏
1. 来自歪果仁的恶意
1.1 遭遇DDoS
我的CDN部署在腾讯云,10月2日接收到短信提醒:CDN流量已用完。登陆控制台后发现,被盗刷了360G,宽带峰值也到达了难以想象的680Mbps。这对于一个个人网站来说,几乎是不可能的流量。
[图片上传失败...(image-8dd2c2-1541564666217)]
抱着怀疑的态度,我查看了区域商分布,果然,海外的请求占了总请求的98.24%。其中300多G的流量都来自海外,现在可以确定是歪果仁盗刷了我的CDN流量。
[图片上传失败...(image-b61d87-1541564666217)]
没有办法,被迫联系工单,但因为我自己的一些防御没做好,所以这次的补偿不了了之。无奈,只能出钱补上了被盗刷的流量,以保证服务正常使用。并且在工单的交流中,增设了QPS等安全措施。
毫无疑问,限制QPS会影响用户的正常使用,造成延迟。但保险起见,我还是设置了QPS,只希望不要再被攻击。
1.2 再次遭遇
但好景不长,仅安稳度过了一天,又一波来自海外的DDoS让我不得不临时关闭CDN和COS服务。下图中第一个峰值是上一次DDoS,第二个峰值是这次的DDoS。
[图片上传失败...(image-46e04e-1541564666217)]
这次的攻击更高级,颇有一种“道高一尺,魔高一丈”的味道。因为之前应增设了QPS等限制,但这样完全限制不了IP代理池等攻击手段,黑客这次也选择了体积较大的单文件进行攻击。
[图片上传失败...(image-a29f0b-1541564666217)]
我惯例去找了工单,因为上次腾讯云的工程师专门call过来:只要增设了相关安全限制,下次确认是盗刷立即给予补偿。然而这次工单依然是打太极,各种文档、规则扔给我,闭口不谈补偿问题,并且说是我的QPS设置太高了:)。
问题是:QPS设置成5,项目还用不用了?如果用户处于同一个局域网下(校内网、Wifi等场景),那在同一秒中只有一个用户可以正常使用?
最后,工程师还是call过来,经过了1小时的聊天,可以补偿,但是要等一段时间才能批下来这90G的流量包。
1.3 无路可走
经历了2次DDoS,我设置了“宽带封顶配置“。根据平日的使用量,我估计“3Mbps”,并且在超值的时候,返回404,关停服务。
[图片上传失败...(image-7518bb-1541564666217)]
当日晚,就接收到了CDN到达宽带封顶的短信,自动关停了CDN服务:项目也无法正常使用了。
这次,彻底是绝望了,只能先关闭CDN服务,寻求别的解决方法。
2. 坎坷的补救措施
在补救的时候,首先排除了工单的意见:回源到原站或者COS(对象存储服务)。前者会直接造成服务器瘫痪,DDoS是结结实实打在服务器上;后者COS也是流量或者宽带后收费,本质上和CDN没区别。
所以,关闭当前的CDN加速域名,并且清空了COS中的文件。然后针对个人网站和项目应用做了不同的处理。
2.1 公司项目:更改CDN域名
观察被盗刷的资源,全部都是个人网站的静态资源。而公司项目只有合作的商户在使用,并且在robots.txt
中禁止了爬虫,所以用利用另一个账号开启了一个新的COS并且开启了对应的CDN加速域名。
至于为什么个人网站和公司项目要放在一起,只是因为方便上传和管理,现在看来省事一步,后患无穷。
2.2 个人网站:Git平台
借助免费的Git平台,可以存放图片、代码等数据,并且可以在外部访问到。考虑到国内用户居多,所以我将友链界面的图片和文章中的图片存放到了Coding.net的公有仓库中。
例如下面这种图片的地址就是:https://qcloud.coding.net/u/godbmw/p/blog/git/raw/master/markdown-static/网站搭建与运营/第一次遭遇云服务器完全崩溃/1.png
[图片上传失败...(image-9af74a-1541564666217)]
当当我把代码放在Coding或者github上时,虽然可以请求到代码的内容,但是Response Header
中的Content-Type
字段的值是: text/plain; ...
。对于CSS样式文件,浏览器无法自动解析。因此,打包后的js、css等项目文件不能放在Git平台。
2.3 免费CDN:CloudFlare
这是全球最大的免费的CDN,并且国内也可以访问。ping值稳定在100ms左右,具体可以去查看相关测试文章。除此之外,cloudflare可以抗下DDoS、CC等攻击,听说百度抗不下来海外的DDoS的时候,也是DNS解析到cloudflare进行处理。
cloudflare的操作很简单,首次注册按照它的指导到域名注册上修改DNS解析即可。如果是国外的域名注册商,几分钟就可以同步。国内的并没有尝试。如果成功了,CONSOLE页面就会显示“Active”。
[图片上传失败...(image-37f38c-1541564666217)]
剩下要做的就是把打包好的项目文件上传到服务器,IP隐藏、缓存、CDN等cloudflare都会帮你做好。不暴露服务器ip地址,自然就是安全的!!!
到此,个人网站就可以正常访问了。
3. 一些思考
如果是个人项目,强烈推荐使用国外的“cloudflare”,免费、不限流量、抗攻击,就像国外的JetBrians(教育版免费),都是有情怀的公司,致敬!!!