Apache访问日志识别DDoS攻击需从时间、IP、请求行为三维度交叉分析:时间上查短时流量突增(如某分钟请求数超日常5–10倍且持续);IP上查来源分散但行为一致(如TOP20 IP请求量相近且占比超40%);行为上查高频简单请求(如单IP秒级多次GET首页、缺失Referer、大量404扫描)。

Apache 访问日志是识别 DDoS 攻击最直接、最可靠的原始依据。关键不在于“有没有大量日志”,而在于从时间、IP、请求行为三个维度交叉识别异常模式。
看时间维度:短时流量突增且持续
DDoS 攻击不是缓慢爬升,而是秒级爆发。用以下命令快速定位异常时段:
- tail -n 10000 /var/log/apache2/access.log | awk '{print $4}' | sort | uniq -c | sort -nr | head -10 —— 统计每分钟请求数,找出峰值分钟
- 若某分钟请求数是日常均值的 5–10 倍以上(例如平时 200 次/分钟,突增至 3000+),且连续多分钟维持高位,高度可疑
- 注意结合系统监控:此时服务器 CPU 或带宽是否同步打满?若日志激增但资源无压力,可能是日志轮转异常或误配置
看 IP 维度:来源分散但行为高度一致
真实用户访问具备多样性;DDoS 流量则呈现“广撒网+单动作”特征:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -20 —— 查看 TOP 访问 IP
- 若前 20 名 IP 请求量相差不大(如都在 80–120 次之间),且总数占当日总请求 40% 以上,大概率是僵尸网络或反射攻击
- 重点排查:大量不同 IP 却在相同秒级内请求同一路径(如全部访问
/或/wp-login.php),这是 HTTP Flood 的典型指纹
看请求行为:高频、简单、无上下文
攻击流量往往绕过浏览器正常逻辑,暴露机械性痕迹:
- grep '"GET /" ' /var/log/apache2/access.log | awk -F' ' '{print $1,$7}' | sort | uniq -c | sort -nr | head -10 —— 看哪些 IP 对首页发起最多 GET
- 单 IP 在 1 秒内出现 ≥5 次请求(正常用户极少超过 1–2 次/秒)
- 请求中缺失或伪造 Referer、User-Agent(如为空、含 “bot”、“crawler”、或明显测试字符串如 “sqlmap”、“nmap”)
- 大量 404 请求指向不存在路径(如
/phpmyadmin/、/shell.php),且来自同一波 IP 段,说明是扫描式攻击前置
联动错误日志交叉验证
仅看 access.log 不够,必须对照 error.log 找出资源耗尽证据:
- 搜索 [client xxx.xxx.xxx.xxx] client denied by server configuration —— 可能是 mod_evasive 已触发拦截
- 查找 server reached MaxRequestWorkers setting 或 connection reset by peer —— 表明连接池或套接字已枯竭
- 若 error.log 中大量出现 PHP Fatal error: Allowed memory size exhausted,说明攻击正触发内存密集型脚本

















