服务器被植入后门,如何彻底清除?
一、确认异常信号:你的服务器可能已被植入后门
首先,你需要判断服务器是否真的被入侵。
常见现象包括:CPU或内存持续高占用、出现未知进程、网络连接异常(比如连接陌生IP)、文件被篡改、出现异常定时任务等。
登录服务器后,可以先执行几个基础命令快速扫一眼:
- 查看当前在线用户:
who或w,看是否有陌生用户。 - 查看监听端口:
netstat -tlnp或ss -tlnp,留意不认识的端口号。 - 查看系统负载:
top,观察是否有名字可疑的高占用进程。 - 查看历史命令:
history,检查是否有人执行过可疑操作。
如果发现上述任何可疑点,不要慌,下面按步骤彻底清理。
二、切断攻击源与备份关键数据
在动手清除之前,先做两件事:立即断开服务器的外网访问(可以通过安全组或防火墙临时封禁所有入站流量,或者修改iptables规则),防止后门继续对外通信或下载更多恶意文件。
然后备份重要数据,将数据库、网站源码等拷贝到安全的本地或另一台正常服务器上。
备份时注意只拷贝纯净的文件,不要包含恶意脚本。
如果使用宝塔面板,可以在面板安全页面临时关闭所有端口,或在服务器提供商控制台设置安全组。
三、全盘排查:定位后门文件与进程
3.1 查找可疑进程并终止
ps aux --sort=-%cpu | head -20
看到高占用进程后,记下PID,然后用 kill -9 PID 强制结束。
如果进程自动重生,说明有守护进程或定时任务在重复拉起,需要进一步排查。
3.2 检查系统启动项与服务
Linux 开机启动脚本常见位置:
/etc/rc.local/etc/init.d//etc/systemd/system/crontab -e(当前用户定时任务)/var/spool/cron/crontabs/
重点查看 /etc/crontab 和 /var/spool/cron/ 下是否有不明定时任务。
例如:
cat /etc/crontab
crontab -l
ls -la /var/spool/cron/
发现恶意条目立即删除(编辑 crontab 用 crontab -e,删除对应行)。
3.3 扫描后门文件
使用专业工具扫描。
推荐 chkrootkit 和 rkhunter:
# 安装
apt install chkrootkit rkhunter -y # Debian/Ubuntu
yum install chkrootkit rkhunter -y # CentOS
# 扫描
chkrootkit
rkhunter --check
另外可以用 ClamAV 扫描恶意文件:
apt install clamav -y
freshclam
clamscan -r /home /www /etc /tmp --log=clamav.log
也可以下载 linux-malware-detect(LMD)进行深度扫描,但需要注意扫描会占用较多资源。
3.4 检查网络连接和动态链接库
netstat -antp | grep ESTABLISHED
检查所有对外连接,如果发现连接了不明IP,用 kill -9 PID 杀掉对应进程,然后将IP加入防火墙黑名单:
iptables -A INPUT -s 可疑IP -j DROP
iptables -A OUTPUT -d 可疑IP -j DROP
同时检查 /etc/ld.so.preload 文件,如果有内容,可能是后门通过动态链接库注入,需要清空并重新加载动态库:
echo > /etc/ld.so.preload
ldconfig
四、根除顽固后门:清理文件与用户
4.1 删除恶意文件
根据扫描结果和已知的异常路径,删除后门文件。
注意有些文件可能被隐藏(名字以 . 开头),或者使用 chattr +i 锁定无法直接删除,先用 lsattr 查看属性,再用 chattr -i 解锁后删除。
4.2 清理异常用户和SSH密钥
查看所有用户:cat /etc/passwd,对照正常用户列表,删除不明用户(userdel -r 用户名)。
检查 /root/.ssh/authorized_keys 和 /home/*/.ssh/authorized_keys,删除未知的公钥。
4.3 重置系统关键文件
如果系统文件被篡改,可以使用包管理器修复:
# Debian/Ubuntu
apt --reinstall install coreutils openssh-server 等
# CentOS
yum reinstall coreutils openssh-server
五、验证与加固:确保后门不再复发
完成清除后,重启服务器:reboot。
重启后再次执行全盘扫描(chkrootkit、rkhunter),并检查 /var/log/auth.log(或 /var/log/secure)看是否有异常登录。
如果一切正常,可以重新开放端口。
5.1 加固建议
- 修改所有密码(包括SSH、数据库、面板、FTP),使用12位以上随机密码。
- 禁用root直接SSH登录,使用普通用户+sudo。
- 更换SSH端口到非标准(如2222),并开启密钥登录。
- 安装防火墙(ufw或firewalld),只放行必要端口。
- 启用Fail2ban防止暴力破解:
apt install fail2ban后配置。 - 定期使用
rkhunter --check和clamscan扫描。
5.2 常见问题解答
Q: 后门执行 rm -rf / 怎么办? 立即从备份恢复,或者使用服务器快照回滚。
平时要养成备份习惯。
Q: 清除后服务器仍然卡顿? 可能还有隐藏进程或挖矿脚本残留,建议重装系统并只恢复纯净数据。
Q: 宝塔面板被串改? 建议卸载宝塔后重新安装最新版,且不要使用破解版或不明插件。
完成以上步骤后,你的服务器基本上可以恢复安全。
建议观察一周,定期查看日志,确保没有新的异常。
如果条件允许,直接重装系统是最干净的方法。