早上收到云厂商短信:服务器对外发起异常连接,疑似被入侵。登上去一看,CPU 100%,有个叫 kdevtmpfsi 的进程。
应急步骤
- 先断网:云控制台安全组全关,或
iptables -A INPUT -j DROP,防止继续外联和横向感染 - 保留现场:截图、保存日志、记录进程和文件路径,别急着删
- 找入侵点:
last、lastb看登录记录,~/.ssh/authorized_keys有没有陌生密钥,Web 日志有没有 webshell 上传 - 杀进程:
kill -9,同时删掉定时任务crontab -l和/etc/cron.d/下的恶意任务 - 删文件:
/tmp、/var/tmp、/dev/shm下的可疑文件
这次的原因
Redis 未设密码且暴露在公网,被写入 SSH 公钥。攻击者用密钥登录,植入挖矿程序。
加固
- Redis 绑定 127.0.0.1,设强密码,禁用危险命令
- SSH 禁用密码登录,只允许密钥
- 安全组最小化放行,数据库端口绝不暴露公网
- 装 fail2ban,监控异常登录
- 定期更新系统和软件
- 重要数据异地备份
要不要重装
如果无法确认攻击者留了多少后门,最稳的是备份数据后重装系统。我这次选择了重装,因为发现了一个隐藏的 systemd 服务,不确定还有没有别的。
教训:任何暴露在公网的服务,默认都要当成会被攻击来配置。

Comments 3 条评论
先断网保留现场,这个顺序很重要
Redis 没密码暴露公网真的致命
cron.d 下塞东西这个太隐蔽了