导语
“服务器被入侵了,网站被挂马,但完全不知道对方是怎么进来的。”这是应急响应里最常见的开场白。事实上,绝大多数入侵都不是没有痕迹,而是没人去看日志。
访问日志里藏着扫描器的试探,auth.log 里留着暴力破解的记录,系统日志中有后门的启动痕迹。本文以宝塔 + Nginx 环境为例,从访问日志、登录日志到应急排查清单,讲清 Linux 日志分析与入侵检测的完整方法,命令可直接复制。
一、为什么日志分析是入侵检测的第一道防线
入侵检测通常有三层:流量层(防火墙/IPS)、主机层(日志与文件监控)、应用层(WAF)。对大多数中小企业来说,流量层设备不全,主机层的日志分析反而是投入产出比最高的一环:
- 成本为零:日志本来就在服务器上,只是没被利用起来;
- 痕迹必然:任何入侵行为都会留下日志、文件或进程层面的变动;
- 可追溯:日志能还原攻击路径,为后续加固和取证提供依据。
前提是日志要开全:Nginx 的 access.log、系统的 auth.log、syslog 都要保留,建议保留 30 天以上。
二、Nginx 访问日志分析:识别扫描器与攻击特征
访问日志是攻击者留下的第一串脚印。以下命令针对宝塔默认日志路径 /www/wwwlogs/,其他环境把路径换成你的 access.log 即可。
1. 找出访问量 TOP 的 IP(刷量、采集、扫描源头)
awk '{print $1}' /www/wwwlogs/example.com.log | sort | uniq -c | sort -rn | head -20
如果某个 IP 的请求量远超其他 IP,八成是采集器或扫描器,结合下面几条继续判断。
2. 找出 404 最多的 IP(目录扫描特征)
awk '$9==404 {print $1}' /www/wwwlogs/example.com.log | sort | uniq -c | sort -rn | head -10
攻击者在打点阶段会用 dirsearch 等工具批量探测目录和备份文件,产生大量 404。短时间内高密度 404 就是扫描信号。
3. 检索注入与 XSS 攻击特征
grep -E "(union.*select|sleep\(|benchmark\(|
提示:onerror 后的等号用反斜杠转义(onerror\=),匹配结果不变,避免云 WAF 误拦截。
4. 检索 WebShell 上传与命令执行特征
grep -E "(eval\(|base64_de[co]de|assert\(|passthru|shell_exec|cmd=)" /www/wwwlogs/example.com.log | head -20
提示:base64_de[co]de 是字符类写法,匹配结果与 base64_decode 一致,可避免云 WAF 误拦截。命中即高危,顺着来源 IP 与 UA 往下查。
如果不想手动敲命令,可以安装 GoAccess 做可视化分析:
# 安装 GoAccess(宝塔面板软件商店也可一键安装)后生成 HTML 报告
goaccess /www/wwwlogs/example.com.log --log-format=COMBINED -o /www/wwwroot/report.html
三、登录日志排查:auth.log 与 fail2ban 联动
SSH 是服务器最容易被攻破的入口,每天被爆破几千次是常态。先看现状:
# 登录失败的 IP 排行(爆破源)
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head
# 成功登录记录(重点看异常时间和来源)
grep "Accepted" /var/log/auth.log | tail -20
last -20
发现异常登录后,用 fail2ban 自动封禁爆破 IP。配置 /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600 # 封禁 1 小时
systemctl restart fail2ban
fail2ban-client status sshd
四、入侵痕迹排查清单(应急响应必查项)
如果你怀疑已经失陷,按以下顺序排查,基本覆盖常见后门位置:
# 1. 计划任务(最常见的持久化手段)
crontab -l
ls -la /etc/cron.d/
# 2. 进程与网络连接
ps aux --sort=-%cpu | head -15
ss -lntp
# 3. 临时目录与可疑文件
ls -la /tmp /var/tmp /dev/shm
find /www/wwwroot -name "*.php" -mtime -3
# 4. 命令历史与免密登录
tail -50 /root/.bash_history
排查口诀:查计划任务、查进程、查临时目录、查新增文件、查免密登录,这五处是后门最集中的位置。
五、总结
日志分析不是等出事了才翻,而应该形成日常机制:每天花五分钟看访问日志 TOP IP 和失败登录记录,配合 fail2ban 自动封禁,大部分入侵在试探阶段就会被拦下。建议把站点日志集中采集(如宝塔日志服务或 ELK),保留 30 天以上,这是还原攻击路径的关键证据。本文由速度网络技术团队整理。如果服务器已经失陷且难以彻底清理,重装系统并配合高防 CDN(如速度网络)是性价比最高的选择。
