我的网站被攻击了,被干掉了 120G 流量,还在持续攻击中...
你好,我是悟空。
背景
前几天,我正在用 Typora 写笔记时,发现图片无法自动上传到七牛云上了,然后登录到七牛云管理后台,发现已经欠费 20 多块钱了,CDN服务因欠费停了,导致我的网站 passjava.cn 上的所有图片都无法访问。
很奇怪,我用的都是免费的 10G 流量,很少会出现欠费的情况,怀疑是网站被攻击了。于是检查了最近网站的访问情况,吓我一跳,7天时间被访问了 123G 流量,14 万个独立 IP,可以肯定的是被肉鸡服务器攻击了。


今天又看了下流量,发现还在攻击。
数据如下:
07-30 22:00~08-06 10:00 持续攻击了 61 万次,120G CDN 流量,难受 -_-
08-07 17:00~08-11 17:00 持续攻击了 41 万次,全部报403 错误,也没有造成 CDN 流量。因为在 08-08 18:00 开启了防盗链,所以攻击失败,舒服^_^

处理过程
初步排查
查看了访问日志,就是一大堆肉鸡服务器不断地访问网站的 5 张图片,造成了大量 CDN 流量,因为按量付费,所以超了很多钱。如下图所示,访问日志中可以看到很多不同的 IP,持续访问网站的图片。

处理方案
迅速建了个工单,找七牛云的工程师看看怎么整。
工程师回复如下:

“方案:在 控制台 - cdn - 统计分析 - 日志分析 中看 top访问情况,比如高频访问的URL和客户端IP。
根据top访问数据将非预期的来源IP、ua等拉黑处理下。
然后看了下高频访问的 ip,都是随机的,没什么规律,应该就是大量肉鸡服务器攻击的。所以用黑名单的方式是没办法限制这些肉鸡服务器的 IP 的,只能另寻方案。
工程师回复可以采取防盗链的方式。
防盗链
防盗链方案:
1:referer防盗链: 只有携带了相应 referer 请求头的 http请求才能访问资源,但是对于技术来说,referer都是可以伪造的,存在一定的风险。 2:时间戳防盗链,url带着e和token参数访问,e为过期时间,但是只要捕获到了url就可以访问资源了,只适用于访问xx次的场景。 3:回源鉴权,这个你们可以尝试下,每次访问cdn图片时,会携带你们自己定义的访问参数去你们自己的服务器上鉴权,只有你们服务器鉴权通过,返回 httpcode=200 ,才会将图片资源给用户访问,否则无法返回图片。 4:IP黑白名单,这个适合某一个网段内的ip访问资源,不适合官网使用,只有在 ip 白名单中的用户才可以访问你们的图片。 5:UA黑白名单,通过 User-Agent 字段的值来允许或者阻止特定用户访加速域名。
目前只有方案 1 比较合适。
“方案 1:referer防盗链: 只有携带了相应 referer 请求头的 http请求才能访问资源,但是对于技术来说,referer都是可以伪造的,存在一定的风险。
于是按照操作开启了 referer 防盗链。如下图所示,开启了白名单,并且不允许空 Referer。

选择“否”,这样的话,只有携带了相应 referer 请求头的 http请求才能访问资源。
简单来说,就是我把网站中的一张图片的链接,直接 copy 到浏览器的地址栏中然后回车,是访问不到的,会报 403 Forbidden 的错误。
我检查了下,攻击我的网站的方式确实是没有携带 referer 请求头的 http 请求。如下图所示,Top 1 的请求中的 Referer 为 “-”,表示没有携带 referer。

选择不允许空 Referer 后,就可以拦截这种不带 Referer 的请求了。
带来的麻烦
设置了不允许空 Referer 后,我发现在 Typora 工具中的添加的网站图片无法加载了,因为 Typora 在访问图片时没有携带 Referer 去访问网站图片。
然后通过 AI 找到了一种解决方案,原理如下图所示。


Nginx 配置
将本地 8888 端口的请求添加 Referer 后,再访问 CDN 域名。

Proxifier
拦截 typora 中访问 cdn 图片的请求,并将请求发送给本地的 8888 端口。

进程劫持

总结
(1)7 天内我的网站 passjava.cn 被肉鸡刷掉 120 G CDN 流量,七牛云直接欠费 20 多元。
(2)开启 referer 防盗链后,攻击流量瞬间 403,但 Typora 里的图片也挂了。
(3)用 Nginx+Proxifier 给本地请求加 referer,既挡住攻击又让笔记图片正常显示。
请先 登录后发表评论 ~