现在脚本小子太多了,不做好安全策略都不敢宣传自己的网站。

虽然可以购买高防IP或者是OVH来防御DDOS,但高防IP太贵了,OVH需要申请免税,太麻烦。我用阿里云快照用的太舒服了,也懒得换,因此就没使用OVH的服务器。
虽然套了CF或其他的CDN可以隐藏IP,但当CDN被CC超过阈值回源后,服务器IP也会暴露。因此单靠CDN来防御DDOS显然是不够的。
为了省钱,我就想到了一个比较取巧的方法,并为此进行了操作和测试。

我的服务器是阿里云服务器,理论上来说所有能用安全组的服务器厂商,比如甲骨文/AWS/腾讯云都可以用这个方法,但我并没有在这些服务器厂商的服务器上进行测试。因此,如果你不是阿里云的服务器,这篇文章可能只对你有启发作用。如果你用的服务器是ONEMAN的,一般情况下不会有安全组来给你用。这篇文章并不能在宝塔/appnode/iptables的防火墙策略上使用(我自己测试过的),所以做站的话请远离oneman。

这篇文章提供的方法并不能完全防御攻击。认怂、低调才是正解。再好的策略在绝对的力量面前效果不大

原理

正常情况下,DDOS一个IP,是需要建立连接的,所以我想,如果在安全组上设置好策略,让“所有连接”都无法通过安全组,是否能在一定程度上防御DDOS呢?
为此,我提交了工单,询问阿里云客服:

你好,请问如果我的安全组就对特定ip开放了端口,而ddos攻击者从其他ip发动攻击,请问如果攻击流量超过了黑洞阈值(但压根没通过阿里云的ecs安全组),那么ecs还会进黑洞吗

阿里云给我的回复是:

您好,若您将所有端口都设置指定IP访问,是可以起到防止攻击的效果,但也只有指定的IP能访问您的服务器和网站。

通过阿里云的回复,我了解到,理论上如果攻击的数据没有通过安全组,服务器理论上不会进入黑洞。
因此,理论上只要服务器的安全组指定了CDN回源服务器IP才能访问,对ddos攻击是有一定的防御效果的。由此,我为了验证我的想法进行了如下的操作。

操作流程

询问CDN的回源服务器IP

每家的CDN服务商都会有固定的回源服务器来从客户的服务器获取数据,并且回源服务器IP是可以查到或者是询问到的。
例如我是在国外使用cloudflare,国内使用腾讯云CDN,来加速我的网站。
cloudflare提供了专门的页面来提供回源服务器IP范围:

https://www.cloudflare.com/ips/

腾讯云CDN可以提交工单询问客服:

问题描述
请问能否提供下腾讯云的所有cdn节点ip?我好加入防火墙白名单,谢谢了
腾讯云工程师2019-10-10 11:00:09
您好,您可以参考附件中的IP,查看cdn节点。
附件

配置安全组

获取到回源服务器的IP后,我们就可以制作符合要求的安全组表格,来导入阿里云/其他云服务商安全组里了。
我知道大部分人都懒得自己获取,这里我提供下我的安全组文件,你们直接创建新的安全组,导入就行了。

这个安全组入方向只开放了80/443端口到指定IP,请一定要删除默认的0.0.0.0/0的策略,不然安全组策略没啥用。还有如果要开放控制端口,或者是appnode,宝塔的端口,建议指定你家的IP,或者是专门弄台代理服务器,仅对那个代理服务器IP开放端口。安全组出方向可以开放所有端口,当然,默认也是全开的。

入方向千万不要给非指定的IP开放端口,千万别给所有IP开放端口,千万别开放所有端口。

配置好安全组后,在未来,一般情况下不用管了。理论上只要有一台CDN回源服务器能访问你的网站,那么用户就能正常访问你的网站,正常情况下CDN服务商不会更换所有回源服务器的IP吧。

接入CDN

配置好安全组后,再接入cdn即可。


建议使用国外使用cloudflare,国内使用腾讯云CDN来节约费用。

接入cloudflare后,最好是按照下面方法配置下cloudflare的防火墙:

测试

本来这篇文章应该是19年11月就发布的,但因为一直没找到机会测试我的这个方法是否有效,因此拖到了2020年2月才发布。才不是因为懒得写呢

前几天在群里和一个大佬讨论了下阿里云的黑洞是在哪里产生作用的,因为互相说服不了对方,因此我把我的IP给大佬测试了下,攻击强度为6.4G,整个过程没有进黑洞。后面又求另一个大佬测试了两次,第一次打了2G,第二次不限流发包打了3.7G,报废了大佬两台服务器,三次都收到了阿里云开始清洗的邮件和短信,但网站运转正常,没有进入黑洞。因此,也验证了这个方案能防御住一般的脚本小子。
ddos.png

第二天大佬打了7G,依旧没啥事。
ddos.png

最后提醒一下,我这个方法并没有测试长时间大流量ddos,或者超大流量ddos下是否有能力防御住。并且也无法防御CC攻击。所以,做站千万别惹大佬。

注意事项

本来在这篇文章写完的时候网站运行很正常,但过了2个月,可能是腾讯云CDN回源节点更新了,经常出现写文章/登录的时候无响应。我个人猜测是腾讯云cdn回源请求被安全组拦截了。因此,如果你的网站POST请求较多的话,注意更新下规则,或者是仅在热备源站使用这个方法,普通源站还是完全开放80/443端口吧。

其他

博客防御体系 - 减弱CC请求攻击对博客影响

最后修改:2020 年 05 月 22 日
如果觉得我的文章对你有用,请随意赞赏