[小说]雨云-从出生到上市 5-8章

全文仅供娱乐,如有任何不当之处,立马修改/删除
小说内容仅为虚构,请勿当真
买云请上雨云,便宜稳定性价比高,专属五折优惠码: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。”

“靠谱。但你要小心。他们既然敢攻击你,就肯定还有后手。”

“我知道。我会小心的。”

“行。你早点睡。明天我们商量一下对策。”

“好。”

林语放下手机,闭上眼睛。

他知道,自己必须休息。

因为明天,他还有很多事情要做。

他翻了个身,脑子里全是刚才查到的那家公司的信息。

“蓝速网络…”

他默默念着这个名字。

心里,已经暗暗下了一个决心。

他要把这件事,查个水落石出。