个人使用阿里云oss出现晚上被刷流量而损失钱财的例子屡见不鲜。我也是前几天才买来试试水,幸好有热心网友提醒,不然哪天可能就要完蛋了!
所以,为了避免被刷流量,我在网上浏览了各种不同的技巧,最终按照我自己认为恰当的方法完成了一套香港 oss + CloudFlare 的下行免流 & 阻止他人获取 bucket id 的方法。
配置 oss
免下行流量
想要下行免流,必须符合条件!
适用于 Cloudflare CDN 与阿里云 OSS 的共同客户,并且源站在阿里云 OSS 除中国大陆外的指定地区或国家,同时使用的存储类型为同城冗余标准型或本地冗余标准型的客户。
如果不符合,也可以考虑使用其他免费的云存储:如 backblaze
自定义域名配置
关于 oss 的配置,可以参照此处。我已经写过文章了。使用阿里云 oss 存储数据。或许会有一些地方不同,下面会详细陈述。
创建 Bucket 的注意事项
请尽量使用复杂的,不容易被猜到的 bucket ID 。毕竟总长度能到63位,咱自己也没必要记住它。如果被猜出,很可能被刷流量。
绑定域名
与之前文章操作中不同的是,你需要将域名先绑定到 CouldFlare 上,并 A 记录到自己的服务器(开启橙标防护)。
别忘了在 oss 的 bucket 中绑定需要的自定义域名。
获取SSL证书
为了避免无限重定向,我们需要自己的服务器上也有 HTTPS 。
设定反向代理
反向代理的域名是 oss 的 Bucket 域名(概览里)。请记住保密!不要泄露!
测试
现在各项应该已经正常了,你可以上传一个文件到 oss 上测试一下。自定义域名中是否可以正常查看图片等。
再试试让它报错(直接访问根目录也行)
很明显,这里显示了我们的原地址 。坏人可以轻松通过这种方法刷爆流量,一晚上倾家荡产(没几万,几千也不是问题)
解决源站根目录与404报错
根目录报错
想解决根目录报错,需要依靠 CloudFlare 的 Workers 。
创建一个 workers ,并把它设置到自定义域名,编辑内容。
配置内容如下:
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
/**
* Fetch and log a request
* @param {Request} request
*/
async function handleRequest(request) {
return new Response('Hello!', { status: 200 })
}
将它设定到我们的域名。
如此操作后,访问根目录就只会提示 Hello 了。
404 报错
解决404报错需要我们自定义反向代理中的 404 页面,避免使用 oss 的报错。
添加以下文本即可
proxy_intercept_errors on;
error_page 500 502 503 504 /404.html;
error_page 400 404 /404.html;
location = /404.html{
root /www/wwwroot/YOUR-HOST-HERE;
}
你需要自己写一个 404.html 放到,
/www/wwwroot/YOUR-HOST-HERE;
或者改到其他任何你自定的404页面。
保存它并刷新缓存。
已成功,漂亮。
后记
理论上这么做已经可以避免它人获取到你的 bucket ID 和其他什么东西了。但我目前也没法完全确定此方法安全,希望还能和各位交流交流! 欢迎提出各种意见!
恶心人小技巧
其实我们也可以不适用 404 页面,而是伪造一个 oss 报错。
奈何我一直搞不明白如何直接返回 XML ,还是希望能在评论请教一下😂。