服务器被攻击了如何应急处理

chinaz
chinaz 正式会员超兽战士
发布于 2026-10-07 07:45 ·0 浏览 ·0 回复

学完这篇,你能在发现服务器被入侵后的 30 分钟内完成「保现场、断外网、清后门、恢复业务」这一整套应急动作,把损失和停机时间压到最低。

第一步:先判断攻击类型,别急着关机

这一步要弄清服务器正被挖矿、被当跳板还是数据被拖走,得到的结果是你能决定先断哪条路。登录服务器后立刻执行 top -c、ss -antp | head -30、df -h,看 CPU 是否被 kdevtmpfsi、xmrig 之类进程占满,看是否有大量 445/6379/22 端口的异常外连,看磁盘是否被日志或临时文件写满。同时用 last -n 20、lastb -n 20 看有没有陌生 IP 登录成功过。

注意:不要在这时候 reboot。内存里的恶意进程、/tmp 下的样本文件一重启就没了,后面根本查不出入侵点。

第二步:把服务器从公网摘下来

这一步要让攻击者立刻失去访问通道,得到的结果是止血——不管他留了后门还是正在传数据,链路先断掉。

云服务器优先用控制台操作,以阿里云 ECS 为例:登录阿里云控制台 → 左侧「实例与镜像」→「实例」→ 找到目标实例 → 点实例 ID 进入详情 → 上方「安全组」→「配置规则」→「入方向」→ 把 0.0.0.0/0 的 22、80、443 规则改成只放行你的办公 IP,或直接删除该条规则 → 点「保存」。腾讯云 CVM 对应路径是「云服务器」→「安全组」→「修改规则」。宝塔面板用户可进「面板设置」→「面板端口」→ 把「授权 IP」改成自己的固定 IP。

服务器本机再补一层(CentOS 7.9 示例):

iptables -I INPUT -s 你的办公IP -j ACCEPT
iptables -A INPUT -j DROP
service iptables save

Ubuntu 22.04 LTS 用 ufw allow from 你的IP to any port 22 后再 ufw default deny incoming。

第三步:固定证据,再动手清

这一步要留下可供报案和复盘的原始数据,得到的结果是你删文件、重装系统时不会把证据一起删掉。

先做云盘快照:阿里云控制台 → 实例详情 →「云盘」→ 找到系统盘 →「创建快照」,备注写清时间。如果是自建机房,直接在服务器上打包:

tar -czf /root/evidence_$(date +%F).tar.gz /var/log /etc/passwd /etc/shadow /etc/cron* /var/spool/cron 2>/dev/null

再记录进程与网络现场:ps auxf > /root/ps.txt、ss -antp > /root/net.txt、crontab -l > /root/cron.txt。

注意:history 里的命令可能被攻击者执行过 history -c 清空,别把 history 当唯一线索,重点看 /root/.bash_history 文件本身和 /var/log/secure(CentOS)、/var/log/auth.log(Ubuntu)。

第四步:定位入侵点

这一步要找出攻击者从哪个洞进来的,得到的结果是你知道该补哪里,而不是反复被同一招打进来。按顺序查这几处:

awk -F: '($3==0){print $1}' /etc/passwd        # 有没有多出来的 UID 0 账号
cat /root/.ssh/authorized_keys                 # 有没有陌生的公钥
ls -la /etc/cron.d/ /var/spool/cron/          # 定时任务里有没有下载脚本
find /tmp /dev/shm /var/tmp -type f -executable   # 临时目录里的可执行文件
find /var/www -name "*.php" -mtime -7          # 近 7 天被改过的网页文件
systemctl list-unit-files --state=enabled      # 有没有陌生的开机自启服务

常见入口就三类:SSH 弱口令爆破(看 /var/log/secure 里大量 Failed password)、Web 应用漏洞(看 Nginx access.log 里的 POST 上传路径)、Redis 6379 / Docker 2375 等未授权端口暴露。

第五步:清除后门并加固

这一步把恶意账号、进程、文件清掉,并把入口堵死,得到的结果是服务器能重新对外提供服务且不易被二次入侵。执行 userdel -r 可疑用户名 删账号,编辑 /root/.ssh/authorized_keys 删陌生公钥,kill -9 可疑PID,再删除 /tmp、/dev/shm 下的样本文件。

加固三件事:编辑 /etc/ssh/sshd_config,把 PermitRootLogin 改成 no、PasswordAuthentication 改成 no,然后 systemctl restart sshd;安装 fail2ban(apt install fail2ban 或 yum install fail2ban);把 Nginx、Redis、WordPress 等升级到当前稳定版,例如 Nginx 升到 1.24 以上、WordPress 升到 6.4 以上。

注意:如果查出 rootkit 或者你无法确认是否清干净,直接重装系统、只从备份恢复数据,比"手工清洗"安全得多。

第六步:恢复业务并持续观察

这一步把服务拉起来,得到的结果是业务可用且你能确认攻击没有复发。从快照或备份恢复数据后依次启动 systemctl start nginx、systemctl start mysql,再打开安全组按最小范围放行端口。

之后 24 到 48 小时内每天看一次 ss -antp、top、lastb,以及阿里云控制台「云安全中心」→「安全告警」页面。确认异常后再正式对外。

小结

  • 先取证再动手,云盘快照是最省事的证据保全方式。
  • 断网优先走云控制台安全组,改完立刻生效,不用重启。
  • 排查锁定四处:UID 0 账号、authorized_keys、cron 任务、临时目录可执行文件。
  • SSH 关掉密码登录、装 fail2ban、升级 Web 组件,是性价比最高的加固。
  • 确认不了是否清干净,就重装系统 + 从备份恢复,不要赌。
版权声明:本文来自 GJ论坛《服务器被攻击了如何应急处理》
原文链接:https://www.gj0.com/thread-164.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~