没错,昨天是下雨了,然而我的屋子其实并没有漏,我也没有把大小脸盆和水桶拿出来接水,也没有一晚上没睡拿个破抹布一边擦地一边怨天尤人。
说啥来啥
不过,我确实一晚上没睡,并非我投身于我极度热爱的编程事业,废寝忘食的码代码,而是,我的一台服务器被D了、D了、D了……。 话说几天前,@rivalhw 还和我聊过DDOS的事情,因为不在现场也不了解具体情况,我只能建议他向阿里云求助,是的,他用的是阿里云。
昨天早上一个客户和我反馈,说服务器有点迟钝。估计恰逢攻击者吃早餐或者睡觉去了,所以我访问的时候并不是很慢,粗略看了一下日志,一堆被屏蔽的访问的log,我就随便清理一下log、更新了一下补丁、再设设软防就去忙了。临近晚上,一看邮件,我的天啊,一堆资源超标的报警,超标到神马程度呢?我给大家看一下其中一封报警邮件:
1 | Time: Fri Jul 7 20:07:10 2017 +0000 |
简单的解释一下,这台服务器是CPU是两个Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
而每个CPU都是四核的,又支持超线程
所以,系统识别成16个CPU,平时负载都是这样婶的:
昨天我爬上去是这样婶的(来自和客户对话时给客户发送的截图):
无论是上边报警邮件中的 50.23还是截图中的76.08,都意味着16个CPU干着他们能力几倍的事情,结果就是累的要死。
搞错方向
然后客户急得要死,说这样不行啊,这样一晚上损失惨重啊。他们的这个站,是吸金利器,每天赚钱无数,停掉一天,少赚无数钱。然后我就被拉上和他们技术人员一起找毛病。其实我第一个反应就是被攻击了,然而晚上迷迷糊糊的,客户又一再强调不可能,然后我们就一直在站点程序上找原因,结果发现这站点程序还真是烂啊,于是我毫不留情的指出这这这、那那那、还有这这这这,这样是不对的,这样无疑会导致极其耗费资源等等。然后统计了一下,其中一个写的很大很乱的PHP每天被调用65万次,65万次是多少,我掰了半天手指头也没数明白65W次是多少,并且他们不止这一个PHP文件,并且他们不止PHP文件。然后客户说这两天更新过程序,每个HTML里都调用两次PHP、PHP里又调用无数次HTML,我醉了。
大家集中精力和PHP奋战,裁掉一个又一个,试了一次又一次,资源占用还是居高不下。最终我想了个办法,直接把站点恢复到5天以前,这样期间的更新不就都没了嘛,何必一个一个恢复。大家兴奋不已,纷纷夸奖这真实一个好主意。于是乎,开启备份恢复,漫长的几分钟过去,终于恢复到了几天前。我们满怀期待的观察负载,发现并没有什么鸟用,哭,又做无用功了。
定位毛病
然后客户对我提出重大疑义,为毛你就怀疑我的站点啊,为毛不怀疑其它站点啊,你自己的垃圾站不也在上边嘛。我的垃圾站,我哭,两年都没人访问一次,能出故障那得多令人庆幸啊。不过既然客户有疑虑,那么我们必须是要帮助其打消的。不然,以后有何脸面和人家说是你的站点问题。打消疑虑的办法很简单,他的站点在独立IP上,我直接把这个IP断线,然后在看CPU负载,一路嗷嗷下降。很快就从70、80降低到0.5以内,客户无言以对。
然后继续回到和站点奋战的过程中,观察系统日志、观察Apache的错误日志、观察用户站点的访问日志,我浑浑噩噩做着自己都不知道自己在做什么的事情,困得睁不开眼。然后和客户说要么关站吧,一了百了,你也省心我也省心不是嘛。客户说关站就得喝西北风啦。于是继续奋战。
终于解决
大脑在一片混沌中突然灵光一闪,是不是被攻击了啊?额,貌似最开始就闪过这些灵光呢。为毛折腾半天才想起来。然后和客户说起,客户也开窍的表示极有可能。可是为何机房没响应呢?那些思科网件的硬防都死了吗?这时候去联系机房?那无疑是找死的行为,我以前遇到过几次麻烦,联系他们,每次都是帮我把事情搞得更糟糕,一堆印度技术客服,轮班的上来折磨你,那之后我再也不敢联系他们了。虽然他们号称服务一流、技术一流,但是感觉没比我这三流的技术强到哪里去。于是从被攻击的角度着手,调节了一下软防的设置,比如追踪一下同一IP源的同时连接数等等,30秒内超过100个链接,无情的BAN掉。经过一系列的调整之后,服务器负载终于下降到了合理的范围。这时候天也快亮了。
漫长的雨夜就这样过去了。
嗯,或许比漏雨强一些吧。
话说那个 @rivalhw 以后不要和我聊DDOS的问题 😡
感谢阅读 / Thank you for reading.
欢迎upvote、resteem以及 following me @oflyhigh 😎
This page is synchronized from the post: 屋漏偏逢连夜雨 / 也被DDOS