
一、为什么必须看日志
很多站长开了 WAF 就再也没看过日志。结果两个问题:一是规则误杀了正常流量,业务受影响却不知道;二是攻击在持续,但规则没配好,一直没拦住。
日志是 WAF 的”体检报告”,定期看才能发现问题和优化方向。
二、日志里的关键字段
| 字段 | 说明 | 重点关注 |
|---|---|---|
| 时间戳 | 请求发生的具体时间 | 攻击是否有周期性 |
| 源 IP | 攻击来源 | 是否集中在少数 IP/网段 |
| 请求方法 | GET/POST 等 | 异常方法(PUT/DELETE) |
| URI | 请求路径 | 被打的是什么页面 |
| 请求头 | UA、Referer 等 | UA 是否伪装 |
| 攻击类型 | 分类标签 | 主要威胁是什么 |
| 命中规则 | 规则 ID 或名称 | 哪条规则在起作用 |
| 处置动作 | 拦截/放行/验证 | 拦截率如何 |
| 响应码 | 403/200/302 等 | 业务是否受影响 |
三、日志分析的五个角度
3.1 时间维度:看趋势
把日志按小时聚合,画个柱状图。正常业务有规律(白天高、夜里低),如果某个时间点突然飙升,就是攻击或异常。
# 统计每小时请求数(源站 Nginx 日志示例)
awk '{print $4}' /www/wwwlogs/access.log | cut -d: -f2 | sort | uniq -c
# 统计每小时的 403(被 WAF 拦)数量
grep " 403 " /www/wwwlogs/access.log | awk '{print $4}' | cut -d: -f2 | sort | uniq -c
3.2 来源维度:看 IP 排行
# 访问量 Top 20 的 IP
awk '{print $1}' /www/wwwlogs/access.log | sort | uniq -c | sort -rn | head -20
# 被拦截 Top 20 的 IP
grep " 403 " /www/wwwlogs/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20
3.3 目标维度:看 URI 排行
# 被访问最多的路径 Top 20
awk '{print $7}' /www/wwwlogs/access.log | sort | uniq -c | sort -rn | head -20
# 关注这些异常路径:
# /wp-login.php → 后台爆破
# /.env → 敏感文件扫描
# /xmlrpc.php → WordPress 接口滥用
# /phpmyadmin → 数据库面板探测
3.4 类型维度:看攻击分类
WAF 控制台通常有”攻击类型分布”图表,一眼看出主要是 SQL 注入、XSS 还是 CC。这直接决定了你该加强哪类防护。
3.5 处置维度:看拦截效果
统计”拦截/总攻击”的比例。如果某类攻击大量是”放行”状态,说明规则没配好,需要调整。
四、U-A 分析:识别攻击者画像
# 统计 UA 分布 Top 20
awk -F'"' '{print $6}' /www/wwwlogs/access.log | sort | uniq -c | sort -rn | head -20
# 可疑 UA 特征:
# python-requests/2.x → Python 脚本
# curl/7.x → 命令行工具
# (空或 -) → 未设置 UA
# Mozilla/4.0 (compatible; MSIE 6.0) → 老掉牙的伪装
五、日志的留存与合规
- 建议留存至少 180 天(等保要求)
- 日志集中存储,避免只存在单台服务器上
- 敏感信息(密码、Token)在日志中做脱敏
- 定期备份,防止攻击者入侵后删日志
- 有条件的话发送到 SIEM/日志平台做关联分析
六、小结
WAF 日志的价值在于”看见”:看见攻击在发生、看见规则在拦截、看见误伤在出现。掌握”时间/来源/目标/类型/处置”五个分析角度,配合几条 awk 命令,就能快速摸清自己站点的安全态势。
