接入高防后,日志采集必须从“只盯源站”改成“高防侧转发日志+源站回源日志双向核对”,否则你的日志里只剩下高防的回源IP,真实用户IP全部丢失。
很多站点在接入高防 IP 后,第一反应是看业务是否正常、攻击是否挡住,却等到要查攻击来源或做用户行为分析时才发现:日志系统里的客户端地址全变成了类似 103.xx.xx.xx 的高防回源地址,真实的访客 IP 一个也找不回来,这不是高防把日志“吃”了,而是流量路径变了,日志采集的源头和格式没跟着变,下面按权重顺序拆解需要改的地方。
高防改变了日志的“水源”,采集前先搞懂三跳链路
高防 IP 的典型架构是:用户访问 → DNS 解析到高防 IP → 高防机房清洗/转发 → 回源到源站 IP,这时源站侧看到的建立 TCP 连接的一方,不是真实用户,而是高防的转发节点,行业共识认为,只要流量经过高防,源站服务器直接记录的所有 socket 地址都代表“回源节点”,而不是“访问者”。
所以日志采集要跟着改,不是简单地多记一个字段,而是要把采集范围从单一源站,扩展成三条链路:
- 用户到高防段:这段日志通常在高防控制台或者高防的 Syslog 服务里,记录真实客户端 IP、请求特征、命中策略情况。
- 高防到源站段:源站 Web 服务器/负载均衡上的访问日志,记录回源请求时间、回源 IP、URI、状态码。
- 应用层会话段:如果用了 PHP/Java 等后端框架,应用日志里的
$_SERVER['REMOTE_ADDR']同样会被高防 IP 覆盖,需要额外处理。
大多数情况下,后两段在同一个服务器上,但逻辑上必须分开看待,日志采集的第一步,就是确认这三处日志分别去了哪,是否都在同一个 Elasticsearch、Loki 或 ClickHouse 链路里。
接入高防后网站日志怎么查看?先确认两个日志出口
很多运维朋友问“接入高防后网站日志怎么查看”,其实要分两个出口看,一个是高防服务商提供的日志查看入口,比如控制台的攻击日志、DDoS 流量报表;另一个是你自己源站服务器上的 /var/log/nginx/access.log 或者 IIS 日志,两个出口时间粒度不同,高防侧通常有 1-2 分钟延迟,源站侧接近实时。
正确的查看方式是:先看源站日志里有没有大量来自高防回源网段的请求(一般服务商会提供回源 IP 段列表),如果有,说明转发正常;再看高防侧日志里真实客户端 IP 的请求分布,两边时间戳相加,才能还原完整请求轨迹。

高防侧日志用于查攻击来源,源站侧日志用于查业务异常,两者不能互相替代。
高防回源IP查询与日志归属判断
源站日志里出现的高防回源 IP,不是随机的,服务商通常在控制台“回源设置”或工单文档里给出具体 IP 段,你需要把这些回源段单拎出来,做一个 IP 到归属地的映射表,这样以后看到日志里某个 IP 在疯狂刷请求,先判断它是不是回源节点,避免误封高防。
判断日志归属还有一个简单方法:对比源站日志和 CDN/高防日志的请求时刻,如果源站日志的请求时间和高防日志的请求时间几乎同步(相差几十毫秒),则这个请求是正常转发;如果源站日志里有大量高防回源 IP 但高防侧没有对应记录,说明可能是有人绕过高防直接回源,或者有人伪造了高防 IP 扫描源站。
日志格式必须增加“转发链路”字段,否则数据白采
接入高防后,单纯在 Nginx 里 log_format 加上 $http_x_forwarded_for 是不够的,因为你不知道这个 XFF 值是高防加的还是用户自己伪造的,高防服务商会通过特定请求头部传递真实客户端 IP,比如常见的 X-Forwarded-For、X-Real-IP、Cdn-Src-Ip,有的还会自定义如 X-Tencent-Src-IP 之类的头。
你必须先确认高防官方文档里推荐的头部字段,再修改日志格式,下面是通用 Nginx 配置示例(假设高防通过 X-Forwarded-For 传递真实 IP):
log_format logfmt '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$upstream_addr $request_time';
access_log /var/log/nginx/access.log logfmt;
同时要在 server 或 http 块里设置set_real_ip_from,只信任高防回源段的 IP 改写真实地址:
set_real_ip_from 1.2.3.4/32; # 高防回源IP段
real_ip_header X-Forwarded-For;
real_ip_recursive on;
注意:如果你用了多层转发(高防 → 云负载均衡 → Nginx),set_real_ip_from 要包含所有内部转发层的 IP,否则拿到的还是倒数第二跳的地址。
高防日志分析工具选型:日志清洗比采集更费神
采集到原始日志后,下一步是清洗和可视化,不少团队直接用 ELK 或 Loki 接全量日志,但高防场景下日志量会因攻击流量而暴涨,一个 5 秒的 CC 攻击可能产生几千万个请求日志,如果你的分析工具不能按“高防回源标记”快速过滤,查询会卡死。

业内专家指出,高防日志分析要优先做两步清洗:第一步过滤掉高防回源节点的健康检查请求(比如每个 30 秒一次的 /check.html);第二步按 status code + request_time 把攻击特征日志和正常业务日志分开,推荐使用 Logstash 或 Vector 的 filter 插件,直接在高防回源 IP 段字段上打 is_from_highdefense: true
| 维度 | 源站日志(回源流量) | 高防侧日志(攻击/正常流量) |
|---|---|---|
| 客户端IP | 显示高防回源IP | 显示真实用户IP |
| 用途 | 排查源站性能、业务错误 | 溯源攻击者、配置策略 |
| 保留时长 | 按业务合规要求,通常30天 | 高防平台一般只存7天,需自行拉取 |
| 常见格式 | Nginx/Apache默认格式 | Syslog / JSON / HTTP推送 |
高防拉日志后,源站的日志轮转和存储也要跟着扩容
很多源站部署了 Logrotate 或按天切割,接入高防后发现日志文件体积突然翻了几倍因为所有请求都经过高防多了一次回源转发,加上攻击流量被清洗后回源的正常请求才会到源站,但攻击一旦绕过清洗策略,源站日志量会瞬间冲高,建议提前把日志切割策略从“按天”改成“按小时+按大小双重切割”,比如每天 0 点切一个整文件,每个文件超过 200MB 立即切分。
存储扩容时,要优先考虑索引性能而非容量,用 Elasticsearch 的场景下,给高防日志单独建索引模板,分片数按照节点数×1.5 设计,禁用 _source 里的 message 字段全文索引,只保留 keyword 字段,否则日志量上来后,Kibana 搜索会卡到怀疑人生。
高防IDC托管场景下,日志采集要物理旁路还是拉流?
如果你的业务本来就在高防 IDC,也就是常说的高防机房,那么端口镜像是最省事的采集方式,但大多数云高防或高防 IP 产品不支持镜像,只能通过高防服务商提供的 Syslog 或私有 API 拉取日志。拉流有个坑:高防日志接口通常带分页限制,比如每页最大 5000 条,拉取时如果频率太低,日志可能被覆盖,建议写个定时任务每 5 分钟拉一次,存到本地 Kafka 或 MQ,再消费入数仓。
纯 IDC 自建高防(用 BGP 引流)的话,在核心交换机上做 RSPAN 镜像,把去往源站的流量一并采集,NIDS 和日志系统同时消耗镜像流量,这种方式能记录到最原始的数据包,但无法解析高防内部清洗策略的命中记录,所以还是要额外对接高防设备的日志接口。

接入高防后日志时间戳与时区配置容易遗漏
高防转发节点通常分布在多个地域,默认用协调世界时记录日志,而源站服务器可能用的是北京时间,两边日志一拼,时间轴错位,分析攻击链时前后差 8 小时,基本没法对齐,务必在日志采集解析阶段统一转成 UNIX 时间戳,或统一为某个固定时区,尤其是使用 Fluentd 或 Filebeat 时,要把 timezone 参数显式写清楚,不要依赖系统默认值。
关于高防日志采集的常见问题
Q1:接入高防后,源站日志里全是回源 IP,还能不能改回真实用户 IP?
能,前提是必须信任高防回源 IP 段,通过 set_real_ip_from 和 real_ip_header 指令让 Nginx 或 Apache 用代理级头部覆盖 remote_addr,如果高防自定义了头部,X-Ali-Real-Src-IP,则 real_ip_header 要改成对应字段名,该方法在 LVS+Keepalived 四层高防下无效,因为四层转发不修改 TCP 载荷,除非高防通过 TCP option 传递真实 IP,否则只能靠 JS 采集或应用层会话存储来间接获取。
Q2:高防控制台里显示的日志和源站日志对不上,正常吗?
正常,高防侧记录的是“从用户到高防”的数据,源站侧记录的是“高防到源站”的数据,两者存在毫秒级时间差,且源站侧比高防侧少了一些被高防直接丢弃的请求(比如协议畸形、CC 攻击拦截、黑名单匹配),如果你发现源站侧的请求数量多于高防侧,通常是有人绕过高防直接访问源站 IP,需要检查源站安全组是否只放行高防回源段。
Q3:日志采集改了之后,如何验证真实 IP 已经生效?
用一条带 ?test=1 的链接,在浏览器访问域名,然后立刻去源站日志里查 test=1 对应的记录。remote_addr 显示的是你本机出口 IP,而非高防回源 IP,则配置生效,如果显示的还是高防 IP,检查 set_real_ip_from 段是否覆盖所有回源节点,或者高防是否启用了分片包转发,同时对比高防控制台实时会话里的源 IP,两边一致的瞬间,日志采集才算真正符合需求。
高防接入后的日志采集,本质是从“信任直连”转向“信任链路”,把握好真实客户端 IP 的透传与记录,把高防侧和源站侧日志作为同一事件的两面去关联,后续的攻击溯源和业务分析才不会抓瞎。