nginx日志配合命令行工具可实时定位cc攻击波峰:用tail+awk按秒/分钟统计请求突增,结合ip、状态码交叉验证,用goaccess生成动态趋势图,并通过shell脚本或fail2ban自动告警封禁。

直接用 Nginx 日志配合命令行工具和轻量可视化工具,就能在攻击发生时快速定位异常波峰,不用等监控告警或人工翻日志。
实时抓取并按秒/分钟统计请求突增
CC 攻击常表现为秒级密集请求(比如某秒超 300 次),小时粒度会漏掉。用以下命令实时观察:
- 每秒请求数 Top 10:tail -f /var/log/nginx/access.log | awk '{print $4}' | cut -c 14-21 | sort | uniq -c | sort -nr | head -n 10
- 每分钟请求数 Top 20:tail -f /var/log/nginx/access.log | awk '{print $4}' | cut -c 14-18 | sort | uniq -c | sort -nr | head -n 20
- 加 grep 过滤关键路径更准,例如只看登录接口:tail -f access.log | grep '/login' | ...
结合 IP 和状态码交叉验证真实攻击
单看请求数容易误判(比如 CDN 预热或 JS 批量加载)。要确认是否为 CC,需同步检查:
- 突增时段内,同一 IP 是否高频访问(如 10 秒内 >50 次):awk '$4 ~ /:14:22:/ {print $1}' access.log | sort | uniq -c | sort -nr | head -n 5
- 该时段 403/429/503 错误是否同步飙升——限流生效或后端已过载的信号
- 对比正常时段 UV(独立 IP 数),若 PV 暴涨但 UV 增幅小,大概率是单 IP 刷量或爬虫
用 goaccess 快速生成动态趋势图
适合值班时快速打开网页看全局走势,支持实时刷新:
- 安装后执行:goaccess access.log -a --date-format=%d/%b/%Y --time-format=%H:%M:%S --real-time
- 浏览器打开生成的 HTML,进入 “Hourly Requests” 或 “Top IPs” 标签页
- 可筛选特定日期、状态码(如只看 200)、User-Agent(排除爬虫 UA 后再观察)
自动触发告警的简易联动方式
不依赖复杂平台,用 shell 脚本 + 系统通知也能实现初级实时响应:
- 写一个循环脚本,每 30 秒跑一次秒级统计,发现某秒请求数 >400 就发邮件或写入告警日志
- 配合 Fail2ban:配置 jail,监听 access.log 中 “同一 IP 在 10 秒内访问 /api/login 超过 30 次”,自动调用 iptables 封禁
- 封禁后立刻用 netstat -nat | grep ':80' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head 验证连接数是否回落











