Apache不直接识别CC攻击,但可通过分析日志中404/499/503等状态码突增、单IP高频请求等异常模式实现监控,并结合mod_evasive、ModSecurity自动拦截及GoAccess/ELK可视化告警。

Apache本身不直接识别CC攻击,但可通过分析访问日志中的HTTP状态码分布、请求频率和异常模式,结合工具或脚本实现有效监控。核心思路是:高频404、499、503等非200状态码突增,往往意味着扫描、爬虫或CC攻击正在进行。
关注关键状态码的异常波动
CC攻击常伴随大量无效请求,导致特定状态码集中出现:
- 404 Not Found:攻击者暴力遍历路径(如/wp-admin/、/phpmyadmin/)时大量触发,单IP分钟级出现50+次404需警惕
- 499 Client Closed Request:Nginx特有,但若Apache前置Nginx,该码激增说明客户端频繁中断连接,是典型CC特征
- 503 Service Unavailable:后端超载或限流触发,持续出现可能表明资源已被耗尽
- 200 OK但响应极小(如:配合User-Agent为空或非常规值,可能是自动化工具刷首页
用awk + sort快速筛查异常IP
在Apache默认日志格式下(%h %l %u %t \"%r\" %>s %b),可实时提取高危行为:
统计每分钟各IP的404次数(过去10分钟):
立即学习“Java免费学习笔记(深入)”;
tail -n 5000 /var/log/apache2/access.log | \
awk -F' ' '$9 == 404 {print substr($4,2), $1}' | \
awk '{time=$1; ip=$2; count[time,ip]++}
END {for (key in count) {split(key,a,SUBSEP); print a[1],a[2],count[key]}}' | \
sort -k1,1 -k3,3nr | head -20
输出示例:[01/Jan/2024:14:22:30 192.168.1.100 47,表示该IP在14:22分触发47次404。
结合mod_evasive或mod_security做主动拦截
仅靠日志分析属事后响应,需搭配模块实现自动防御:
-
mod_evasive:配置
DOSSiteCount 50(单站点每秒最多50请求)、DOSSiteInterval 1,超限即返回403并封禁IP 10秒 -
mod_security + CRS规则:启用
REQUEST-912-DOS-PROTECTION规则集,自动检测高频404/400请求并阻断 - 注意:避免误伤搜索引擎爬虫,建议对
User-Agent含Googlebot、Bingbot的请求跳过限制
用GoAccess或ELK做可视化趋势分析
人工查日志效率低,推荐轻量方案:
-
GoAccess:执行
goaccess /var/log/apache2/access.log --log-format=COMBINED --real-time-html,浏览器打开即可查看“HTTP Status Codes”Top图表,点击筛选404/499时段 - Logstash + Kibana:将status字段映射为keyword,设置告警:当“404数量同比昨日同一时段增长300%且持续5分钟”,自动邮件通知
- 关键指标建议监控:每分钟404占比 >15%、单IP每秒请求数 >20、5xx错误率突增至5%以上

















