跳转到内容
搜索文档

Logpush 专用出口 IP

最后更新 查看 MarkdownAgent 设置

本指南涵盖 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 目标。

1. 预配专用出口 IP 池

  1. 与你的 Cloudflare 客户团队协作,为你的 zone 购买 Dedicated CDN Egress IPs

  2. (可选但推荐)申请两个 IP——一个在 PDX-B,一个在 SJC-A——以确保跨区域覆盖。

  3. 预配完成后确认 Pool ID。

2. 配置 zone

  1. 为专用出口 IP 池注册或使用现有 zone。
  2. 联系你的客户团队获取专用出口 IP 池的 ID。
  3. 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
Edit zone settingbash
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>"
		}
	}'

3. 代理 zone 设置

  1. 在你的 zone 中添加 DNS 记录(CNAME 或 A/AAAA),Target(目标) 为 HTTP 目标端点。
在 Cloudflare 仪表板中创建 DNS 记录以定义 HTTP 目标端点
  1. 如有需要,配置 origin rules 以指定自定义端口。若你的目标仅在非标准端口(例如 12345)上接受流量,这会很有用。你可以将 logpush.yourdestinationendpoint.com(无需指定端口,因为 Cloudflare 默认仅代理 HTTP/HTTPS 端口上的流量)代理到 yourdestinationendpoint.com:12345

4. 配置 Logpush

  1. 使用以下详情创建 Logpush 作业:
  • Destination: HTTP
  • Endpoint: 使用已设置的域名/路径(Cloudflare 仪表板会自动验证目标)。使用 DNS 记录 Name 部分中指定的服务器名称。在本例中为 logpush.yourdestionationendpoint.com
在 Cloudflare 仪表板中创建 Logpush 作业时输入目标详情
  • Configuration: 选择数据集、作业名称、过滤器与字段。更多详情请参阅 Logpush 文档
  1. 检查目标以确认是否收到日志。

5. 保护你的代理 zone 端点

代理 zone 主机名可公开解析,但流量会经过 Cloudflare 边缘,你可以在此应用安全控制。请使用以下最佳实践保护端点。

添加带 WAF 校验的密钥请求头

在 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

添加基于 ASN 的过滤

为纵深防御,添加一条规则,仅允许来自 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

在高安全环境中使用 Access Service Tokens

如需更强认证,请使用 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 事件以确保未授权请求被阻止。

这篇文档对您有帮助吗?