发现服务器被入侵是件很糟心的事,但第一时间的处理方式很关键——处理不当可能让情况更糟,比如在没搞清楚入侵路径之前就重启,可能丢掉所有排查线索。
发现异常的常见信号
- CPU/带宽莫名暴涨,但没有明显流量
- 收到云服务商的安全告警邮件
- 服务器上出现陌生进程或陌生用户
- 日志里有大量异常登录记录
- 网站被挂马,或者被搜索引擎标记为危险
第一阶段:应急处理
1. 立即隔离,别急着重启
在云控制台把安全组改成只允许你自己的IP访问22端口,断掉其他所有入站流量。这样可以切断攻击者的连接,同时保留现场。
2. 查清楚在跑什么
ps aux --sort=-%cpu | head -20
netstat -tlnp
who
last
看看有没有可疑进程、陌生的监听端口、以及最近是谁登录了。
3. 检查计划任务和启动项
crontab -l
cat /etc/crontab
ls /etc/cron.*
挖矿木马很喜欢写crontab来保持持久化。
4. 查看最近修改的文件
find /var/www /home -mtime -3 -type f -name "*.php" 2>/dev/null
找出最近几天内被修改的PHP文件,重点看看有没有eval、base64_decode这类混淆代码。
5. 查auth.log确认入侵路径
grep "Accepted" /var/log/auth.log | tail -50
看有没有你不认识的IP成功登录过。
第二阶段:清理与恢复
找到入侵路径后:
- 删除或隔离恶意文件
- 删除攻击者创建的账户
- 清理crontab中的恶意任务
- 如果从备份恢复,先确认备份是干净的(入侵时间点之前的)
如果实在搞不清楚范围,最稳的做法是把数据备份出来,重新初始化服务器,再重新部署。
第三阶段:事后加固
SSH加固
# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
Port 22222 # 改掉默认端口
禁止root直接登录,改用密钥认证,换掉默认的22端口。
安装fail2ban
apt install fail2ban
systemctl enable fail2ban
自动封禁暴力破解IP,装完基本不用管。
定期备份+快照
至少每天做一次快照,保留最近7天。出事了可以直接回滚,不用从头重建。
最小化暴露面
- 只开放必要端口(80、443,加上你改后的SSH端口)
- 数据库端口(3306)永远不要对公网开放
- 定期更新系统和软件包
被入侵一次之后做好加固,往往比没被入侵过的服务器还要安全——因为每个漏洞都是真实教训换来的。