本指南涵盖 Dedicated CDN Egress IPs 以及 Logpush 配置与测试说明,以便使用固定的专用出口 IP 启用日志投递。
要使用带有专用出口 IP 的 Logpush,你需要拥有带 Dedicated CDN Egress IPs 的 Smart Shield Advanced(原称 Aegis)。请注意,Dedicated CDN Egress IPs 池与 zone 关联,而非与账户关联。要使用带专用 IP 的 Logpush,流量必须路由到单个 zone。
总体方法是让你的 Logpush 作业通过启用了 Dedicated CDN Egress IPs 的 Cloudflare zone 代理 Logpush 数据,再发送到期望的目标。这样,你的目标仅需将代理 zone 已预配的专用出口 IP 加入允许列表。
作为前提条件,你需要创建专用 zone 或使用现有 zone。若使用现有 zone,请注意该 zone 的出口将被限制为 Dedicated CDN Egress IPs。请确保使用该 zone 的所有服务不会受到影响。
建议使用单独的专用 zone 作为代理,以避免影响生产系统。若选择创建新 zone,请按照步骤 向 Cloudflare 注册新域名。
以下示例展示如何设置 Logpush 与 Dedicated CDN Egress IPs 以代理 HTTPS 目标,但由于所有受支持的 Logpush 目标底层都使用 HTTP 协议,代理应适用于任何受支持的 Logpush 目标。
-
与你的 Cloudflare 客户团队协作,为你的 zone 购买 Dedicated CDN Egress IPs。
-
(可选但推荐)申请两个 IP——一个在 PDX-B,一个在 SJC-A——以确保跨区域覆盖。
-
预配完成后确认 Pool ID。
- 为专用出口 IP 池注册或使用现有 zone。
- 联系你的客户团队获取专用出口 IP 池的 ID。
- 向 Edit Zone Setting 端点发送
PATCH请求:
- 在 URL 中将 setting ID 指定为
aegis。 - 在请求体中将
enabled设为true,并将上一步的 ID 用作pool_id。
Required API token permissions
At least one of the following token permissions is required:Zone Settings Write
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/settings/aegis" \
--request PATCH \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"id": "aegis",
"value": {
"enabled": true,
"pool_id": "<YOUR_EGRESS_POOL_ID>"
}
}'- 在你的 zone 中添加 DNS 记录(CNAME 或 A/AAAA),Target(目标) 为 HTTP 目标端点。
- 如有需要,配置 origin rules 以指定自定义端口。若你的目标仅在非标准端口(例如
12345)上接受流量,这会很有用。你可以将logpush.yourdestinationendpoint.com(无需指定端口,因为 Cloudflare 默认仅代理 HTTP/HTTPS 端口上的流量)代理到yourdestinationendpoint.com:12345。
- 使用以下详情创建 Logpush 作业:
- Destination: HTTP
- Endpoint: 使用已设置的域名/路径(Cloudflare 仪表板会自动验证目标)。使用 DNS 记录 Name 部分中指定的服务器名称。在本例中为
logpush.yourdestionationendpoint.com。
- Configuration: 选择数据集、作业名称、过滤器与字段。更多详情请参阅 Logpush 文档。
- 检查目标以确认是否收到日志。
代理 zone 主机名可公开解析,但流量会经过 Cloudflare 边缘,你可以在此应用安全控制。请使用以下最佳实践保护端点。
在 Logpush 作业中添加密钥 token 作为 HTTP 请求头,然后创建 WAF 规则以阻止没有该密钥的请求。这是大多数部署的推荐方法。
使用密钥请求头配置 Logpush
任何以 header_ 开头的 URL 参数都会成为请求中的 HTTP 请求头。创建或更新 Logpush 作业时,将密钥请求头添加到目标 URL:
https://logpush.yourdestinationendpoint.com?header_X-Logpush-Secret=YOUR_RANDOM_SECRET_TOKEN使用 openssl rand -hex 32 生成强随机 token。
创建 WAF custom rule
在代理 zone 中,前往 Security(安全) > WAF > Custom rules(自定义规则),创建一条规则,阻止没有正确密钥请求头的请求。
- Expression:
(http.host eq "logpush.yourdestinationendpoint.com" and all(http.request.headers["x-logpush-secret"][*] ne "YOUR_RANDOM_SECRET_TOKEN")) - Action: Block
为纵深防御,添加一条规则,仅允许来自 Cloudflare ASN 的流量。Logpush 流量源自 Cloudflare 网络(ASN 13335、132892 或 202623)。
- Expression:
(http.host eq "logpush.yourdestinationendpoint.com" and not ip.geoip.asnum in {13335 132892 202623}) - Action: Block
如需更强认证,请使用 Cloudflare Access Service Tokens 进行机器对机器认证。在 Zero Trust 仪表板中创建 Service Token,然后使用 Access 请求头配置 Logpush:
https://logpush.yourdestinationendpoint.com?header_CF-Access-Client-Id=YOUR_CLIENT_ID&header_CF-Access-Client-Secret=YOUR_CLIENT_SECRET测试你的 WAF 规则是否阻止未授权请求:
$ curl https://logpush.yourdestinationendpoint.com
# Expected: error code: 1020
$ curl -H "X-Logpush-Secret: wrong-token" https://logpush.yourdestinationendpoint.com
# Expected: error code: 1020检查代理 zone 的 Cloudflare Analytics,确认 Logpush 流量正在流动,并监控 WAF 事件以确保未授权请求被阻止。