服务器被攻击导致内部错误时,最快的排查路径是先看日志、再查进程、最后断网隔离,多数情况下能在30分钟内定位问题。别一上来就重装系统,那样反而丢了攻击痕迹,下面这套流程是运维圈子里经常用的实战手法,按着走能省不少时间。
服务器被攻击怎么排查?先分清故障类型
网站打不开但服务器能Ping通,先看是不是带宽被打满
这是最典型的场景,用户访问网站提示“500 Internal Server Error”或者直接超时,但你在本地Ping服务器IP却是通的,这时候别急着连SSH,先登录云服务商控制台,查看出入方向带宽监控图。
如果入方向带宽曲线接近上限,说明大概率是流量型攻击,也就是DDoS,行业共识认为,DDoS攻击占服务器被攻击原因的较大比例,而且现在攻击成本极低,几百块钱就能打一天。
处理方式分两层:
- 没上高防的服务器,先把IP切到CDN或高防IP后面,别让源站IP暴露。
- 已经上了高防但还被打穿,检查是不是源站IP泄露了,比如域名解析记录里历史A记录没删干净。
服务器能访问但页面报500错误,优先查Web日志
如果带宽正常,服务器也响应,但页面就是报500,这属于应用层攻击导致的内部错误,常见原因有:
- 攻击者利用漏洞上传webshell,导致PHP或Java进程崩溃。
- 恶意爬虫把数据库连接池打满,应用拿不到连接,直接抛异常。
- 暴力破解SSH成功后植入挖矿程序,CPU跑满,Web服务响应不过来。
登录服务器后,第一步不是看进程,而是看日志,具体路径因环境而异:
- Nginx日志:/var/log/nginx/error.log
- Apache日志:/var/log/apache2/error.log 或 /var/log/httpd/error_log
- PHP日志:/var/log/php-fpm.log 或 php.ini里配置的错误日志路径
- 系统认证日志:/var/log/auth.log(Debian系)或 /var/log/secure(CentOS系)
用tail -100命令看最近100行,如果日志里疯狂刷同一个IP或同一个请求路径,基本就能锁定攻击源。
网站被攻击了怎么处理才不扩大损失
先隔离再查因,防扩散是第一位
很多新手一发现被攻击,马上就去删文件、改密码,这其实可能打草惊蛇,正确的做法是先切断影响范围:
- 在云控制台的安全组里,把Web端口(80/443)入方向规则暂时只放行你的办公IP。
- 如果已经确认有异常进程在跑,直接vnc进去执行命令:
ps aux --sort=-%cpu | head -20,看看哪个进程吃掉大量CPU。 - 不确认对方是否拿到root权限时,不要在原系统上改密码,那样相当于改给攻击者看,直接做快照,然后重置系统盘。
隔离的同时,保留一份系统快照作为证据,这在后续追查攻击路径和报警时都用得上。
日志定位到具体攻击类型,再决定修复方案
隔离之后,继续回到日志分析这一步,业内专家指出,多数服务器被攻击的痕迹都会在日志里留下异常模式,关键在于你读不读得懂。
拿最常见的几种攻击类型举例:
| 攻击类型 | 日志特征 | 快速处理方案 |
|---|---|---|
| 暴力破解SSH | auth.log中大量Failed password记录 | 禁用密码登录,改用密钥,安装fail2ban |
| WebShell上传 | nginx日志中出现.php文件POST请求,文件在upload目录 | 删除Shell文件,修复上传接口鉴权漏洞 |
| 挖矿程序植入 | CPU占用率异常高,/tmp或/var/tmp下有空跑的可执行文件 | kill进程,删除文件,修补Redis或Docker暴露端口 |
| SQL注入 | 日志中请求参数带有union select或sleep(0.1) | 开启数据库防火墙,Web层加WAF规则 |
服务器内部错误修复实操步骤
修SSH暴力破解:改密钥登录加IP黑名单
SSH端口被狂扫是服务器被攻击最常见的前兆,也是最容易导致后续被入侵的入口,如果你发现auth.log里有大量来自不同IP的登录尝试,按照下面步骤操作:
# 1. 生成密钥对并在本机保存好私钥 ssh-keygen -t ed25519 -f ~/.ssh/server_key # 2. 把公钥追加到服务器authorized_keys ssh-copy-id -i ~/.ssh/server_key.pub root@服务器IP # 3. 修改sshd配置禁用密码登录 vi /etc/ssh/sshd_config # 修改两项: # PasswordAuthentication no # PermitRootLogin prohibit-password # 4. 重启sshd服务 systemctl restart sshd
装fail2ban的时候,默认配置直接能用,它会自动封禁连续输错密码的IP,注意不要把自己办公IP封了,在/etc/fail2ban/jail.local里加一行ignoreip。
清理webshell和恶意文件:先找后删再堵
确认有webshell被上传后,不要直接删了完事,要找到上传入口,常见路径:
- WordPress插件漏洞上传到/wp-content/uploads/
- 后台编辑器漏洞写入主题文件
- 文件上传接口没做类型校验,直接被传了.php文件
查找webshell可以用一句话命令:
grep -r "eval(" /var/www/html --include=".php" -l
grep -r "base64_decode" /var/www/html --include=".php" -l
找到文件后先备份然后删除,再检查对应入口文件的上传逻辑,如果实在找不到入口,就直接重装应用层,比如把WordPress重新覆盖一遍核心文件,然后修改所有后台密码和数据库密码。
处理挖矿病毒:结束进程然后清残留
挖矿程序的典型特征是CPU跑满,且启动命令里带有一个可疑的URL(矿池地址),处理步骤:
# 1. 查看CPU占用最高的进程 top -c # 2. 强制结束进程 kill -9 进程PID # 3. 查看进程关联的可执行文件位置 ls -l /proc/进程PID/exe # 4. 删除对应的文件,清理计划任务 crontab -l crontab -r # 同时检查 /etc/cron.d/ 目录下的可疑脚本
挖矿程序常在/tmp目录下运行,清理完别忘检查防火墙和SSH配置,因为攻击者可能已经改了公钥。
服务器被ddos攻击之后的防御配置
启用云WAF和速率控制,别全裸上阵
近年来,国内云厂商的基本套餐里都自带免费的低配WAF,虽然不是所有攻击都能拦住,但对付中小规模的CC攻击够用了,如果你用的是简米云或酷番云,控制台里都能一键开启。
Web应用防火墙主要拦截SQL注入、XSS、恶意爬虫这些七层攻击,如果业务还没上WAF,现在就去开,免费版就有基本防护能力,针对CC攻击,直接在WAF规则里配置单IP速率限制,一般每分钟超过60次请求就自动封禁IP一段时间。
服务器被攻击数据恢复和灾备方案
被攻击之后最痛苦的其实是数据丢了,网站代码被删了、数据库被篡改了,就算把攻击源头堵住也没用,所以日常就得做好备份:
- Web代码走Git版本管理,每次发版都打tag,被篡改之后直接git checkout回滚。
- 数据库每天凌晨全量备份,日志实时同步到对象存储。
- 如果预算允许,做一套主从复制,备份节点平时不对外提供服务。
这样即便服务器被攻击到完全不可用,也能在2小时内把业务切到新机器上。
常见问题速查
服务器被攻击了报警有用吗?
有用,但效果取决于攻击场景,如果涉及数据泄露、勒索病毒或者大额资金损失,报警是必须的,警方可以通过服务器快照和日志追查定位,如果是单纯DDoS骚扰,报警后建议同时联系云厂商的售后团队做流量清洗。
服务器被攻击导致内部错误如何处理才能防止二次攻击?
修复后必须做三件事:修改所有密码(包括数据库和后台管理员)、检查SSH授权密钥、更新所有应用和插件到最新版,很多服务器被反复攻击成功,就是因为只清了木马,没堵住漏洞入口。
服务器被攻击后网站数据能还原干净吗?
取决于备份的时间点,如果备份策略合理,最多丢失一小时内的数据,关键是把攻击源彻底清理干净再回滚,否则刚恢复又被入侵了,建议在根目录放一个文件完整性监控脚本,用crontab每五分钟跑一次,有改动就发送告警到邮箱。