134(上)
五月刚过没几天,论坛就出事了。
那天是周二,雨晴放学回家,照例打开新月港湾。页面加载了十几秒,白屏。刷新,又等了十几秒,还是白屏。她换了浏览器,清了缓存,还是打不开。群里已经有人在问了。小叶子发了一条:“论坛打不开,你们能打开吗?”洛神说“不能”。深海说“不能”。何意味说“我还以为是我网不好”。
过了几分钟,站长在制作组群里发了一条消息:“服务器被攻击了,正在处理。”后面跟了一个叹气的表情。
雨晴看着那条消息,打字问:“什么攻击?”
站长:“应该是CC。流量突然飙上去,CPU跑满了。”
“有防火墙吗?”
“有。但规则没配好,没拦住。”
雨晴沉默了几秒。论坛的服务器她之前看过配置,是阿里云的ECS,配置不算高,扛不住大流量。“需要帮忙吗?”她问。站长很快回了一个“需要”。然后发了服务器的SSH账号密码。
雨晴打开终端,连上服务器。先用top看了一眼,CPU飙到百分之九十九。用netstat查看连接数,大量的SYN_RECV状态的连接,IP地址都是伪造的。用命令行查看了流量来源,确认是CC攻击。她装了一个简单的防CC工具,配置了规则——限制单个IP的连接数,启用SYN Cookie。再查看系统日志,看到攻击者还在尝试,但连接数明显降了。CPU从百分之九十九掉到六十,还在波动。
“我在配防火墙规则。你那边有CDN吗?”雨晴在群里问。
站长:“没有。之前想过,嫌麻烦没弄。”
“现在弄。”
雨晴花了半小时配置CDN。把域名的DNS解析改到CDN服务商,配置缓存规则,开启CC防护。等DNS生效的时间,群里小叶子问“好了吗”,雨晴说“还没”。何意味发了一个猫着急的图。橘子皮跳上书桌趴在她面前,她用下巴蹭了蹭猫的头,盯着屏幕等。
十分钟后,DNS生效了。她刷新论坛,页面加载出来了。速度不快,但能打开了。在群里发了一条:“好了。你们试试。”
小叶子说“能打开了”,洛神说“可以了”,深海发了一个猫鼓掌的图。站长说“清泉,谢谢”。雨晴回了一个“不客气”。关掉终端,靠在椅背上。
橘子皮还在桌上趴着,眯着眼睛。雨晴摸了摸它的头。
“累。”她说。橘子皮打了个哈欠。
周五晚上,林听夏来的时候,雨晴正在写第二天的计划。笔记本上列了一行:“给论坛做个小程序。”林听夏换了鞋,走过来看了一眼。
“什么小程序?”
“论坛的。查医院指南。”
“你做的?”
“嗯。还没开始。”
林听夏没再问了,去厨房做饭。雨晴跟过去,站在门口。林听夏切菜,刀落在案板上,嗒嗒嗒。
“你那个论坛,还有工资?”林听夏问。
“没有。”
“那你白干?”
雨晴没接话。林听夏把切好的番茄推到一边,洗了手,看着她。“你时间那么多?”
“挤挤就行了。”
林听夏没再问了。
周六早上,雨晴起得比平时早。不是闹钟叫的,是猫。橘子皮踩在她脸上,毛茸茸的爪子压着鼻梁。她睁开眼,猫的脸就在面前,两只眼睛圆溜溜的。
“你干嘛。”
橘子皮叫了一声,从她身上踩过去,跳下床,走到门口蹲着。雨晴坐起来,看了一眼手机,六点四十。
她起来洗漱,去厨房倒了杯水。走到客厅的时候发现窗户开着,窗帘被风吹得乱飘。她愣了一下——昨天窗户关着的。走过去关窗,看到窗台上有一片树叶,不知道是风吹进来的还是别的什么。她回头看橘子皮,猫蹲在椅子上,舔爪子,很认真地舔,好像这件事跟她没关系。
“你开的?”
橘子皮没理她。
雨晴把窗户锁上,又检查了一遍。锁好的。她不确定猫是怎么打开的——推拉窗,猫用爪子扒住边缘,往旁边推,就能推开一个缝,然后把脑袋挤出去。她试了一下,确实能推开。雨晴蹲下来看着橘子皮。“你迟早要把自己弄丢。”橘子皮舔完爪子,站起来,走过来蹭她的手。
上午,雨晴开始做小程序。先看微信小程序的开发文档。以前没做过,从零开始。跟着教程搭环境,写了第一个“hello world”。在手机上预览,能跑起来。然后开始设计界面。很简单,就是一个查询页面。首页放一个搜索框,输入城市名称,显示该城市的友好医院列表。数据用论坛上那篇帖子的表格,她手动录入到云数据库。做了两小时,录入了一半,眼睛酸了。橘子皮在沙发上睡觉,她在书桌前伸了个懒腰。
群里,小叶子发了一条消息:“清泉姐,你在干嘛?”雨晴回:“做小程序。查医院用的。”小叶子说“姐你什么都会”。洛神发了一个大拇指。深海发了一张猫在电脑前的图。
下午,继续录数据。二十几家医院,每家都有城市、医院名称、科室、医生、挂号方式、网友评价。她一条一条地敲进去。敲到第十家的时候,手机震了。何意味发的消息:“姐,晚上有空吗?”
雨晴想了想,回:“有空。”
“出来吃饭?我请客。”
“不用请。小区门口面馆。”
“行。几点?”
“五点半。”
雨晴继续录入数据。橘子皮醒了,从沙发上跳下来,走到冰箱前面蹲着。雨晴没理它,它就蹲在那里,一动不动,像一尊雕塑。过了大概一分钟,它伸出爪子扒了一下冰箱门缝。雨晴头也没抬。“橘子皮。”猫收回爪子,蹲回去,尾巴慢慢地甩。又过了一会儿,它又伸出爪子。雨晴站起来走过去,猫立刻跑开了。她打开冰箱,密封条完好无损,门关得很紧。林听夏上次换的新密封条,猫扒不开了。
“吃不到了吧。”雨晴说。橘子皮蹲在椅子下面,仰头看她,眼神无辜。
五点多,雨晴骑车去面馆。何意味已经在了,坐在靠窗的位置,面前放着一杯水,没喝,手指在杯子上蹭来蹭去。
“姐。”
雨晴坐下,点了一碗素面。何意味也点了一碗牛肉面。等面的时候,两个人坐着。
“你那个小程序,做什么的?”何意味问。
“查医院名单。给论坛用的。”
“你一个人做?”
“嗯。不难。”
面来了。何意味吃了几口,说“姐,我上次那个检查,结果出来了”。雨晴看着他。“染色体,46,XY,正常。”何意味说这话的时候语气很平,像在说别人的事。雨晴没接话。“医生说我是正常男性,”何意味笑了一下,那个笑容很短,很快就收了,“那我为什么觉得自己应该是女的?”
雨晴放下筷子。“医生说怎么做?”
“让做心理评估。然后才能开药。”
“那你去做。”
“嗯。约了下周三。”
雨晴看着他。“你一个人去?”
“嗯。”
“要不要我陪?”
何意味犹豫了一下。“不用。我自己能行。”
雨晴没再问了。吃完面,何意味去付钱。两个人站在面馆门口,天还没黑,路灯已经亮了。
“姐,”何意味看着地上的影子,“你说我做完心理评估,就能吃药了吗?”
“不一定。看医生怎么说。”
何意味沉默了几秒。雨晴说“你先去,去了再说”。何意味点了点头。“那我走了。”“嗯。”何意味往公交站走,走了两步回头看了雨晴一眼,挥了挥手。雨晴也挥了一下。
骑车回家的路上,风把她的头发吹到脸上。她想起自己第一次去医院的时候,也是一个人。坐在候诊区,手心全是汗。不知道为什么没有叫林听夏陪,可能是觉得这件事只能自己面对。何意味比她勇敢,至少他问了她要不要陪。
到家的时候橘子皮在门口蹲着。雨晴换了鞋,先去厨房倒了杯水,然后坐到书桌前。打开小程序,继续录入数据。录到第十五家的时候,手机震了。林听夏发的消息:“明天我休息。过去。”
雨晴回了一个“好”。
她把手腕上的小锁和小星星转了转,继续录数据。橘子皮跳上书桌,趴在她面前,压住了键盘。她把它抱下去,猫又上来。抱下去,又上来。第三次的时候她没再抱了,在猫屁股后面接着敲。