2000年 7月中旬
广欣电力通信公司 is项目的荧光屏在服务器机房里泛着冷光。
机房空调的嗡鸣中,网益公司的技术团队正进行上线前最后一轮压力测试。
广欣公司的曾总监隔着玻璃观察屏,手指在ipaq上快速滑动:“财务系统的报表生成模块必须与 is的实时数据同步,下个月税务稽查可不能出岔子。”
网益公司的陈副总推了推眼镜,示意技术经理 jackson上前。
jackson调出系统拓扑图,激光笔在投影幕布上划出红线:“is就像中枢神经,oa的流程审批调用它的权限数据库,邮件系统的通讯录同步依赖它的员工信息表,call center的客户工单更是直接读取 is的产品数据。”
他顿了顿,指向计费模块,“这里用的是 oracle的实时同步机制,每笔交易都会生成日志文件。”
连续三天的暴雨让城市变成了泽国。
我把湿透的衬衫扔在阳台上,灌下整瓶冰啤酒,凉菜在胃里泛出凉意。
爬上床的时候,拿起手机看了一下时间,21:47,眼皮像挂了铅块。
迷迷糊糊中,摩托罗拉 v998的“致爱丽丝”彩铃突然炸响。
我像触电般扑过去,屏幕上跳动的“jackson”三个字刺得眼睛生疼。
“服务器集群全瘫了!”
电话那头的电流声里混着键盘敲击声,“oa系统打不开审批单,邮件服务器拒收所有邮件,财务的月末结账程序卡在百分之三十七,call center的坐席全报‘数据库连接失败’!”
jackson的声音劈了叉,“告警短信已经炸了曾总监的手机,他现在就在机房等着!”
我慌乱中穿好衣服,抓起工牌冲下楼,雨刷器在出租车上疯狂摇摆。
车窗外,霓虹灯在积水里碎成彩色的河。
赶到广欣公司时,玻璃门内映出一片忙乱的影子。
jackson正对着白板画系统关联图,berry把笔记本电脑架在会议桌上,ben手里攥着网线测试仪来回踱步。
“willia被堵在珠江大桥了,”jackson把一沓打印的日志摔在桌上,“从告警时间看,先是 is的核心数据库响应延迟,三分钟后 oa的应用服务器报连接超时,接着邮件队列开始堆积,最后整个局域网的数据包丢失率超过百分之四十。”
我翻到网络安全日志那页,瞳孔猛地收缩:“这里有大量来自粤北 ip段的异常访问,时间集中在晚上十点十五分。”
ben突然拍桌子:“我刚查了网络拓扑,粤北管理站通过 vpn专线直连总部核心交换机!”
他扯过网线图,红笔沿着线路画了个圈,“这条链路没有流量控制!”
berry的手指在键盘上翻飞,屏幕上的 oracle日志不断刷新:“数据库事务日志有大量回滚记录,像是被恶意中断了。”
她突然停下手,“爱虫病毒!日志里有这个特征码,它会篡改邮件附件名,还会删除数据库索引文件!”
jackson扯开领带,喉结滚动着:“粤北值班室那台管理工作站,肯定有人用它收了带病毒的邮件。”
他抓起电话按下免提,“查粤北管理站昨晚的登录记录,对,就是那台装了数据库客户端的机器!”
雨还在下,会议室的空调发出疲惫的嗡鸣。
凌晨一点,分工终于明确:berry负责从灾备系统恢复数据库索引,她抱着备份磁带跑进机房时,睡裙的下摆扫过满地的网线;
我在服务器机柜间穿梭,给每台主机加装病毒防火墙,汗水顺着额角滴进键盘;
我手指在键盘上敲出病毒特征码检索命令,屏幕瞬间跳出密密麻麻的红色警告。
“不止邮件系统,is数据库的后台进程也被感染了。”
我猛地拍向服务器电源开关,机箱嗡鸣骤然低沉,“ben,立刻登录核心交换机,关闭所有与粤北管理站的 vpn隧道接口!”
说着我扯过网线跳线,膝盖顶住机柜边缘开始插拔:“先关 oracle的 tns监听服务,还有 iis的 web服务,这些都是病毒传播的通道。
指尖触到滚烫的服务器外壳,余光瞥见 berry举着备份磁带愣在原地,“把灾备系统的病毒库升级到最新版,恢复前必须全盘扫描!”
ben的指甲在交换机面板上划出白痕:“gi1/0/1到 gi1/0/4接口全关了,总部局域网和粤北链路物理隔离!”
他突然回头,额前碎发滴着汗,“但 call center的终端还在报病毒库过期!”。”
蹲在地上逐台检查终端时,皮鞋后跟被网线缠住,踉跄中带倒了电源插排,机房一半屏幕瞬间黑屏。
“别动!”
我扑过去按住急着合闸的 ben,“先确认 ups供电稳定,贸然上电会损坏数据库文件!”
凌晨三点的机房里,键盘敲击声此起彼伏。
我对着对讲机喊:“所有终端按 ip段分组扫描,完成一台就接入隔离区验证,没问题再接入主网。”
撕开应急灯包装时,荧光棒在掌心发出噼啪轻响,“berry,数据库恢复后先跑事务一致性校验,尤其财务模块的总账表,少一条记录都要重导!”
当最后一台终端弹出“扫描完成,未发现威胁”的提示时,天已泛白。
我瘫坐在服务器旁,看着 ben用酒精棉擦拭满是指纹的交换机接口,突然笑出声:“等下让行政部发通知,所有终端必须启用 u盘写保护,邮件附件禁止自动运行。”
说着把染着油污的工牌别回衣领,“还有,每周三强制做全盘病毒扫描,日志直接同步到安全审计系统。”
ben蹲在配线架前,一把扯掉粤北专线的水晶头,用酒精棉反复擦拭接口:“先物理隔离,重建 vpn隧道需要四十分钟。”
“索引重建到百分之六十了!”
berry的声音从机房传来,带着喘息,“但有三个表空间损坏,需要手动修复!”
我隔着玻璃门朝她比划 ok的手势,手里的杀毒软件正弹出“清除成功”的提示。
ben突然跳起来:“隧道通了!总部到粤北的链路恢复正常!”
他甩了甩发麻的手腕,手指显得有些僵硬。
“现在可以启动服务器集群了。”
jackson把 s unix系统盘拍在服务器顶端,指尖在灰扑扑的键盘上敲出ps -ef | grep ora_,屏幕瞬间滚过一片红色错误进程。
“集群心跳线断了,”他扯掉衬衫第二颗纽扣,额角汗珠砸在显示器上,“node1的 oracle监听进程被病毒篡改了配置文件。”。
“berry,把备份磁带里的 19号监听配置导过来,”。”。”。”
晨光从机房天窗斜切进来时,jackson已经调好了集群参数。。”
说着一次性水杯往地上一墩,“berry,用scp把修改好的/etc/hosts传到 node2,确保两个节点主机名解析正确。”
当lsnrctl start命令返回“tns-00530: protol adapter error”时,他突然踹了服务器机柜一脚。
“权限问题,”jackson扯过 berry递来的湿巾擦手,“chown -r oracle:dba oracle_ho,再chod 6751 oracle_ho/b/oracle,s的 suid位必须显式设置。”
最后重启集群服务时,他盯着ctl stat的输出屏住呼吸。
当屏幕跳出“cster is runng noral ode”,两个节点的实例状态都变成“open”。”
他望着机柜顶端闪烁的绿灯笑出声,“下次谁再在 s上装 oracle 8i集群,我跟他急。”
晨光爬上服务器指示灯时,call center的测试电话终于拨通了。
jackson盯着监控屏上跳动的绿色数据流,突然笑出声:“曾总监刚发消息,说要给我们申请加班费。”
但没人接话,berry揉着发红的眼睛,ben把剩下的半瓶矿泉水一饮而尽。
我摸出手机看时间,8:01。
合同里“两小时到场,八小时解决”的条款像根针,扎在每个人的神经上。
走出广欣公司时,willia终于坐着一辆摩托车冒雨赶来,裤脚滴着水,他举着手机喊:“刚收到消息,粤北那个值班的,居然在工作站上打游戏!”
jackson望着天边的朝霞,突然说:“明天起,所有管理工作站安装屏幕监控。”
风掀起他的衬衫,露出后背汗湿的印子,“还有,把 vpn专线改成单向访问。”
我把手机铃声调到最大,心想今晚睡觉前,得把充电器插在床头。