被流量攻击后,排查异常请求来源最有效的方法是依次检查Web服务器访问日志、CDN日志和WAF日志,通过分析请求频次、源IP、User-Agent和请求路径的异常模式,可以快速锁定攻击源和攻击类型。 很多站长遇到攻击后第一反应是关服务器,其实日志才是第一手证据,你不需要看完所有记录,只要知道从哪几个维度切入,就能在几分钟内找到线索。
流量攻击后排查日志该从哪入手
日志类型有好几种,优先级不同,行业共识认为,排查顺序应该是:Web服务器访问日志 > CDN日志 > WAF日志 > 系统日志,下面挨个说清楚,每种怎么查、查什么。
Web服务器访问日志是首选战场
Nginx或Apache的access.log记录了每一次请求的完整信息,包括客户端IP、时间、请求方法、URL、状态码、User-Agent、Referer等,攻击流量在这里会留下最直接的痕迹。
关键字段说明:
$remote_addr:实际的客户端IP,如果经过CDN,需要看$http_x_forwarded_for$time_local:请求时间,精确到秒,用来判断流量是否集中在某个时间段$request:请求行,GET /admin.php HTTP/1.1”,观察是否大量请求同一个路径或随机路径$status:状态码,大量404或499说明在扫描或暴力请求$body_bytes_sent:返回体大小,攻击请求通常返回体很小$http_user_agent:浏览器标识,攻击脚本常使用固定UA或空UA
实操步骤:
- 先统计访问量最高的前20个IP:
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20 - 如果某个IP请求数远超其他,比如平时单IP每分钟几十,现在达到几千,直接看这个IP的具体请求:
grep "192.168.1.1" access.log | head -100 - 观察URL和UA是否单一,如果全是同一个UA且URL随机,基本可以确认是攻击源。
日志格式优化建议: 确保日志包含$http_x_forwarded_for,否则CDN场景下记录的都是中间节点IP,Nginx配置示例:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
CDN日志帮你看到真实IP分布
如果网站用了CDN(如Cloudflare、简米云CDN、酷番云CDN),服务器日志里记录的IP大多是CDN节点,真实IP藏在X-Forwarded-For或True-Client-IP里,CDN日志本身会记录请求来源IP、边缘节点、回源信息,是判断攻击是否来自节点分布的关键。
CDN日志分析要点:
- 回源请求比例突然升高,说明缓存失效,攻击可能直接打源站
- 来自某个边缘节点的请求量远高于其他节点,可能是被定向攻击
- 对比CDN日志中的
client_ip和服务器日志中的$http_x_forwarded_for,看是否一致,排除伪造头

命令示例: 下载CDN日志文件后,统计真实IP请求量:
grep -oP 'client_ip="K[^"]+' cdn.log | sort | uniq -c | sort -rn | head -20
WAF日志记录被拦截的攻击样本
WAF(Web应用防火墙)日志会记录被拦截的请求,包括匹配到的规则ID、攻击类型、攻击payload,流量攻击时,WAF日志可能被大量正常请求淹没,但集中分析被拦截部分,能提前发现攻击手法。
重点关注:
- 规则ID命中次数:如果某个规则ID命中量突然暴增,说明攻击者正在尝试特定漏洞
- 攻击类型分布:SQL注入、XSS、命令执行等,帮助判断攻击者意图
- 请求payload:有时能看到攻击者使用的工具特征
异常请求来源分析需要看哪些日志
光知道看哪种日志不够,还得知道从日志里提取哪些特征,异常请求来源分析需要看哪些日志,答案不是单一的,而是组合使用,下面从四个维度教你把日志里的攻击找出来。
请求频率和时间分布是突破口
突发性流量攻击最明显的特点就是请求量短时间内暴增,用日志时间戳拆分到分钟级别,能看到清晰的时间窗口。
操作命令: 提取每分钟请求数
awk '{print $4}' access.log | cut -d: -f1-2 | sort | uniq -c | sort -n
输出类似“145 21/Jan/2026:10:35”,如果某分钟请求数从平时的几十涨到几千,那分钟就是攻击开始点,再结合CDN日志,看哪些IP在那个时间段集中出现。
源IP的分布特征暴露攻击类型
- 如果少量IP贡献了大部分请求,可能是CC攻击或扫描
- 如果大量IP,每个IP请求数不多,但总请求数巨大,很可能是DDoS
- 如果IP集中在同一网段或同一机房,可能是购买云主机发起的攻击
对比技巧: 正常流量IP分布通常符合二八定律,20%的IP贡献80%的请求,攻击流量IP分布更扁平,甚至每个IP请求数都差不多。
User-Agent和Referer是伪装破绽
很多攻击脚本使用固定的UA,Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)”或“python-requests/2.25”,统计UA出现次数:
awk -F" '{print $6}' access.log | sort | uniq -c | sort -rn | head -20
如果前几名UA不是主流浏览器(Chrome、Safari等),且请求量巨大,就是攻击。
Referer也一样,如果大量请求Referer为空或指向一个陌生网站,可能是刷流量,正常用户访问Referer通常来自搜索引擎、外部链接或直接访问。

请求路径和方法暴露攻击意图
攻击者通常会扫描常见漏洞路径,如/admin、/login、/phpmyadmin、/.env等,统计请求路径出现次数:
awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -20
如果某个路径请求量异常高,或者路径是随机字符串(如“/asdf1234”),极可能是攻击。
HTTP方法也要留意,正常用户只用GET和POST,如果出现大量PUT、DELETE、OPTIONS、TRACE,说明有人在做漏洞探测。
如何从日志中定位攻击特征
不同攻击类型在日志里留下的痕迹各有特点,以下四种情况最常见,掌握如何从日志中定位攻击特征,你就能反向判断攻击手段,采取针对性防御。
CC攻击:频率高、目标固定
CC攻击模拟正常用户,但请求频率极高,且通常针对高消耗页面(如搜索接口、报表查询),日志特征:同一IP短时间内请求大量同一URL,状态码多是200,但请求间隔均匀(如每0.1秒一次),UA正常但请求数远超人类极限。
判断方法: 对单个IP统计每秒请求数(QPS),如果超过10且持续几分钟,基本是CC攻击。
DDoS攻击:分布式、流量大
DDoS攻击使用大量僵尸IP,每个IP请求不多,但总量巨大,日志特征:源IP数量极多,分布广泛,请求的URL可能随机或不完整,CDN日志中能看到总请求量飙升,但单个IP在服务器日志中可能只有几十条。
判断方法: 统计日志中唯一IP数量,如果突然从每天几万涨到几十万,且每个IP请求数很少,就是DDoS,此时需要结合CDN或云盾的流量视图确认。
恶意爬虫:UA固定、访问深度异常
恶意爬虫会伪装成浏览器或搜索引擎,但访问深度和频率不对,比如Googlebot正常情况下每天爬几千次,如果突然每小时爬几万次,且爬的都是登录页、后台页面,就是恶意爬虫。
日志特征: UA可能包含“bot”或“spider”但频率异常,或者UA伪装成“Mozilla/5.0”但请求间隔规律,没有人性化访问模式。
扫描和漏洞探测:404居多
扫描器会遍历大量路径,日志中404状态码比例大幅上升,统计404路径:
awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn | head -20
如果前几名都是常见漏洞路径(如“/../”、“/admin/”、“/wp-admin”),就是扫描。
网站被攻击日志分析工具推荐
手动分析虽然有效,但日志量大了不现实,下面推荐几款工具,各有侧重,你可以根据自己情况选择,网站被攻击日志分析工具选对了,能节省不少时间。
GoAccess:轻量级实时分析
GoAccess可以在终端里直接生成交互式报告,安装简单,性能好,支持Nginx、Apache、IIS等格式,统计IP、URL、状态码、访客区域等,还能实时刷新。

使用命令:
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --real-time-html
然后浏览器打开report.html,就能看到各指标的排名和趋势,异常请求一目了然。
ELK Stack:企业级深度分析
Elasticsearch + Logstash + Kibana(ELK)适合日均日志量在GB级以上的网站,Logstash负责解析日志,Elasticsearch负责存储和搜索,Kibana提供可视化仪表盘,你可以设置Dashboard专门监控流量异常,比如按IP聚合请求数,按时间展示QPS曲线,设置阈值告警。
优点: 灵活度高,可以自定义查询;缺点:部署维护成本高,适合有运维团队的情况。
云服务商日志服务
简米云SLS、酷番云CLS、AWS CloudWatch日志服务都支持对日志进行SQL查询,能快速定位异常IP和URL,比如简米云SLS的查询语句:
| SELECT remote_addr, COUNT() as cnt GROUP BY remote_addr ORDER BY cnt DESC LIMIT 20
这些服务还支持告警,当请求量超过阈值时自动通知,适合不想自己搭建工具的用户。
流量攻击日志分析常见问题
日志文件太大,无法直接打开分析怎么办?
用tail -n 1000查看最后1000行,或者用head -n 1000看前1000行,分段排查,如果服务器内存够,用less -N打开,支持翻页搜索,需要统计时,用awk配合sort,即使日志有几十GB,也能通过管道逐步处理,如果实在太大,建议先按时间切割,比如只分析攻击时间段的日志。
没有CDN日志,只有服务器日志,能排查吗?
可以,但需要确认真实IP,如果网站使用了CDN,服务器日志中的IP通常是CDN节点,真实IP在X-Forwarded-For头中,如果日志格式没有记录该头,需要先修改日志格式,然后等待下一次攻击,如果非常紧急,可以联系CDN服务商提供边缘日志,或者直接在CDN控制台查看实时请求统计,据工信部数据,超过60%的网站攻击通过CDN日志能更准确定位源IP。
如何区分正常突发流量和攻击流量?
正常突发流量(如促销活动、热点新闻)通常有规律:请求路径绝大多数是正常页面,IP分布广泛且符合地理分布,UA多样化,Referer来自搜索引擎或社交平台,请求间隔有随机性,攻击流量则表现为:请求路径异常(后台、敏感文件、不存在路径),UA单一或明显异常,IP集中在同一机房或网段,请求间隔过于均匀,状态码404比例高,结合业务历史数据做对比,通常能清晰分开,如果你不确定,可以先用WAF开启拦截模式,看是否影响正常用户,如果影响不大,说明攻击比例高。