10月1日下午,discuz论坛一台服务器(server4)开始出现异常的高负载情况。首先是自动触发了自动扩容机制,增加了新服务器进来分担压力,保障了服务的持续可用,给问题解决争取了时间窗口。
随后手机收到告警短信,登录腾讯云控制台,首先排除了DDOS,因为外网入带宽和出带宽都正常。异常的是内网出带宽和入带宽。难道有内网的服务器发起攻击?
登录到服务器上来看,top没有看出什么异常,没有特别高的进程,php-fpm进程确实多了一些,每个进程的cpu时间也确实长了一些,但是也不说明什么问题。看access_log也没有看到ip聚集的请求。
怀疑服务器本身有异常,把服务器重启了一下,问题没解决。
把出现问题的服务器(server4)从负载均衡中踢出,问题立刻消失。加回到负载均衡集群中,问题没有再出现了。
随后发现,另一台原来没有问题的服务器(server1)现在变成高负载了。一样从负载均衡中踢出来再加回去,这下两台都高负载了。
没有什么头绪,只好继续分析access_log。这次看出来问题了。
有一批来自世界各地的肉鸡(也可能是伪造的ip)在根据用户ID一个一个的访问用户资料。这些ip都来自哪里的呢?
所以问题很清晰了,这是一个CC攻击,并且攻击ip是分散的,不能通过封ip来化解。
攻击者借助代理服务器生成指向受害主机的合法请求,实现DDOS和伪装就叫:CC(ChallengeCollapsar)。
对于CC攻击,discuz是有对应的设计的,可以在config_global.php中配置,不过对抗手段都会或多或少的影响到正常访问。针对这次攻击我启用了 $_config['security']['attackevasive']=4
也就是要求每个用户第一次访问的时候都要看一个2秒的等候页面,然后自动进入原来的访问地址,这是目前对于用户访问体验伤害最小的方式(用户什么都不用做,只要第一次等2秒就一切正常了)。如果CC攻击没有继续升级对抗这个策略的话,这次攻击应该就到此为止了。
稍晚的时候服务器CPU又满了,对方使用了使用了更多的肉鸡,大量代理IP涌入了服务器,导致论坛再次无法打开,怎么办呢?
只能购买防火墙了,买腾讯云防火墙的话不现实,价格太贵,一个论坛,又不盈利没必要。再三思考下,只有用百度云加速了,百度云加速是百度与国外知名DDOS防护厂CloudFlare合作的一款集成网站加速、安全防护的产品,价格还算符合大众,官方最便宜的版本也就2490元/年,我是直接找他们代理主机吧购买,价格便宜将近一半。
接入后直接启用强力防护模式,
观察将近1小时左右,终于彻底解决了!