如何查看 Cloudflare 分析日志中的具体攻击来源 IP?

文章导读
接入 Cloudflare 后,源站服务器默认看到的 IP 是 Cloudflare 节点 IP。要获取真实攻击者 IP,免费用户主要依赖服务器端日志配置,付费用户可结合 Cloudflare 控制台日志。
📋 目录
  1. A Cloudflare 控制台日志查看(免费 vs 付费)
  2. B 服务器端配置获取真实 IP
  3. C 验证配置是否生效
  4. D 常见坑与排查
  5. E 参考来源
A A

Cloudflare 代理后如何获取真实攻击来源 IP?(含服务器配置)

接入 Cloudflare 后,源站服务器默认看到的 IP 是 Cloudflare 节点 IP。要获取真实攻击者 IP,免费用户主要依赖服务器端日志配置,付费用户可结合 Cloudflare 控制台日志。

先说结论:Cloudflare 代理会隐藏真实 IP,查看攻击来源需结合服务器日志配置和 Cloudflare 日志产品。

  • 免费用户:必须在 Nginx/Apache 中配置信任 Cloudflare IP 段,读取 CF-Connecting-IP 头。
  • 付费用户:可使用 Cloudflare Dashboard 安全事件日志或 Logpush 功能。
  • 关键验证:配置后需确认日志记录的是客户端公网 IP,而非 Cloudflare 节点 IP。

Cloudflare 控制台日志查看(免费 vs 付费)

虽然服务器日志最可靠,但 Cloudflare 控制台也提供部分安全日志。

1. 免费套餐

路径:Dashboard -> Security -> Events

  • 可查看最近的安全事件(如 WAF 拦截、挑战记录)。
  • 限制:历史数据保留时间短(通常 72 小时),无法导出完整原始日志,难以进行深度溯源分析。

2. 付费套餐(Pro/Business/Enterprise)

  • 提供更长的历史数据保留期。
  • 支持 Logpush 功能,可将原始日志推送到自己的存储(如 S3、Splunk),便于长期分析攻击来源。
  • 企业版支持更详细的字段和实时日志流。

鉴于免费套餐限制,建议所有用户均在服务器端配置日志记录。

服务器端配置获取真实 IP

Cloudflare 会在 HTTP 请求头中添加 CF-Connecting-IP 字段。需在 Web 服务器中配置信任 Cloudflare 的 IP 段,才能将该头部的值视为真实客户端 IP。

Nginx 配置方案

httpserver 块中添加以下配置。注意:Cloudflare IP 段会变动,建议定期更新。

set_real_ip_from 173.245.48.0/20;
set_real_ip_from 103.21.244.0/22;
set_real_ip_from 103.22.200.0/22;
set_real_ip_from 103.31.4.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 131.0.72.0/22;
real_ip_header CF-Connecting-IP;

配置完成后执行 nginx -t 验证语法,然后 nginx -s reload 重新加载。

如何查看 Cloudflare 分析日志中的具体攻击来源 IP?

自动更新 Cloudflare IP 段(推荐)

为避免 IP 段过期导致获取失败,可编写脚本定期拉取官方列表:

#!/bin/bash
# 获取 IPv4 列表并转换为 Nginx 格式
curl -s https://www.cloudflare.com/ips-v4 | sed 's/^/set_real_ip_from /;' | sed 's/$/;/' > /etc/nginx/conf.d/cloudflare_real_ip.conf
# 验证并重载
nginx -t && nginx -s reload

建议将此脚本加入 crontab,每周执行一次。

Apache 配置方案

推荐使用 mod_remoteip 模块,而非旧版的 SetEnvIf 方法。

1. 启用模块

a2enmod remoteip

2. 配置信任代理

/etc/apache2/conf-available/remoteip.conf 中添加:

如何查看 Cloudflare 分析日志中的具体攻击来源 IP?
RemoteIPHeader CF-Connecting-IP
RemoteIPInternalProxy 173.245.48.0/20
RemoteIPInternalProxy 103.21.244.0/22
# 需补充完整 Cloudflare IP 段,参考上方 Nginx 列表

3. 修改日志格式

确保 LogFormat 使用 %a(远程 IP)而非 %h(主机 IP):

LogFormat "%a %l %u %t \"%r\" %>s %b" common

重启 Apache 生效:systemctl restart apache2

验证配置是否生效

配置完成后,必须验证日志是否记录了真实 IP。

  1. 本地访问测试:使用本地浏览器访问网站,查看服务器日志。tail -f /var/log/nginx/access.log
  2. IP 对比:日志中的 IP 应为你本地的公网 IP,而非 Cloudflare 节点 IP。
  3. 字段对比:在 Nginx 日志格式中同时记录 $remote_addr$http_cf_connecting_ip。配置生效后,$remote_addr 应自动变为与 $http_cf_connecting_ip 一致。
  4. IP 段查询:使用在线工具查询日志中的 IP 归属,确认不属于 Cloudflare ASN。

如果日志仍显示 Cloudflare IP,检查 set_real_ip_from 是否包含当前请求来源的 CF 节点 IP,或确认域名 DNS 是否已开启橙色云朵代理。

常见坑与排查

坑一:IP 段未更新

Cloudflare 会不定期新增 IP 范围。若配置过旧,新节点请求的真实 IP 将无法提取。务必使用上述自动更新脚本或定期查阅官方文档。

如何查看 Cloudflare 分析日志中的具体攻击来源 IP?

坑二:多层代理场景

若架构中存在其他代理(如负载均衡、其他 CDN),X-Forwarded-For 可能包含多个 IP(client, proxy1, proxy2)。此时 CF-Connecting-IP 通常更可靠,因为它由 Cloudflare 直接注入。

坑三:直接暴露源站 IP

配置日志前,若源站 IP 已泄露,攻击者可能绕过 Cloudflare 直接攻击源站。此时服务器日志记录的将是攻击者真实 IP,但流量未经过 CF 防护。建议更换源站 IP 并严格限制防火墙仅允许 Cloudflare IP 段访问。

坑四:隐私合规

记录真实 IP 涉及用户隐私。在欧盟等地区需符合 GDPR 要求。确保日志保留策略合规,避免无限制存储包含个人信息的日志,必要时对日志中的 IP 进行脱敏处理。

参考来源