全文仅供娱乐,如有任何不当之处,立马修改/删除
小说内容仅为虚构,请勿当真
买云请上雨云,便宜稳定性价比高,专属五折优惠码:mianfei
或点击:雨云 - 新一代云服务提供商
快速跳转到对应章节请看第1-2章帖子的开头
第5章 连夜大迁移
林语盯着手机屏幕上那条消息,手指悬在键盘上方,停了整整三秒。
“小子,别以为自己跑得快就没事了。我记住你了。”
他深吸一口气,没有回复,直接把这条消息截了图,发给了搬砖狐。
然后他打开微信的通讯录,找到那个刚才搬砖狐推给他的深圳CDN朋友的微信号,发送了好友申请。
对方几乎是秒过。
“您好,我是搬砖狐的朋友,林语。”
“我知道,她说你那边被攻击了?需要临时清洗节点?”
“对,50M带宽,按小时付费。能不能先开两个小时应急?”
“可以,我这边给你一个IP和端口,你把正常流量指过来就行。费用的话,每小时30块,凌晨算半价,15块。”
林语心里算了一下——15块一小时,开一个晚上也就一百多块,能承受。
“好,开吧。”
对方很快发来了一串IP和端口信息。
林语立刻登录服务器,修改了Nginx的配置,把正常的HTTP和HTTPS流量反向代理到那个清洗节点上。
不到五分钟,雨云香港节点的服务恢复了正常。
林语松了一口气,然后打开了搬砖狐的对话框。
“节点恢复了,谢谢你和你的朋友。”
搬砖狐回了一个狐狸打哈欠的表情:“他是我前公司的同事,技术不错。费用我帮你先垫了,回头再说。”
“不用,我自己来。”
“得了吧,你现在身上还有多少钱?垫着吧,等你有钱了再还我。”
林语看着这条消息,沉默了一会儿,然后回了一个“好”字。
他知道搬砖狐是故意的——不想让他因为钱的事分心。
这个女孩,总是这样。
他放下手机,靠在椅背上,闭上眼睛,整理了一下思绪。
现在攻击暂时被挡住了,但问题远没有解决。
第一,攻击来源是谁?陈经理的可能性很大,但他怎么知道雨云的香港节点IP的?林语从没在公开场合透露过。
第二,攻击还会不会继续?如果对面铁了心要搞他,下一次攻击只会更猛。
第三,也是最关键的问题——他不能让客户承担风险。如果攻击隔三差五就来一次,他的信誉就全毁了。
林语睁开眼睛,做了一个决定。
他必须换机房。
换一个高防的,能抗DDoS的机房。
哪怕贵一点,咬咬牙也得换。
他打开电脑,开始搜索香港的高防机房供应商。
搜了一圈,发现价格比他现在用的那家贵了将近一倍。
最低配的高防云服务器,2核4G、5M带宽、40G防御,月费就要800多块。
而他现在用的那家,512M内存的虚拟主机,成本摊下来一个月才几十块。
这个价格差距,对他来说,几乎翻了一整年的运维成本。
但他没有犹豫太久。
他给自己的账户转了800块,然后联系了那家高防机房的销售。
“你好,我要买一台香港高防云服务器。2核4G、5M带宽、40G防御。”
销售回复很快:“好的先生,请问您需要月付还是年付?”
“月付。”
“800元/月。请问您需要额外加防御吗?100G防御加200元,200G防御加500元。”
林语犹豫了一下,然后回了一句:“暂时40G够用了。先开一个月。”
“好的,付款后我们将在一小时内为您开通服务器。”
林语把800块转了过去,然后开始准备数据迁移的方案。
雨云目前有三个付费客户,加上他自己跑的几个测试站,总共服务了七个网站。
数据量不大,加起来也就几十个G。
但问题在于——他需要在尽可能短的时间内完成迁移,把服务中断时间压缩到最低。
现在是凌晨两点四十五分。
他给自己定了一个目标:天亮之前,把所有数据迁移到新服务器上,并恢复所有服务。
他打开那个半成品的Go语言管理系统,开始在代码里添加“一键迁移”功能。
他之前已经写好了服务器的管理模块,迁移功能只需要包装一层rsync和数据库导出的命令就行。
一边写代码,一边等新服务器开通。
三点二十分,新服务器开通了。
林语登录上去,开始配置基础环境。
安装Nginx、PHP、MySQL、Redis……这些他闭着眼睛都能配好。
三点四十五分,环境配好了。
他开始打包旧服务器上的数据。
网站文件、数据库、配置文件……他一个一个地导出,打包,然后通过rsync传到新服务器上。
数据传完后,他开始导入数据库。
前两个客户的数据库都导入得很顺利,第三个客户的数据库刚一导入,就报错了。
表损坏。
林语懵了一下。
他检查了一下错误信息——是wp_posts表的索引损坏。
“妈的……”
他低声骂了一句,然后强迫自己冷静下来。
表损坏,不是没救。
他在网上搜了一圈,找到了一个MySQL自带的修复命令:
mysqlcheck -r -u root -p 数据库名 表名
他试着跑了一下。
结果跑完后,又报错了。
“Index table is full…”
林语揉了揉太阳穴。
这台新服务器的MySQL配置里,临时表的大小限制太低了。
他登录phpMyAdmin,修改了my.cnf配置文件,把tmp_table_size和max_heap_table_size都调到了256M。
然后重启MySQL,重新跑修复命令。
这次成功了。
他松了一口气,开始恢复剩余的数据。
凌晨五点十分,所有数据都迁移完毕。
林语开始测试各个网站。
第一个客户的WordPress,打开——速度正常。
第二个客户的Typecho,打开——速度正常。
第三个客户,也是最新的那个客户——没有建站,只有一个phpinfo页面,正常。
他自己的测试站,也正常。
林语靠在椅背上,长长地吐出一口气。
然后他想起了一件事——他还没有通知客户。
他打开微信,找到那个三人客户群,发了一条消息:
“各位客户,因为昨天机房故障,我们对服务器进行了紧急迁移。现在服务已恢复,给您带来的不便,敬请谅解。”
发完后,他盯着屏幕,等着客户们的回复。
他做好了被骂的准备。
等了大概五分钟,第一个客户回复了。
ID叫“风之旅人”,一个用WordPress写旅行博客的博主。
“林总,我说实话啊,昨天晚上的网站确实打不开,我着了一会儿急。”
林语赶紧回复:“抱歉抱歉,确实是我的问题。服务器被攻击了,我连夜换了一个高防机房,现在稳了。”
风之旅人回了一句:“换机房了?那成本不低吧?”
“比原来贵了几百块。但没办法,安全第一嘛。”
风之旅人沉默了一会儿,然后发了一段话:
“兄弟,我实话跟你说,我用过好多家的虚拟主机了,便宜的有,贵的也有。但像你这样,出了问题连夜换机房、自己掏钱的,我是第一次见。”
林语没想到会收到这样的话。
他正想回复,风之旅人又发了一条:
“你那个年付50块的套餐,太便宜了。我建议你涨涨价,别把身体亏空了。”
林语笑了一下:“好的好的,感谢建议。”
然后第二个客户也冒泡了。
ID叫“老陈运维”,一个做技术博客的运维工程师。
“我昨晚就发现了,网站断了几次,但今天早上起来就好了。原来是换机房了?”
林语:“对,被攻击了,临时换的。”
老陈运维:“攻击多大?”
林语:“百兆左右,不算大,但原来的机房扛不住。”
老陈运维:“那你现在用的什么机房?”
林语把新机房的名字说了一下。
老陈运维沉默了一会儿:“那个机房我知道,香港高防的,价格不便宜。你这个月的成本,怕是得翻倍。”
林语:“还好,省着点用,能做多少做多少。”
老陈运维:“你这性价比挺高的。好好干,别崩了。”
林语:“好的好的,感谢信任。”
第三个客户,就是那个只开了phpinfo的新客户,一直没说话。
林语也没催。
他关了微信,起身去洗手间洗了把脸。
镜子里的自己,脸色苍白,眼袋很重,头发乱糟糟的。
但他精神还不错。
他洗了把脸,回到桌前,打开HostLoc,准备发一个新帖,公布换机房的消息。
结果他刚点开论坛,就看到了一个帖子,标题赫然写着:
“曝光:雨云是骗子公司,收了钱不办事,故意弄丢用户数据!”
发帖人的ID:server_wholesale。
林语瞳孔猛缩。
他点进帖子,看到内容——
“各位站长注意了!这个叫‘雨云’的虚拟主机商,就是个皮包公司!收了钱不给服务,数据全丢了,还说是被攻击了!我朋友就是之前找他们买的虚拟主机,结果网站打开全是500错误!我朋友联系他们退款,他们直接装死!大家千万别上当!”
帖子下面已经有人跟帖了。
“真的假的?我还想买呢。”
“雨云?就那个50块一年的?一看就不靠谱。”
“这种小厂就是这样,割一波就跑。”
林语握紧了鼠标,指关节发白。
他知道这是谁发的。
server_wholesale——那个“陈经理”的ID。
他没想到对方会用这么卑劣的手段。
造谣,泼脏水,倒打一耙。
他深吸一口气,强迫自己冷静下来。
然后他开始敲键盘,回复那个帖子:
“你好,我是雨云的创办人,林语。”
“首先,关于您提到的‘雨云是骗子公司’——我们的服务记录都是公开的,欢迎任何用户向我要后台截图。我们从未有过‘收了钱不服务’的情况。上周四我们确实被攻击了,但我们已经连夜更换了高防机房,所有数据都已恢复。”
“其次,关于您说的‘联系退款装死’——我们目前只有三个付费客户,没有任何一个提起过退款需求。如果您能提供您的朋友信息和订单号,我马上核实。”
“最后,我想问您一个问题——”
“您的ID,server_wholesale。请问您是不是佛山某IDC公司的负责人?上周五,您约我去佛山考察机房,结果我到了之后,发现您的办公室已经人去楼空,前台桌子上贴着一张‘欠薪两个月,老板跑路’的纸条。”
“我想请各位站长评判一下——到底谁才是骗子?”
林语发完这段话后,刷新了一下页面。
论坛里安静了几秒。
然后有人开始回复了:
“卧槽,这剧情……”
“佛山那家IDC之前确实有人踩过坑,听说跑路了。”
“楼主,你是那个被坑的吧?”
林语没有继续回复。
他关掉页面,靠在椅背上,闭上了眼睛。
心口在剧烈地跳,但他知道,自己不得不站出来,把这件事说清楚。
他打开微信,给搬砖狐发了一条消息:
“那个陈经理,在论坛上发帖黑我。”
搬砖狐几乎是秒回:“谁?那个跑路的?”
“对。他发帖说我是骗子公司,说我们弄丢数据。”
搬砖狐沉默了几秒,然后回了一句:
“林语,你有没有想过一个问题。”
“嗯?”
“他为什么要这么针对你?”
林语愣住了。
他想了一会儿,然后打字回复:
“因为他想逼我关站。”
“对。他就是想让你关站。你知道为什么吗?”
林语又愣住了。
他之前从没想过这个问题——一个跑路的代理商,为什么要费这么大劲,来搞他一个没什么规模的小站长?
他想了想,忽然一个念头闪过——
“是不是因为我发现了什么不该发现的?”
搬砖狐回复了一个握拳的表情。
“你想想,他为什么会约你面谈?”
“他说想合作……”
“合作个屁。他是想看看,你到底知不知道他跑路的事。”
林语心里一沉。
他想起那天去佛山之前,陈经理给他发的那条消息,里面提到了“合作和资源”。
而那天他到了佛山,发现办公室空了之后,对方就再也没有联系过他,直到今天凌晨发来威胁消息。
“你的意思是……他想杀人灭口?”
“不至于杀人灭口,但他肯定不想你到处去说这件事。毕竟他在圈子里还要混的。”
林语沉默了一会儿,然后问了一句:
“那我怎么办?”
搬砖狐的回复很快:
“第一,截图保留证据,包括他论坛发帖的ID、你和他聊天的记录、佛山那间办公室的照片。”
“第二,别跟他吵。他越吵,你越要稳。让他自爆。”
“第三,你今晚就得把这件事翻篇。明天开始,继续做你的事。让他一个人在那儿蹦跶。”
林语看着这几行字,心里渐渐安定了下来。
搬砖狐说得对。
他不是来和人打架的。
他是来做生意的。
他关掉微信,重新打开HostLoc的帖子。
此时帖子里已经有了二十多条回复。
有人质疑“陈经理是你朋友吗”,有人@版主要求查IP,也有人表示“反正我不信50块一年的虚拟主机”。
林语没有继续回复,而是新建了一个帖子,标题是:
“【公告】雨云更换香港高防机房,客户数据全部恢复,感谢大家支持。”
帖子内容很简单:
“各位好,我是雨云的创办人林语。
今晚我们的香港节点遭受了DDoS攻击,我们已经将服务器迁移到了新的高防机房。
所有客户数据都已恢复,服务正常运行。
对于今晚出现的服务中断,我深表歉意。
为了弥补,我们决定将所有现有客户的服务期限延长一个月,作为补偿。
感谢大家的理解和支持。
如有任何问题,请随时联系我微信:rainyun_linyu。”
发完这个帖子后,他回到那个造谣帖里,把这条公告的链接贴了上去。
然后他退出了HostLoc。
天亮之前,他决定先睡一会儿。
他扑到床上,闭上眼,脑海里全是今天的画面。
陈经理的空办公室,荷兰IP的DDoS攻击,造谣帖,搬砖狐的冷静建议……
他笑了。
他觉得自己像是被扔进了一个满是鲨鱼的池子里。
但他不怕。
因为他有搬砖狐。
他闭上眼睛,很快就睡着了。
林语醒来的时候,已经是上午九点半了。
他拿起手机一看,有十几条未读消息。
有客户群里的,有搬砖狐的,还有几个陌生人加他好友。
他先点开了客户群。
风之旅人发了三条消息:
“林总,下午好啊。我刚才扫了一眼你的论坛,有人黑你是吧?别理他,我们都信你。”
“你那个50块的套餐,我给你付了年费,撑你一下。”
“一年60块,多出来的10块算奖金。”
林语看到这条消息的时候,鼻子突然有点酸。
他回了一句:“风哥,太客气了……我收不了。”
风之旅人秒回:“收着收着。你那个服务,值这个价。”
林语不知道该说什么,只回了一个“谢谢”。
然后老陈运维也冒泡了:
“我刚才也在论坛看到了。我说句实话,那个发帖的ID,我看着有点眼熟。好像之前在HostLoc上发过卖机房的帖子,后来被封了。”
林语:“真的假的?”
老陈运维:“不确定,但我记得那个ID的IP段和之前营销号的一样。你自己小心点,别让人坑了。”
林语:“好的好的,感谢提醒。”
他退出群聊,点开了搬砖狐的消息。
搬砖狐发了一个截图——是她和林语那个CDN朋友的聊天记录。
“他说,他昨晚看了一下你转过去的流量包,发现攻击流量停了一会儿又继续了。”
“他说,攻击不是自动爆破,是有人在手动控制。”
林语看完后,眉头皱了起来。
手动控制?
那说明——攻击者不是脚本小子,而是有经验的IDC从业者。
他想起那个陈经理的威胁消息。
“小子,别以为自己跑得快就没事了。我记住你了。”
他咬了咬牙。
看来,这位陈经理是真的有备而来。
他给搬砖狐回了一条消息:“我知道了。我会处理的。”
然后他打开了那几条陌生人加好友的信息。
第一个人的验证消息是:“老陈介绍我来看看雨云。”
林语点了通过。
第二个人的验证消息是:“你好,我是HostLoc的版主,关于昨晚的帖子想跟你聊聊。”
林语心里一紧,点上了通过。
对方开口第一句话就是:
“你好,我是HostLoc的版主。关于昨晚那篇造谣帖,我们已经做出了处理。”
“处理结果是什么?”
“封停了那个ID。但我们这边,也希望你能提供一些证据,证明你这边确实有数据被攻击的记录,以便我们在后台留存。”
林语想了一下,然后回复:“没问题,我马上去准备。”
他打开电脑,找到了那台旧服务器上的日志记录,包括被DDoS攻击时的流量图表、黑洞路由开启的记录、以及他和那家IDC的沟通截图。
他把这些打包成一个压缩文件,发给了版主。
过了一会儿,版主回复了四个字:
“证据充足。”
然后他话锋一转,问了一句:
“老弟,我想问你一个问题,你老实回答我。”
“你问。”
“你是不是招惹到什么人了?”
林语沉默了一会儿,然后打了一个字:
“是。”
版主沉默了几秒,然后回了一段话:
“IDC这个圈子里,坑很多。有的人,踩了坑爬不起来了,就决定把人往坑里拽。”
“你踩的那个坑,他没爬出来,是他活该。但你得小心,他不是不会爬出来的——他是想把你也拉进去。”
林语看着这话,沉默了很久。
然后他回了一句:“我明白。”
“那就好。好好干,别怕。”
林语放下了手机。
他站起身,走到窗边,看着外面灰白的天色。
广州的秋天,没有北方的凉意,空气里还有一丝燥热。
他深吸一口气,让那口带着灰尘和尾气的空气填满肺部。
然后他转身,重新坐回桌前,打开电脑,开始写一个新的功能。
他决定给雨云加一个“自动备份系统”。
如果服务器被攻击,数据不会丢。
他写了一个小时,把基本的备份逻辑写好了。
然后他打开那个造谣帖。
那个ID已经被封停,帖子也被删了。
论坛里已经没有人再提起这件事,反而有几个新帖子在讨论“50块一年的虚拟主机靠不靠谱”,而林语的公告帖还被版主置顶了。
他看了看那个帖子,心里很平静。
他想起搬砖狐说的那句话:
“让他自爆。”
确实。
那个人越是想搞他,他就越要稳。
他关掉页面,继续写代码。
雨云的前路,还很长。
但林语不怕。
稳步推进,不要捉急。
太阳总会升起来的。
而今天,只是一个新的开始。
他写了一会儿代码,停了下来。
然后打开手机,给搬砖狐发了一条消息:
“谢谢你。”
对方很快回了一句:
“谢什么?”
“谢你一直在。”
搬砖狐发了一个狐狸捂脸的表情,然后又发了一句话:
“你别感动了,我那是怕你被打击到,下午又不会写代码了。”
林语笑了。
他打字回复:
“你放心,我不会的。”
“因为有你在这边撑着我。”
他发完这句话后,心跳快了一点。
过了一会儿,搬砖狐回了一句:
“行了行了,你快去上课吧。下午还有历史课呢。”
林语看了看时间——已经上午十点半了。
他确实该去上课了。
他合上电脑,拿起书包,走出宿舍。
外面的阳光正好,照在脸上的时候,有微微的暖意。
林语走在上课的路上,心情出奇地好。
他知道,困难还很多。
那个陈经理,肯定还会搞事。
那个攻击他的人,也不会轻易收手。
但他不怕。
因为他不是一个人在前行。
他有人陪着。
他笑了笑,加快了脚步。
而在宿舍的角落里,那台老旧的服务器依然在运转着,风扇嗡嗡作响,指示灯闪烁不停。
雨云,依然在。
第6章 嘴炮与真相
林语从历史课回到宿舍的时候,手里还拿着半瓶矿泉水。
上午的课他听得心不在焉——脑子里全是HostLoc论坛上那些破事。
他把书包往床上一扔,打开电脑,习惯性地先检查了一遍服务器的运行状态。
CPU占用率正常,内存使用正常,带宽流量也正常。
自动备份系统他早上写了一半,现在得继续写下去。
林语刚打开编辑器,手机就震了一下。
搬砖狐发来一条消息:
“论坛上那个帖子,你又上去了。”
林语愣了愣,连忙打开HostLoc。
果然,那个造谣帖的下面,出现了一大堆新回复。
有人@他要求解释,有人在质疑雨云的真实性,还有人在问“50块一年的服务器到底能不能用”。
但最大的变化是——陈经理又发了一条新帖子。
这次的标题是:“【警告】广州润雨科技虚假宣传,大家擦亮眼睛”。
帖子里的内容更加详细,甚至编造了一些“受害者”的聊天截图,说林语收了钱不办事,服务器三天两头断线。
林语看完,嘴角抽了抽。
他觉得又好气又好笑。
这人的戏,怎么这么多?
他深吸一口气,拿起手机,给搬砖狐发了一条消息:
“我想回击一下。”
搬砖狐秒回:“怎么回击?”
“用事实说话。”
“你能不能具体点?”
林语想了想,把思路梳理了一下,然后回复:
“第一,他写的东西,我已经全部截图保存了。”
“第二,佛山那间办公室的现场照片,我也有一些。”
“第三,我有他和我聊天的完整记录,包括他说要和我合作的,还包括他威胁我的那句。”
“第四,我昨天遭到攻击的数据,版主那边已经认定了。”
搬砖狐发了一个托腮的表情:
“那你打算怎么写?”
林语想了想,打了一行字:
“我打算,把他写得彻底翻不了身。”
林语打开HostLoc,新建了一个帖子。
他想了想标题,最后写下了:
“【吃瓜】某自称IDC代理商的老板,看看你都知道些什么。”
这个标题看着不像是正经澄清,倒像是吃瓜帖。
但他就是要用这种效果。
林语开始写正文。
他先用最平和的口吻,把整个事情的经过写了一遍。
从收到陈经理的合作私信开始,到他决定去佛山实地考察,再到发现办公室人去楼空,最后到服务器被攻击、论坛被造谣。
他没有加任何情绪化的词汇,只是把自己看到的、听到的、经历的,原原本本地写了出来。
然后,他开始贴证据。
第一张截图是陈经理发来的合作私信,里面详细写着“更低的机柜价格”、“更高带宽支持”。
第二张截图是他和陈经理的微信聊天记录,包括约好见面时间,以及见面当天他还问了一句“快到佛山了”,对方回复“好的,我等你”。
第三张照片是他到佛山后拍的那栋破旧老楼,照片里的大门紧闭,窗户上贴着“欠薪两个月,老板跑路”的纸条。
第四张截图是陈经理发来的威胁消息——“小子,别以为自己跑得快就没事了”。
第五张截图是HostLoc版主给他的回复,确认了造谣帖来源与陈经理的ID一致。
他把这些图片一张张贴上去,然后写了一段总结:
“所以,在我看来,这件事的过程是这样的——”
“第一步:他给我发合作私信,约我面谈。”
“第二步:我到佛山后,发现他已经跑路了。”
“第三步:他发现我发现他跑路了,于是开始威胁我。”
“第四步:威胁没用,他就开始在论坛上造谣。”
“第五步:昨晚,我的服务器遭到了DDoS攻击,攻击源IP和他使用的IP段一致。”
“我不知道这位陈总到底是什么心态。你跑路了,我没到处说,只是想换个机房继续做我自己的生意。”
“你却反过来造谣我、攻击我。”
“你这逻辑,真的让我很难理解。”
“难道你跑路之后,还得让我帮你把办公室扫干净了,再去给你烧柱香?”
“我也不是什么圣人。你造谣我,那我就把这件事讲清楚。”
“反正我有的是证据。”
“再说了,你一个跑路的代理商,非要来找我一个刚创业的大学生麻烦,这不是自投罗网吗?”
“我要是你,我就老老实实装死。起码还能留个全尸。”
林语写到这里,停了一下,看着屏幕傻笑了一声。
他觉得自己这段写得挺爽的。
然后他继续写:
“最后说一句。”
“雨云的香港节点已经更换到高防机房了,所有数据都已恢复,服务正常。”
“欢迎各位老师来测试,有问题随时私信我。”
“我不怕你攻击,反正我有备份。”
“至于你嘛,陈总——我只能说,你运气不好,碰上了我这么一个较真的文科生。”
“我虽然不会打架,但我很会写东西。”
“你继续造谣,我继续截图。”
“反正我不急。”
“稳步推进,不要捉急。”
他写完最后一句,点击了“发表”。
帖子发出去之后,林语靠在椅背上,心里很平静。
他知道,这件事还没完。
但他知道,自己已经掌握了主动权。
他拿起手机,给搬砖狐发了一条消息:
“发了。”
搬砖狐秒回:“我看看。”
过了一会儿,她发了一个捂脸笑的表情:
“你这写的……太狠了吧?”
林语:“狠吗?我觉得还挺温柔的。”
搬砖狐:“温柔?你那段‘烧柱香’写得很有灵性。”
林语笑了。
他想了一下,又回了一句:
“你觉得他会回复吗?”
搬砖狐:“肯定会。”
“那我要不要准备一下?”
“不用。你继续写代码,让他一个人蹦跶。”
“好。”
林语关掉手机,重新打开编辑器,继续写自动备份系统。
但他的手刚到键盘上,手机又震了一下。
他看了一眼,是客户群里有人发了一条消息。
风之旅人发了一个链接,然后说:“林总,你发帖了?”
林语点进去一看,发现正是自己刚才发的那个帖子。
帖子下面已经有十几条回复了。
“蹲一个瓜子破案。”
“好家伙,戏剧性拉满。”
“楼主,你这个帖子写得比小说还精彩……”
“那位陈总现在是不是在砸键盘?”
林语看了几条回复,笑了出来。
他回复了一句:
“不是什么大事,只是把事实讲清楚。”
“大家不要站队,保持理性。”
风之旅人又回了一句:“林总你这个态度,很稳。”
“谢谢。”
林语又看了一眼帖子的浏览量——已经有三百多个人点进来了。
他退出了帖子,重新打开编辑器。
但刚写了两行代码,手机又震了。
这次是一个私信,来自一个他没见过的ID:“老王在打酱油。”
“楼主,你那个帖子里说的陈经理,是不是一个叫‘陈x强’的?”
林语愣了愣,回复了一句:
“你怎么知道的?”
对方很快回复:
“因为我也被他骗过。去年,他卖了我一批低配当高配的服务器,收货后发现型号不对,他拉黑我了。”
林语看着这条消息,心里一动。
他回复了一句:
“那你现在怎么办?”
对方回了一句:
“没怎么办,自认倒霉。所以看到你在论坛上发帖,我就想加你问一下。”
林语刚想回复什么,又一个私信进来了。
这个ID叫:“广漂小陈。”
“你好,看到你在论坛上的帖子。我想问一下,你是不是用的那家IDC叫‘粤宏’?”
林语:“对。”
“妈的,就知道是他。”
林语:“你也被骗过?”
对方回复了一个哭的表情:
“他欠我三个月工资。我是他之前雇的运维,现在还在讨薪。”
林语愣了愣,然后问了一句:
“你是他雇的运维?”
“对。你之前去佛山那间办公室的时候,有没有看到门口贴了一张纸条?”
“看到了,上面写着‘欠薪两个月,老板跑路’。”
“那就是我贴的。我等了三个月,他终于跑路了。我现在还在找他要钱。”
林语看着这条消息,心里忽然涌上一阵复杂的情绪。
原来,那个纸条是这个运维贴的。
原来,陈经理不仅坑了他,还坑了别人。
他回复了一句:
“兄弟,辛苦了。这件事,我会继续跟进的。”
“你不用跟进,只要把他搞臭就行。”
“你放心。”
林语关掉私信,继续写代码。
但这一次,他的手机上又出现了新消息——论坛上的那个帖子,回复已经飙到了五十多条。
大部分都是支持他的,也有人在质疑他是不是炒作的。
林语看了看那些质疑的回复,笑了笑,没有回复。
他相信,时间会证明一切。
晚上七点,林语写完自动备份系统的第一版,测试了一下,确认没问题后,把它部署到了服务器上。
他看了看时间,决定先吃点东西。
他刚拿起手机,就看到客户群里有人喊他:
“林总,你在不在?”
林语回复:“在的,怎么了?”
“我刚才看你的论坛帖子,下面有一个新ID在回复,说你是骗子公司。”
林语愣了愣,赶紧打开HostLoc。
果然,在他发的那条帖子下面,出现了一个新人的回复。
这个ID叫“IDC正义使者”,回复的内容很简单:
“你发的这些截图,都是你自己编的。如果你真的那么厉害,为什么不敢把服务器IP公开?”
林语看完,笑了。
他回复了一句:
“可以啊,公开就公开。”
他在回复里写上了雨云香港节点的IP地址,然后补充了一句:
“欢迎各位老师来测。”
“不过友情提示一下,这个节点换了高防以后,防御能力还不错。”
“刚才那位正义使者,你要是有本事,就来打一下试试。”
他发完这句话后,论坛上安静了几秒钟。
然后,有人回复了:
“噗哈哈哈哈,楼主这是正面硬刚。”
“笑死我了,他居然真的公开IP。”
“正义使者,到你了,上吧。”
“围观群众表示,今晚又有瓜吃了。”
林语看着这些回复,心里很平静。
他知道,陈经理肯定又在背后使坏。
但他不怕。
因为他已经把防御升级了。
他打开管理后台,调出香港节点的安全日志。
果然,IP地址公开不到三分钟,就有来自荷兰的IP尝试访问主站。
林语笑了。
他拿起手机,给搬砖狐发了一条消息:
“他又来了。”
搬砖狐秒回:“谁?”
“那个正义使者,应该是小号。”
“你确定?”
“IP和攻击我的那个是同一个段。”
搬砖狐发了一个狐狸龇牙的表情:
“那你打算怎么办?”
林语想了想,回复了一句:
“让子弹飞一会儿。”
“他攻击一次,我就截一次图。”
“他攻击十次,我就截十次图。”
“等他攻击完了,我攒齐了证据,再发一个帖子。”
搬砖狐发了一个捂脸笑的表情:
“你是真的稳。”
“那必须的。”
晚上八点半,林语正在吃泡面,手机又震了一下。
他看了一眼,是论坛上的一条最新回复。
回复的人是之前那个发私信的运维“广漂小陈”,他回了一句:
“大家好,我是之前在陈经理那里工作的运维。我可以证明,雨云的老板说的都是真的。那个陈经理确实跑路了,欠了我三个月工资,现在还在躲着我。如果大家有需要,我也可以提供我当时的工作合同和聊天记录。”
这条回复一出,论坛上瞬间炸开了锅。
“好家伙,这是锤上加锤啊。”
“看来这位陈经理确实是惯犯了。”
“楼上的兄弟,你辛苦了。”
“支持你讨薪。”
“加油,兄弟。”
林语看到这条回复,也愣住了。
他没想到那个运维会主动站出来。
他放下泡面,打开私信,给“广漂小陈”发了一条消息:
“兄弟,谢谢你站出来。”
对方回复:“不用谢。我看他造谣你的时候,我就已经很生气了。”
“你在哪?要不要我帮你找找律师?”
“不用。我找不到他,但至少可以在网上曝光他。谢谢你给我这个机会。”
林语看着这条消息,鼻子忽然有点酸。
他知道,在这个圈子里,被骗的人太多了。
但他没想到,自己会因为一个帖子,遇到同样被坑过的人。
他回复了一句:
“有需要帮忙的话,随时找我。”
“谢谢。”
晚上十点,林语准备睡觉了。
他看了一眼论坛上的帖子,浏览量已经突破了两千。
回复数也到了一百多条。
大部分都是支持他的,也有人在讨论“IDC圈子到底有多乱”。
林语没有继续回复。
他关掉电脑,躺在床上,看着天花板发呆。
手机震了一下。
是搬砖狐发来的消息。
“睡了吗?”
“还没。”
“你那个帖子,我看完了。写得挺好的。”
“谢谢。”
“你觉得,这件事还有后续吗?”
林语想了一下,然后回复:
“不知道。但我不怕。”
“为什么不怕?”
“因为我有你。”
“行了行了,别肉麻了。快睡吧。”
“嗯,晚安。”
“晚安。”
林语放下手机,闭上了眼睛。
正准备睡着的时候,手机又震了一下。
他拿起一看,是HostLoc论坛的私信提醒。
他打开私信,看到一条新消息。
发送者的ID是“KK想咸鱼”,内容只有一句话:
“兄弟,你的防御规则太弱了,随便一个脚本都能打穿。”
林语愣了愣,然后坐了起来。
他看着这条消息,心里忽然涌上一阵不安。
防御规则太弱?
他回复了一句:
“什么意思?”
对方很快回复:
“我刚才用了你最常用的密码‘rainyun’试了一下,直接连上了你的服务器。”
林语愣住了。
他脑子里“嗡”地一声响。
最常用的密码?
他想起那天安全日志里看到的SSH登录尝试——其中一次就用了“rainyun”这个密码。
他一直以为是巧合。
但现在看来——那个IP之所以能猜到他的密码,是因为他的防御规则确实太弱了。
林语沉默了一秒,然后打了一行字:
“你是黑客?”
对方回复:
“算是吧。只不过我是那种比较友好的黑客。”
“我刚才试了一下,你的iptables规则只限制境外IP,但你自己也有境外客户。你建了一个白名单,但白名单只覆盖了你自己的业务IP——其他普通客户依然可以绕过你的限制。”
“也就是说,你的防御规则,对攻击者来说,就是一个笑话。”
林语看着这条消息,彻底清醒了。
他坐直身子,盯着屏幕,手指悬在键盘上方,不知道该怎么回复。
过了几秒,对方又发来一条消息:
“兄弟,我给你一个建议。”
“什么建议?”
“把‘rainyun’这个密码改了。”
“然后,找一套靠谱的防御规则。如果你不会写,我可以帮你。”
林语看着这条消息,沉默了很久。
然后他打了一个字:
“好。”
对方发了一个“OK”的表情,然后补充了一句:
“兄弟,你放心,我不会白帮忙的。”
“你想要什么?”
“我想当你雨云的客户。”
“从今天开始,我用你的服务器。”
林语看着这条消息,先是愣了一下。
然后他笑了。
他回复了一句:
“欢迎。我给你打九折。”
“哈哈哈哈哈,行,那就说定了。”
林语放下手机,看着窗外的夜色,嘴角不自觉地向上扬了扬。
他知道,自己今天遇到了一位技术大佬。
而这位大佬,愿意帮他。
他看着那台依然在运转的老旧服务器,心里忽然充满了力量。
雨云,真的要飞起来了。
第二天早上,林语醒来的时候,已经是七点半了。
他拿起手机,翻了翻HostLoc的帖子,发现帖子已经被版主置顶了。
他在帖子下面看到了一条新回复,来自“KK想咸鱼”:
“各位,雨云我已经用过了,稳定性不错。价格也很良心。大家可以放心上车。”
这条回复一出,下面有十几个人跟着回复:
“大佬都这么说了,那我也试试。”
“蹭一波大佬的安利。”
“已下单。”
“+1。”
林语看着这些回复,笑了。
他打开雨云管理后台,看了一眼订单记录。
昨晚到现在,已经有六个人下单购买了虚拟主机套餐。
加上之前的四个,雨云的付费用户已经突破了十个。
他算了一下,心态有点飘。
他打开微信,给搬砖狐发了一条消息:
“你猜现在有多少客户了?”
搬砖狐秒回:“十个?”
“不止。”
“十五个?”
“差不多。”
“卧槽,你这发展速度有点猛啊。”
林语回了一个傲娇的表情,然后补充了一句:
“稳步推进,不要捉急。”
“你那是稳步推进吗?你那是开挂。”
到了中午的时候,林语打开后台一看,付费用户已经增加到了十四个人。
他又看了一下HostLoc的帖子,发现除了安利以外,还有人开始讨论雨云的性价比。
而且,有一个人在下面回复了一句:
“我已经用了两天的雨云了,稳定性确实不错。之前用某云盾的时候,三天两头断线,换了这个之后,反而稳了。”
林语看着这条回复,心里更开心了。
他知道,这就是口碑的力量。
他打开私信,找到“KK想咸鱼”,发了一条消息:
“兄弟,你这个安利,效果太好了。”
对方很快回复:“哈哈,没什么。你那个价格确实良心,我没骗人。”
“你什么时候开始用?”
“我已经买了。一小时前刚下的单。”
林语看了一眼后台,果然发现了一个新的订单,地址是浙江台州,购买的是他那个50元一年的香港虚拟主机套餐。
他笑了一下,回复了一句:
“欢迎上车。”
“兄弟,我想跟你说一个事。”
“你说。”
“我觉得,你的雨云,可以做得更大。”
林语愣了愣,然后问了一句:
“多大?”
“至少,比你现在想的,要大得多。”
林语看着这条消息,沉默了很久。
他忽然觉得,自己好像遇到了一个贵人。
他深吸一口气,回复了一句:
“那你能教我怎么做吗?”
对方很快回复:
“先把那个密码改了。”
“其他的,慢慢来。”
“稳步推进,不要捉急。”
林语看着最后那句话,笑了。
他回复了一句:
“好。”
他关上手机,打开服务器,输入了一条命令:
passwd root
他想了想,输入了一个全新的密码。
一个复杂的、安全的、不会被人猜到的密码。
改完密码后,他看了一眼窗外。
阳光正好,照在宿舍楼下的梧桐树上,叶子泛着金黄的光。
秋天了。
但这里,是广州。
秋天,也是温暖的。
林语站起身,走到窗边,看着远处灰蓝色的天空。
他想起刚才“KK想咸鱼”说的那句话:
“你的雨云,可以做得更大。”
他笑了笑。
是啊。
他还年轻。
雨云,也可以。
他转过身,重新坐回桌前,打开编辑器,继续写代码。
这一次,他写的不再是一个自动备份系统。
而是一个未来。
第7章 防御初探
林语醒来的时候,窗外的阳光已经有些刺眼了。
他看了一眼手机,七点四十二分。
昨晚改完密码后,他躺在床上翻来覆去睡不着,脑子里全是“KK想咸鱼”说的那些话。
“你的防御规则太弱了。”
“随便一个脚本都能打穿。”
“你的雨云,可以做得更大。”
他翻了个身,拿起手机,发现“KK想咸鱼”凌晨三点给他发了一条消息:
“睡了吗?没睡的话,我发你几条规则试试。”
林语看了一眼时间,现在是早上七点四十三分。
他回了一句:
“刚醒。发我吧。”
对方几乎是秒回:
“等我一分钟。”
林语愣了一秒,心想这位大佬难道是不用睡觉的吗?
但他没有多问。
三十秒后,对方发来了一段iptables脚本:
# 基础防护规则
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
# 限制SSH频率
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
# 限制HTTP请求频率
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 10 --hitcount 20 -j DROP
# 禁止荷兰IP
iptables -A INPUT -s 45.144.0.0/16 -j DROP
iptables -A INPUT -s 185.220.0.0/16 -j DROP
林语看着这段脚本,眼睛都亮了。
他之前手动配置的那些规则,跟这个一比,简直就是幼儿园水平。
他回复了一句:
“大佬,这段脚本我能直接用吗?”
对方回复:
“直接复制进去就行。但要注意,这条限制HTTP请求频率的规则,只适合小站。如果你的流量大了,需要重新调优。”
“好,我知道了。”
“你试一下,有不懂的问我。”
林语从床上爬起来,脸都没洗,直接坐到桌前,打开服务器终端。
他深吸一口气,把那段脚本复制进去,按下了回车。
终端显示了一串“OK”之后,他松了一口气。
他输入了一行命令:
iptables -L -n -v
看着屏幕上跳出来的规则列表,他第一次感觉到,自己的服务器有了一种“安全感”。
林语靠在椅背上,看着天花板,嘴角不自觉地向上扬了扬。
他打开微信,给“KK想咸鱼”发了一条消息:
“规则已经生效了。谢谢大佬。”
对方很快回复:
“不客气。你那边还有没有其他服务器?我可以都帮你看看。”
林语想了想,回复了一句:
“暂时就这一台。不过后面可能会加。”
“好,有需要找我。”
“对了,大佬,你平时都在什么论坛混?”
“主力是HostLoc和V2EX。偶尔去福利吧看看。”
“懂了。”
林语把对方的ID“KK想咸鱼”记在了备忘录里。
他知道,这个人,以后肯定会成为雨云的重要人物。
上午的课是英语和近代史。
林语坐在教室最后一排,耳朵里听着老师讲“鸦片战争对中国近代化的影响”,脑子里却在想着iptables规则。
他掏出手机,打开记事本,把“KK想咸鱼”发的那段脚本又看了一遍。
忽然,他的手机震了一下。
是搬砖狐发来的消息。
“上课呢?”
“嗯。英语课。”
“我看你刚才在朋友圈发了一张服务器截图,是换防御规则了?”
林语愣了一下。
他刚才确实发了一条朋友圈,照片是终端里的规则列表。
他回了一句:
“对,刚才一个大佬帮我改了一下。”
“哪个大佬?”
“一个叫‘KK想咸鱼’的。应该是技术圈的。”
“那挺好的。不过你要注意,别被人坑了。”
“放心吧,我有分寸。”
“嗯。对了,你午饭吃了没?”
“还没。等下下课去吃。”
“要不要一起?我在你们学校北门。”
林语愣住了。
搬砖狐来他们学校了?
他赶紧回复:
“你来我们学校了?”
“对啊。今天刚好路过,想着顺便看看你。”
“那你等我一下,我马上下课了。”
“不急,慢慢来。”
林语看着手机屏幕,脸上不自觉地带了笑。
他旁边的同学杨晨探过头来,看了一眼他的屏幕,调侃了一句:
“哟,恋爱了?”
林语白了他一眼,没有说话。
十一点四十五分,下课铃响了。
林语第一个冲出教室,背着书包一路小跑到了北门。
果然,一个穿着白色T恤、扎着马尾的女生正站在校门口,手里拿着一杯奶茶。
看到林语,搬砖狐笑了一下,举了举手里的奶茶:
“给你带的。原味的。”
林语接过奶茶,笑着说了一句:
“谢谢。”
“客气什么。走吧,请你吃午饭。”
“好。”
两人在学校附近找了一家快餐店。
点完餐后,搬砖狐看着林语,问了一句:
“你最近怎么样?那个陈经理的事解决了吗?”
林语摇了摇头:“还没。但至少论坛上已经没人信他了。”
“那就好。对了,你那个防御规则,是谁帮你写的?”
“一个叫‘KK想咸鱼’的。他昨晚私信我,说我的密码太弱了,然后给了我一堆建议。”
“那人靠谱吗?”
“应该靠谱。他帮我试了一下密码,直接连上了我的服务器。如果他真是坏人,早就把我的数据全删了。”
搬砖狐皱了皱眉:“那也是。不过你还是多留个心眼。”
“放心吧,我有分寸。”
两人边吃边聊,聊了一会儿搬砖狐的工作日常。
搬砖狐现在在一家互联网公司做前端开发,工资不高,但胜在轻松。
她跟林语吐槽:
“公司最近又在搞什么‘技术转型’,让我们学Vue3。我学倒是能学,但总感觉没啥必要。”
林语笑了笑:“技术更新换代是正常的。你不学,别人学了,你就落后了。”
“你说得也有道理。对了,你那个管理系统写完了吗?”
“差不多了。还差一个支付接口,对接一下支付宝就可以了。”
“那你加油。我等着看你做大做强。”
林语笑了笑,没有回答。
他喝了一口奶茶,看着窗外灰蓝色的天空,心里忽然涌上一阵复杂的情绪。
他知道,自己现在还在起步阶段。
别说做大做强了,连稳住都难。
但他不想放弃。
他看了一眼搬砖狐,忽然说了一句:
“我想做一个进销存系统。”
搬砖狐愣了愣:“进销存系统?哪来的需求?”
“有一家做建材的小公司找上我了,让我帮他们开发一套管理软件。”
“多少钱?”
“三千。”
搬砖狐瞪大了眼睛:“三千?你要做多少功能?”
林语掰着手指头数了数:
“商品管理、库存管理、进货管理、销售管理、统计报表。”
“就这些?”
“对,就这些。”
“那你打算多久做完?”
“一个月。”
搬砖狐叹了口气:“行吧,你自己悠着点。”
“放心,我心里有数。”
吃完饭,林语送走了搬砖狐,回到宿舍已经是下午一点半。
他没有午休,而是直接坐到电脑前,打开了编辑器。
他先把那个进销存系统的数据库设计写了出来。
表结构不多,一共六个表:用户表、商品表、库存表、进货表、销售表、报表表。
他用了两个小时,把数据库设计写完了。
然后他打开终端,把数据库导入到了本地环境。
看着屏幕上跳出来的“OK”,他伸了一个懒腰。
手机震动了一下。
是“KK想咸鱼”发来的消息:
“规则运行了一天,有什么异常吗?”
林语回复:“没有。挺稳定的。”
“那行。对了,你那边有没有做日志监控?”
“没有。”
“建议你做一个。不然如果被攻击了,你都不知道是谁干的。”
“怎么弄?”
“可以写一个简单的脚本,每天自动把日志压缩,发到你的邮箱。”
林语想了想,觉得这个建议很靠谱。
他回复了一句:“好,我写一个。”
“加油。”
下午两点,林语开始写日志监控脚本。
他用了Go语言,因为Go语言在处理文件读写方面比较顺手。
一个小时后,他完成了脚本的核心逻辑:
每天凌晨三点,自动压缩前一天的访问日志和错误日志,打包成zip,然后通过SMTP发送到他自己的邮箱。
他把脚本跑了一遍测试,确认没问题之后,把它添加到了crontab里。
看着终端里显示的“job added successfully”,他松了一口气。
下午三点半,林语开始写进销存系统的前端页面。
他选了Bootstrap作为UI框架,因为简单好用。
他花了一个小时,把登录页、首页、商品管理页的雏形写了出来。
页面很简陋,但功能能用。
他打开浏览器,测试了一下登录流程,发现有一个bug——登录成功之后,没有跳转到首页。
他打开代码,检查了一遍,发现是一个路由配置写错了。
他改完之后重新测试,这次一切正常。
他靠在椅背上,看着屏幕上那个简陋的登录页,心里有些满足。
下午五点半,林语被一阵急促的手机铃声打断了思路。
他看了一眼来电显示,是那个建材公司的老板——张老板。
他接通了电话:
“喂,张总?”
“小林子啊,你那个系统做得怎么样了?”
“还在开发中。目前数据库和前端的雏形已经写好了。”
“什么时候能做完?”
“预计二十天左右。”
“二十天?太慢了。我给你一周时间,做不完就扣尾款。”
林语愣了一下:“一周?张总,你这个系统有六个表,还有统计报表的功能,一周根本不可能。”
“那就不关我的事了。你自己答应的工期,你自己想办法。”
说完,对方直接挂了电话。
林语看着手机屏幕上“通话结束”的字样,愣了几秒。
然后他深吸一口气,把手机放到桌上。
他知道,自己遇到的是那种典型的“催命式”客户。
但他没有生气。
因为他知道,生气解决不了问题。
他打开编辑器,继续写代码。
这一次,他写得比之前更专注。
他觉得,一周虽然紧张,但也不是不可能。
无非就是熬夜而已。
反正他已经习惯了。
晚上七点半,林语正在写进货管理的接口时,手机又震了一下。
他拿起来一看,是搬砖狐发来的消息。
“吃了吗?”
“还没。”
“别饿着。我帮你点了外卖,应该快到了。”
林语愣了愣,然后回复了一句:
“你这都能算到?”
“不是算到。是猜到。你这个人一写起代码就忘记吃饭,我得替你的胃负责。”
林语笑了笑,回了一句:“谢谢。”
“客气什么。你快吃,别凉了。”
“好。”
五分钟后,外卖到了。
是一份叉烧饭加一杯冻柠茶。
林语打开饭盒,狼吞虎咽地吃了起来。
吃完饭后,他继续写代码。
这一次,他变得更有精神了。
因为有人在乎他吃没吃饭。
他觉得,这种感觉挺好的。
晚上十点,林语正在写库存管理的逻辑时,服务器监控突然弹出一条警报:
“80端口流量异常,每秒请求量超过200。”
林语愣了愣,然后立刻打开终端,输入了一条命令:
netstat -an | grep :80 | wc -l
结果显示:当前连接到80端口的IP数量是47个。
他皱了皱眉。
这个数字虽然不算高,但考虑到雨云现在的客户只有十几个,这个流量明显不正常。
他立刻切换到iptables规则页面,检查当前规则:
“限制HTTP请求频率:10秒内最多20次。”
理论上,这条规则应该能挡住大部分CC攻击。
但54个IP同时请求,每个IP请求一次,就已经超过了20次的上限。
他想了想,决定把频率限制再收紧一些。
他把规则改成了“10秒内最多10次”。
然后他重新加载了规则。
看着屏幕上显示的成功消息,他松了一口气。
他盯着终端的实时流量监控,看了一分钟。
流量明显下降了。
从每秒200多降到了每秒40多。
他松了一口气。
这时候,手机震了一下。
是“KK想咸鱼”发来的消息:
“我看到你刚才改规则了。是不是被CC了?”
林语回复:“嗯。流量突然飙上去了。”
“现在压下去了吗?”
“压下去了。”
“那就好。你那条规则其实可以再优化一下。”
“怎么优化?”
“可以加一个IP白名单。比如你自己的IP,还有搬砖狐的IP,可以直接绕过频率限制。”
林语想了想,觉得这个建议不错。
他回复了一句:“好,我加一下。”
他打开编辑器,在规则文件里加了一行:
iptables -A INPUT -s 14.215.177.0/24 -j ACCEPT
这个网段是林语自己学校宿舍的外网IP。
然后他又加了一行:
iptables -A INPUT -s 113.87.0.0/16 -j ACCEPT
这个是搬砖狐的IP段。
改完之后,他重新加载了规则。
然后他打开终端,测试了一下访问:
直接从宿舍网络访问,响应时间从原来的500毫秒降到了50毫秒。
他满意地点了点头。
晚上十一点,林语继续写代码。
进销存系统的统计报表模块比较复杂,需要写一个自动生成月度报表的函数。
他花了两个小时,把核心逻辑写完了。
但测试的时候,发现了一个bug——统计数据的时候,会把已删除的商品也算进去。
他愣了一下,然后打开代码,检查了一遍。
发现是SQL语句没有加“is_deleted”过滤条件。
他改正之后,重新测试,这次一切正常。
他靠在椅背上,看着屏幕上那个简陋但功能完整的系统,心里有了一丝满足感。
他看了一眼时间:凌晨一点十分。
他关掉电脑,躺在床上,看着天花板发呆。
手机震了一下。
是搬砖狐发来的消息:
“睡了吗?”
“还没。”
“我也没睡。刚才在写一个组件,觉得没必要用Vue,直接用原生JS搞定了。”
林语笑了笑,回复了一句:“那挺好的。”
“你今天写代码到几点?”
“刚结束。一点十分。”
“早点睡。明天还有课。”
“嗯,晚安。”
“晚安。”
林语放下手机,闭上眼睛。
但他怎么也睡不着。
脑子里全是代码。
他想,自己可能真的已经变成了一个“代码机器”。
不过,他不觉得这是坏事。
至少,他找到了自己热爱的东西。
他睁开眼睛,看着窗外模糊的夜色,嘴角不自觉地向上扬了扬。
他知道,明天,又是新的一天。
而他的雨云,会继续生长。
接下来的五天,林语几乎住在了电脑前。
白天上课的时候,他带着笔记本,坐在教室最后一排,偷偷写代码。
老师讲课的声音,像是背景音乐一样在他耳边播放。
但他一个字都没听进去。
他的脑子里,全是进销存系统的代码逻辑。
下课之后,他第一时间冲回宿舍,继续写。
吃饭的时间,从原来的三十分钟,压缩到了十分钟。
他一边吃外卖,一边盯着屏幕上的代码。
晚上,他一直写到凌晨两点,有时候写到三点。
有一次,他写着写着,眼睛就闭上了。
等他醒过来的时候,发现自己在键盘上趴着睡着了。
屏幕上多了一堆乱码:
“asdfghjkl;”
他苦笑了一下,把乱码删掉,继续写。
第六天下午,他终于把进销存系统写完了。
他打开浏览器,从头到尾测试了一遍。
商品管理:正常。
库存管理:正常。
进货管理:正常。
销售管理:正常。
统计报表:正常。
看着屏幕上那个完整的系统,他松了一口气。
他给张老板打了一个电话:
“喂,张总,系统我已经写完了。你用之前我先测试一遍,明天给你发一个测试链接。”
电话那头,张老板的声音有些惊讶:
“写完了?这么快?”
“嗯。你给的工期是七天,我今天写完,第六天。”
“行行行,你发过来,我看看效果。”
“好。”
挂了电话,林语靠在椅背上,看着天花板。
他的眼睛有些酸涩。
他的心里,却有一种说不出的满足感。
他拿起手机,给搬砖狐发了一条消息:
“我写完了。”
搬砖狐秒回:“那个进销存系统?”
“对。”
“这么快?”
“嗯。一周。”
搬砖狐发了一个震惊的表情:“你是真的猛。”
“还行。”
“那你今晚好好休息一下。别熬夜了。”
“好。”
林语放下手机,伸了一个懒腰。
他正准备去洗个澡的时候,手机突然震了一下。
他拿起来一看,是服务器监控发来的警报:
“80端口流量异常,每秒请求量超过500。”
林语的脸色瞬间变了。
他立刻打开终端,输入命令:
netstat -an | grep :80 | wc -l
结果显示:当前连接到80端口的IP数量是128个。
每秒请求量还在上升,已经超过600了。
林语深吸一口气,强压下心里的紧张。
他知道,这不是普通的CC攻击。
这是一场正儿八经的DDoS。
他切换到iptables规则页面,检查当前规则。
频率限制还在,但已经挡不住了。
因为攻击者用了几百个IP同时请求,每个IP只请求一次,就已经超过了十秒十次的限制。
他想了想,决定启用更严格的防护策略。
他打开编辑器,改了一条规则:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP
限制放宽到六十秒五次。
改完之后,他重新加载了规则。
他盯着实时流量监控,看了一分钟。
流量还在涨。
虽然涨得慢了一些,但依然在涨。
每秒请求量已经接近700了。
林语咬了咬牙,决定启用更狠的策略。
他把规则改成了:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 120 --hitcount 3 -j DROP
限制放宽到一百二十秒三次。
然后他重新加载了规则。
这一次,流量终于开始降了。
从每秒700降到了每秒400。
又从每秒400降到了每秒200。
最后,稳定在了每秒100左右。
林语看着屏幕上的数字,松了一口气。
他正准备给“KK想咸鱼”发消息的时候,手机突然响了。
是张老板打来的电话。
“喂,小林子,你那个系统我刚才看了一下,发现一个bug。”
林语愣了愣:“什么bug?”
“库存管理里面,我添加了一个商品之后,显示库存正常。但我再添加一次,库存就变成了负数。”
林语皱眉:“不应该啊。我测试过,不会出现负数的情况。”
“你自己看看。”
“好,我查一下。”
挂了电话,林语打开代码,检查了一遍库存管理的逻辑。
他发现了问题所在——在添加库存的时候,他忘了判断当前库存加上新库存之后是不是负数。
他修正了逻辑,然后重新部署了一遍。
他给张老板发了一个消息:
“张总,bug已经修了。你再试一下。”
张老板很快回复:“我试了,没问题了。系统整体效果不错,尾款过两天打给你。”
林语松了一口气。
他放下手机,看着电脑屏幕上那个已经稳定下来的流量监控面板,心里忽然涌上一阵复杂的情绪。
他知道,自己的路还很长。
但他也知道,自己正在一步一步往前走。
他重新坐回到桌前,打开编辑器,继续写了一个新的脚本。
一个自动追查攻击来源的脚本。
他知道,雨云要活下去,光靠防御是不够的。
他得知道,是谁在攻击他。
然后,一个个地还回去。
他看了一眼窗外。
夜色很深。
但他不觉得累。
他只觉得,自己正站在一个巨大的迷宫里。
每一步,都可能踩到陷阱。
但他不怕。
因为他知道,自己手中,有一把钥匙。
那把钥匙,叫“坚持”。
他敲下第一行代码。
今晚,又是一个不眠夜。
第八章 第一场风暴
凌晨三点,林语刚写完追踪脚本的第一版。
他揉了揉酸涩的眼睛,正准备测试一下脚本效果,手机突然震了起来。
是服务器监控的警报。
“CPU使用率:98%”
林语愣了一下,立刻切到服务器监控面板。
他看到CPU使用率的曲线图正在以肉眼可见的速度向上攀升——从原来的30%,到50%,再到80%,现在已经逼近100%了。
他立刻打开终端,输入命令:
top
屏幕刷出一排进程信息。
他扫了一眼,很快锁定了罪魁祸首——一个名为“apache2”的进程,CPU占用率高达95%。
但不对。
他记得自己用的是Nginx,不是Apache。
他立刻明白了。
这是攻击者在服务器上植入了挖矿程序。
他深吸一口气,强迫自己保持冷静。
他打开进程管理器,找到那个恶意进程的PID,然后输入:
kill -9 2356
进程被强制终止了。
他看着CPU使用率缓缓降下来,松了一口气。
但他知道,这只是暂时的。
因为那个挖矿程序,肯定有自动重启的机制。
果然,不到三十秒,CPU使用率又开始往上蹿了。
林语皱眉。
他想了想,决定直接清理掉恶意文件。
他打开系统日志,找到了挖矿程序的路径——在“/tmp”目录下,一个叫“.systemd”的隐藏文件。
他立刻删除文件:
rm -rf /tmp/.systemd
然后他又检查了一下定时任务,找到了一个每隔三十秒重启挖矿程序的Crontab任务。
他删掉了那个任务,然后清空了日志文件。
做完这一切,他重新启动了一下Nginx服务。
CPU使用率终于稳定在了20%左右。
他松了一口气,靠在椅背上,揉了揉太阳穴。
他的脑子里一片混乱。
他不知道自己是怎么招惹上这群人的。
但他知道,自己必须尽快找到防御的办法。
他拿起手机,给“KK想咸鱼”发了一条消息:
“睡了没?”
对方很快回复:“没睡。怎么了?”
“我的服务器被植入了挖矿程序。”
“卧槽?稳住了吗?”
“稳住了。但我怕他再来。”
“你把系统日志给我看看,我帮你分析一下攻击来源。”
林语截图发过去。
不到五分钟,KK发来了一段分析结果:
“攻击IP来自几个海外节点,应该是用了代理。但有个细节——其中一个IP是112.96.168.0/24网段,这个网段在广东佛山的电信机房。”
林语愣了一下:“佛山?那不是陈经理的机房吗?”
“不确定。但这个网段确实属于那边。”
“…我知道了。”
林语咬了咬牙。
他想起了陈经理跑路之后收到的威胁消息。
原来,对方一直在监视他的服务器。
他现在所处的位置,就像是一只刚学会捕食的小狐狸,已经被一群老练的猎手盯上了。
他知道,这场仗,才刚刚开始。
第二天早上八点,林语被闹钟吵醒。
他睁开眼睛,发现自己趴在桌上睡了一夜。
电脑屏幕上,还显示着昨晚的服务器监控日志。
他看了一眼,确认服务器运行正常,然后去洗手间洗了把脸。
他正刷牙的时候,手机突然响了。
是搬砖狐的电话。
“喂,你昨晚又熬夜了?”
“嗯。”
“服务器还撑得住吗?”
“撑住了。但被植入了挖矿程序。”
“卧槽?你怎么发现的?”
“凌晨三点的时候CPU突然飚到98%,我就去查了。然后发现了一个假的apache2进程。”
“然后呢?”
“我把它干掉了,然后清空了日志和定时任务。”
“靠谱。不过你最好再加一层防护。”
“我已经让一个技术大佬帮我查了一下攻击来源,发现IP来自佛山那边的电信机房。”
搬砖狐沉默了一秒:“你是说,陈经理那边的人干的?”
“不确定。但可能性很大。”
“那你打算怎么办?”
“我打算写一个自动防御脚本,可以自动封禁恶意IP。”
“靠不靠谱?”
“应该。”
“行。那你写完了发我看看,我帮你review一下。”
“好。”
挂了电话,林语擦了擦嘴,然后回到宿舍,打开电脑。
他正准备继续写自动防御脚本的时候,突然发现服务器面板的流量曲线图,又开始往上飙升了。
每秒请求量已经超过了800。
比昨天凌晨还要猛。
林语的脸色变了。
他立刻打开iptables规则页面,检查当前规则。
频率限制还在。
但这一次,攻击者显然做了更充分的准备。
攻击流量来自上千个不同的IP,每个IP只请求一次,然后换一个新的IP。
频率限制已经彻底失效。
每秒请求量已经接近1000了。
他咬了咬牙,决定启用更极端的策略——直接封禁整个C段。
他打开编辑器,写了一条规则:
iptables -A INPUT -s 112.96.168.0/24 -j DROP
然后他写了一个脚本,自动拉取攻击来源的IP,然后封禁整个C段。
他启动脚本,看着终端上不断跳出的封禁信息:
“封禁C段:112.96.168.0/24”
“封禁C段:113.87.0.0/16”
“封禁C段:14.215.177.0/24”
…
每秒封禁三个C段。
五分钟后,攻击流量终于开始下降。
从每秒1000降到了每秒500。
从每秒500降到了每秒200。
最后,稳定在了每秒80左右。
林语松了一口气。
他正准备去喝口水的时候,手机突然震了一下。
是雨云用户群的群消息。
他打开群一看,发现用户们已经开始慌了起来。
“@林语 老板,雨云是不是崩了?”
“我的网站打不开了。”
“我也是。”
“@林语 什么情况?”
“求解释。”
林语看着满屏的问询,深吸一口气。
他知道,他不能发火。
他知道,他必须保持冷静。
他打开群,发了一条消息:
“稳步推进,不要捉急。服务器正在遭受CC攻击,我已经在处理了。预计十分钟内恢复。”
“真的假的?”
“老板,你确定撑得住?”
“@林语 那我等你十分钟。”
“好。”
林语看着群里的消息,心里其实急得冒烟。
但他知道,自己必须稳住。
因为他稳住了,用户才会跟着稳住。
他重新打开终端,检查了一下服务器状态。
CPU使用率:75%。
内存使用率:60%。
带宽使用率:80%。
还好,都还在可控范围内。
他想了想,决定启用更严格的防护策略——直接封禁所有海外IP。
他打开规则文件,加了一行:
iptables -A INPUT -s 0.0.0.0/0 -m geoip --src-cc US -j DROP
但很快,他发现一个问题——
他的服务器没有安装geoip模块。
他愣了一下,然后苦笑了一下。
“好吧,那就手工人肉封禁。”
他打开攻击日志,把所有海外IP一个一个地拉黑。
十秒一个。
封了大概一百多个之后,攻击流量终于彻底停止了。
他松了一口气,靠在椅背上,看着屏幕上的监控数据。
CPU使用率:20%。
内存使用率:30%。
带宽使用率:10%。
一切恢复正常。
他打开群,发了一条消息:
“已经恢复。大家检查一下自己的网站。”
“谢谢老板!”
“稳了稳了!”
“@林语 你是真的牛!”
林语看着群里的消息,嘴角不自觉地向上扬了扬。
他放下手机,看了一眼时间。
从攻击开始到攻击停止,总共持续了两个小时。
这两个小时里,他手动封禁了300多个IP,三个完整的C段,还有十几个海外IP。
他的手指头都快抽筋了。
但他知道,这一切都值得。
因为他又一次,把雨云的服务器从死亡线上拉了回来。
下午两点,林语在食堂吃午饭。
他坐在角落里,一边吃饭,一边用手机看服务器监控数据。
搬砖狐给他发了一条消息:
“听说你刚才又干了一架?”
“嗯。”
“怎么样?”
“稳住了。但手动封禁太累了。”
“那你得赶紧把自动防御脚本写完。”
“正在写。”
“加油。”
“好。”
林语放下手机,继续吃饭。
他的脑子里,全是代码。
他现在最大的问题,不是怎么写自动防御脚本。
而是怎么让自动防御脚本,可以自动识别真正的攻击请求,而不是把正常用户当成攻击者。
他想了想,想到了一个方案——利用机器学习算法,训练一个流量分类模型。
但他很快意识到一个问题——他没有足够的数据,也没有足够的时间去训练这个模型。
“算了,还是用最土的办法吧。”
他决定,写一个基于IP信誉度的自动封禁系统。
他把IP信誉度分为三档:
低风险:正常访问,不做限制。
中风险:请求频率异常,限制每个IP的请求速率。
高风险:发现攻击行为,直接封禁整个C段。
他打开编辑器,开始写代码。
他写了一个Go语言的程序,定时从服务器日志中提取攻击IP,然后根据IP的请求频率和行为特征,给每个IP打一个信誉分。
如果信誉分低于60分,就自动封禁。
如果信誉分在60-80之间,就限制请求速率。
如果信誉分高于80分,就放行。
他写了大概一个小时,终于完成了第一版。
他启动程序,看着终端上输出的日志信息:
“IP 112.96.168.1,信誉分:45,触发封禁”
“IP 112.96.168.2,信誉分:30,触发封禁”
“IP 112.96.168.3,信誉分:55,触发封禁”
他满意地点了点头。
他知道,这个系统还很简单,但至少能帮他在攻击的时候,省去手动封禁的时间。
他给搬砖狐发了一条消息:
“写完了。自动封禁系统。”
“这么快?”
“嗯。用了Go语言写的,逻辑很简单——基于信誉度的封禁。”
“发我看看。”
林语把代码发过去。
不到五分钟,搬砖狐回复了:
“代码写得还行。但有一个bug——你只检查了80端口的请求,如果是443端口的请求呢?”
林语愣了一下。
他确实忘了考虑HTTPS的请求。
“我改一下。”
“行。改完再发我。”
“好。”
林语打开编辑器,在代码里加了一行:
if req.Port == 443 {
// 处理HTTPS请求
}
改完之后,他重新启动程序。
他看了一眼时间。
下午四点。
他还有个选修课要上。
他关掉电脑,拿起课本,往教室走。
晚上八点,林语回到宿舍。
他打开电脑,看了一眼服务器的状态。
一切正常。
他正准备继续写进销存系统的后续维护工作的时候,手机突然震了一下。
是“KK想咸鱼”发来的消息:
“你写的自动封禁系统,我刚才测试了一下,发现一个问题。”
“什么问题?”
“你只是封禁了IP,但没有封禁请求类型。”
“什么意思?”
“意思是,攻击者可以换一种请求类型继续攻击你。比如改成POST请求,或者改成WebSocket请求。”
林语愣了一下。
他确实没有考虑到这个。
“那我应该怎么办?”
“你可以在封禁IP的同时,也封禁请求类型。比如针对某个攻击源,封禁所有的POST请求。”
“好,我改一下。”
林语打开编辑器,在代码里加了一行:
if req.Method == “POST” && req.IP in highRiskIPList {
// 封禁POST请求
}
改完之后,他重新启动程序。
他给KK发了一条消息:“改完了。”
“行。你先测试一下,看看效果。”
“好。”
林语打开了测试工具,模拟了一个POST请求过去。
然后他查看了实时日志,发现那个POST请求确实被拦截了。
他满意地点了点头。
他正准备给KK发消息汇报结果的时候,手机突然又震了一下。
是雨云用户群的群消息。
他打开群一看,发现又有人反映服务器访问慢了。
“@林语 老板,我怎么又感觉卡了?”
“我也是。”
“今天已经第二次了。”
“@林语 是不是又被攻击了?”
林语皱眉。
他打开服务器监控面板,检查了一流量曲线图。
确实,每秒请求量又开始往上飙升了。
从刚才的80,已经飙到了300。
而且还在继续涨。
林语深吸一口气,强迫自己保持冷静。
他打开自动封禁系统的终端,看了一眼当前状态。
系统正在运行,封禁列表已经有一百多个IP了。
但攻击流量还在涨。
他想了想,决定启用更激进的策略——封禁所有来自相同C段的请求。
他写了一条规则:
if sameCidrRequestCount > 50 {
// 封禁整个C段
}
他把这个规则添加到自动封禁系统中,然后重新启动程序。
他盯着终端上的信息,看了一分钟。
封禁C段的数量在直线上升。
每秒封禁三个C段。
五分钟后,攻击流量终于开始下降。
从每秒500降到了每秒200。
从每秒200降到了每秒80。
最后,稳定在了每秒40左右。
林语松了一口气。
他打开群,发了一条消息:
“已经处理。大家检查一下自己的网站。”
“谢谢老板!”
“稳了稳了!”
“@林语 你今晚不去睡觉吗?”
林语看着那条消息,笑了笑。
他回复了一句:“睡。马上睡。”
他放下手机,靠在椅背上,揉了揉太阳穴。
他看了一眼时间。
晚上十点。
今天,他已经连续工作超过十五个小时了。
他的眼睛酸涩,脑子也有些发沉。
但他知道,他不能停。
因为他一旦停下来,雨云就可能真的撑不住了。
他打开编辑器,开始写下一个脚本——一个自动追踪攻击来源的脚本。
他写了一行又一行的代码。
每一个函数,每一个变量,都像是他的战友。
他看着屏幕上的代码,心里忽然涌上一阵安慰。
他知道,自己不是一个人在战斗。
至少,他有代码。
至少,他有雨云。
他敲下最后一行代码,然后靠在椅背上,闭上了眼睛。
他需要休息。
他需要睡觉。
因为明天,又是新的一天。
凌晨一点,林语醒来。
他看了一眼电脑屏幕,发现自动追踪脚本已经跑完了一轮。
他打开日志,查看了一下结果。
他发现,攻击流量确实来自佛山那边的电信机房。
而且,他还发现了一个问题——
那些攻击流量,不是突然出现的。
而是被封禁之后,隔了大概三十分钟,又重新出现了。
这说明了什么?
这说明,攻击者就在盯着他的防御反应。
他封一个C段,对方就换一个新C段。
他封一个IP,对方就换一个新IP。
这不是普通的攻击。
这是一场正儿八经的攻防战。
林语咬了咬牙。
他知道,自己必须找到对方的弱点。
他打开IP反查工具,输入了一个攻击源的IP。
很快,页面弹出了结果:
“IP:112.96.168.1”
“归属地:广东佛山”
“运营商:中国电信”
“设备类型:IDC服务器”
他愣了一下。
IDC服务器?
他立刻想到了什么。
他打开搜索引擎,输入了“佛山电信IDC代理”。
搜索结果第一页,是一家IDC代理公司:
“佛山蓝速网络科技有限公司”
他打开那家公司的官网,扫了一眼。
页面很简陋,只有一个手机号和一个QQ号。
他看了一眼那家公司的地址——“佛山市禅城区XX路XX号”。
他忽然想起,陈经理之前在HostLoc发的帖子,也是用了一个佛山IP。
他立刻明白了。
这一切,都是连在一起的。
陈经理跑路之后,他可能没有彻底消失。
他可能换了一个马甲,开了另一家IDC代理公司。
而他盯上林语,就是因为林语揭穿了他的骗局。
林语深吸一口气,把那个IP和那家公司记录下来。
他知道,自己必须做好更充足的准备。
因为接下来的日子,只会更难。
他看了一眼窗外。
夜色很深。
但他的心里,却异常清醒。
他拿出手机,给搬砖狐发了一条消息:
“我查到了攻击来源。”
“是哪里的?”
“佛山。一家叫‘蓝速网络’的小型IDC代理。”
“你确定?”
“确定。IP归属地和他们官网的地址一致。”
“那你打算怎么办?”
“我打算先搜集证据,然后把他们的恶意行为曝光到HostLoc。”
“靠谱。但你要小心。他们既然敢攻击你,就肯定还有后手。”
“我知道。我会小心的。”
“行。你早点睡。明天我们商量一下对策。”
“好。”
林语放下手机,闭上眼睛。
他知道,自己必须休息。
因为明天,他还有很多事情要做。
他翻了个身,脑子里全是刚才查到的那家公司的信息。
“蓝速网络…”
他默默念着这个名字。
心里,已经暗暗下了一个决心。
他要把这件事,查个水落石出。