去年冬天,主机高危我帮一个做跨境电商的主机高危朋友处理服务器故障。凌晨三点,主机高危他打电话过来,主机高危声音发紧:后台所有订单数据被加密了,主机高危屏幕上只留了一行英文——想恢复,主机高危付三个比特币。主机高危他那台主机跑了两年多,主机高危一直没出过事,主机高危密码还是主机高危当初装系统时随手设的八个数字。攻击者没用什么高级漏洞,主机高危就是主机高危撞库撞进去的。
这事不是主机高危孤例。很多人对"主机安全"的主机高危理解还停留在装个杀毒软件、开个防火墙的主机高危阶段。实际情况是,大部分入侵根本不需要正面突破你的防御,它们从你没想到的缝隙里钻进来。一台暴露在公网的主机,平均在联网后不到十五分钟就会迎来第一次自动化扫描。这不是危言耸听,是蜜罐实验反复验证过的数据。
我见过太多服务器还在用 root/123456 这种组合。有人觉得改个端口就安全了,把 SSH 从 22 改到 22222,以为能躲过扫描。扫描器早就不只盯默认端口了,全端口扫描在普通宽带上跑一遍也就几分钟的事。真正管用的是密钥登录加禁用密码认证,这两步做完,暴力破解基本就断了路。
还有一种情况更隐蔽:为了方便,把数据库端口直接开到公网。Redis 未授权访问、MongoDB 默认无密码——这些配置在开发环境里图省事,上了生产环境就是敞开的大门。2019 年那波 Redis 挖矿潮,根子就在这儿。攻击者写个脚本批量扫 6379 端口,连上直接写 crontab,十分钟内你的 CPU 就被占满去挖门罗币了。
有个做游戏私服的朋友,系统是 CentOS 7,内核版本停留在 3.10。我提醒他 Dirty COW 漏洞影响这个版本,他摆摆手说"跑了这么久没事"。两个月后主机被提权,攻击者拿走了所有玩家数据,包括充值记录。他后来算了一笔账:停服三天、退款、重新买高防,加起来损失六位数。而打一个内核补丁,重启一次,最多半小时。
补丁管理不是"有空再搞"的事。CVE 公布到 PoC 公开,窗口期越来越短。Log4Shell 从披露到全网大规模利用,只隔了不到七十二小时。你手动一台台登上去更新,根本追不上。自动化工具这时候不是可选项,是必需品。
入侵者进来之后,通常会做几件事:新建一个隐藏账户、写一个定时任务、替换几个系统命令。这些动作都会在日志里留下痕迹。问题在于,很多主机的日志要么没开,要么开了没人看,要么被攻击者顺手清掉了。
我自己的做法是把关键日志实时推送到另一台机器上。/var/log/auth.log、/var/log/secure、crontab 的变更记录,全部走 syslog 转发。攻击者能清本地日志,但清不掉已经发出去的副本。有一次我就是靠远程日志里一条异常的 sudo 记录,发现了一个被入侵的测试机——攻击者用了一个合法的运维账号,但登录时间在凌晨四点,而且执行的命令跟平时完全不一样。
回到开头那个朋友的事。他最后没付比特币,因为发现备份是坏的——备份脚本跑了半年,但从来没验证过恢复。磁盘满了之后,备份文件全是零字节。他以为有备份,实际上没有。
备份的核心不是"备了",是"能恢复"。定期做恢复演练,比备份本身更重要。另外,备份文件不要放在同一台主机上,也不要用同一个密码。勒索软件现在会主动搜索并加密备份目录,甚至映射的网络驱动器也不放过。
主机安全说到底就一句话:假设你已经被盯上了,然后去堵那些最容易被利用的口子。弱口令、未打补丁的服务、暴露的端口、没人看的日志、没验证过的备份——这五件事做好,能挡掉九成以上的麻烦。剩下的那一成,靠运气,也靠你平时攒下来的应急响应能力。