真正有用的安全报表需聚焦异常行为、可疑请求和攻击痕迹,将日志转化为“安全哨兵”;识别高风险路径如/wp-login.php、/admin/login等,用awk和grep筛查高频错误登录及sql注入、路径遍历特征。

要构建真正有用的安全报表,不能只看访问量或热门页面,得聚焦异常行为、可疑请求和潜在攻击痕迹。核心是把日志从“记录工具”变成“安全哨兵”。
识别高风险请求模式
攻击者常通过特定路径试探漏洞,比如扫描 WordPress 后台、尝试常见 CMS 的默认管理入口、反复请求 /wp-login.php 或 /admin/login 等。用以下命令快速筛查:
- 高频错误登录尝试:`awk '$9 ~ /^401$|^403$/ && $7 ~ /login|wp-login|admin/ {print $1, $7, $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10`
- SQL注入/路径遍历特征:`grep -E "(union\s+select|sleep\(|%2e%2e%2f|%00|<script awk sort uniq> <li><strong>大量 404 请求来自同一 IP:`awk '$9 == "404" {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10`</script>
提取并标记可疑客户端行为
单纯看 IP 不够,需结合 User-Agent、Referer 和请求频率交叉判断。例如无头浏览器(如 HeadlessChrome)、扫描器(Nikto、sqlmap)或明显伪造的 UA 字符串,都应纳入关注名单:
- 用 `awk '$12 ~ /sqlmap|nikto|dirbuster|masscan/ || $12 ~ /HeadlessChrome|python-requests|curl.*libwww-perl/ {print $1, $12, $7}' /var/log/nginx/access.log` 捕获已知工具指纹
- 对没有 Referer 却直接访问敏感路径(如 /api/user/delete)的请求做标记:`awk '$11 == "\"-\"" && $7 ~ /delete|drop|exec|shell/ {print $0}' /var/log/nginx/access.log`
生成结构化安全摘要(可直接用于值班通报)
避免手动翻日志,用一条命令输出当日关键安全指标:
- Top 5 攻击源 IP:`awk '$9 >= 400 {print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -5`
- 4xx/5xx 错误占比:`awk '{s+=$9} END {print "总请求数:" NR ", 错误率:" (NR-s)/NR*100 "%"}' /var/log/nginx/access.log`
- 异常 UA 出现场次:`awk '$12 ~ /sqlmap|nmap|gobuster/ {c++} END {print "扫描工具出现次数:" c+0}' /var/log/nginx/access.log`
进阶:用 Python 脚本自动归类并导出 Excel
当需要长期跟踪或对接 SOC 平台时,建议用 Python 做轻量级自动化:
- 用正则解析日志行,提取 IP、时间、URL、状态码、UA
- 定义规则库:如 “UA 包含 sqlmap 且状态码为 200” → 标记为「疑似 SQL 注入探测」
- 按风险等级(低/中/高)分类,统计每类数量,并导出为 Excel 表格,含超链接跳转原始日志行
- 示例字段:IP|风险类型|首次出现时间|关联 URL|原始日志片段
不复杂但容易忽略:安全报表的价值不在美观,而在可操作性——每条结论都应能对应到封禁 IP、加固路径或更新 WAF 规则的具体动作。











