云服务器被入侵了怎么办?应急处理+事后加固全攻略

发现服务器被入侵是件很糟心的事,但第一时间的处理方式很关键——处理不当可能让情况更糟,比如在没搞清楚入侵路径之前就重启,可能丢掉所有排查线索。

发现异常的常见信号

  • 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)永远不要对公网开放
  • 定期更新系统和软件包

被入侵一次之后做好加固,往往比没被入侵过的服务器还要安全——因为每个漏洞都是真实教训换来的。