Skip to content

🛡️ Cloudflare

关闭IPV6

bash
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/cfa068f2a1e282a2731ba29a0a24b052/settings/ipv6" \
     -H "X-Auth-Email: y950727@gmail.com" \
     -H "X-Auth-Key: 830419c40277b1cff929397d7c08b2012c2a" \
     -H "Content-Type: application/json" \
     --data '{"value":"off"}'

URL上的地址:

X-Auth-Key:

Email Routing(邮件路由)

Cloudflare Email Routing 可以把一个域名收到的邮件,按规则免费转发到任意已验证的邮箱(比如 Gmail),常用来给域名下的临时地址、分类地址(github@xxx.comfacebook@xxx.com)建一层转发,不用自己搭邮件服务器。前提是这个域名的 DNS 必须托管在 Cloudflare。

开启 Email Routing

  1. Dashboard 进入 Compute(计算)> Email Service(电子邮件服务)> Email Routing
  2. 选择要开启的域名,点击 Onboard Domain(接入域名)
  3. Cloudflare 会自动在这个域名下写入所需的 DNS 记录,不需要手动加。

自动写入的 DNS 记录说明

开启后会自动生成三类记录,理解它们的作用即可,一般不需要手动改:

  • MX 记录:把域名的收信入口指向 Cloudflare 的邮件路由服务器,形如:

    example.com.    MX    XX  amir.mx.cloudflare.net.
    example.com.    MX    XX  linda.mx.cloudflare.net.
    example.com.    MX    XX  isaac.mx.cloudflare.net.

    具体主机名和优先级由 Cloudflare 按当前分配生成,直接以 Dashboard 里实际写入的值为准。

  • SPF TXT 记录:授权 Cloudflare 的服务器代表这个域名收发邮件,值一般是:

    v=spf1 include:_spf.mx.cloudflare.net ~all

    如果域名已经有别的 SPF 记录(比如用了其他邮件服务),要把 include:_spf.mx.cloudflare.net 合并进已有的一条 SPF 记录里,一个域名只能有一条 SPF TXT 记录,多条会导致校验失败。

  • DKIM TXT 记录:给"转发出去"的邮件做签名认证,避免被目标邮箱当成伪造邮件拦截。

DNS 生效一般几分钟到十几分钟(用 Cloudflare 解析的域名很快),跨区域最长可能要等 24 小时。

添加并验证目标转发地址

邮件路由规则只能转发到"已验证"的目标地址,不能直接转发到任意邮箱:

  1. Email Routing > Destination Addresses(目标地址),输入要接收邮件的邮箱(如 Gmail 地址),提交。
  2. 去这个邮箱查收 Cloudflare 发的验证邮件,点击里面的确认链接。
  3. 验证完成前,指向这个地址的所有转发规则都会显示为禁用状态,验证通过后自动启用。

创建自定义地址转发规则

  1. Email Routing > Routing Rules(路由规则)> Create routing rule(创建规则)
  2. 填要匹配的本地部分,比如 support(对应 support@example.com)。
  3. 动作选 Send to email,选择一个已验证的目标地址。
  4. 也可以选 Send to Worker 交给 Worker 处理,或选 Drop 直接丢弃。

规则默认支持 RFC 5233 的子地址(plus addressing):发到 support+abc@example.com 的邮件,会按 support@example.com 这条规则转发,+abc 这段标记会保留在收到的邮件里,方便追踪来源。

Catch-all 兜底规则

Catch-all 是"以上规则都没匹配到时怎么处理"的默认规则,常见两种用法:

  • 兜底转发:把所有没被单独规则匹配到的地址(包括拼错的、没提前建规则的)统一转发到一个邮箱,动作选 Send to email
  • 兜底丢弃:只允许已经明确建了规则的地址收信,其余全部丢弃,动作选 Drop,可以减少这个域名被扫描滥用时收到的垃圾邮件。

Routing Rules 页面底部的 Catch-all 区域配置,同样需要先启用(enabled)才会生效。

用 API 批量管理规则

规则条数多、或者要脚本化管理时,用 API 比 Dashboard 点击更方便。需要账号邮箱 + Global API Key(或者带 Email Routing Rules Write 权限的 API Token)。

查 zone id:

bash
curl -s "https://api.cloudflare.com/client/v4/zones?name=example.com" \
  -H "X-Auth-Email: your@email.com" \
  -H "X-Auth-Key: <GLOBAL_API_KEY>"

创建一条转发规则:

bash
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/email/routing/rules" \
  -H "X-Auth-Email: your@email.com" \
  -H "X-Auth-Key: <GLOBAL_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
        "name": "support 转发到 gmail",
        "matchers": [{"type": "literal", "field": "to", "value": "support@example.com"}],
        "actions": [{"type": "forward", "value": ["dest@gmail.com"]}],
        "enabled": true
      }'

改已有规则用 PUT /zones/<ZONE_ID>/email/routing/rules/<RULE_ID>,body 结构一样;改 catch-all 规则可以直接用固定路径 PUT /zones/<ZONE_ID>/email/routing/rules/catch_all,不用先查 rule id:

bash
curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/email/routing/rules/catch_all" \
  -H "X-Auth-Email: your@email.com" \
  -H "X-Auth-Key: <GLOBAL_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
        "matchers": [{"type": "all"}],
        "actions": [{"type": "forward", "value": ["dest@gmail.com"]}],
        "enabled": true
      }'

列出当前所有规则,确认改动生效:

bash
curl -s "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/email/routing/rules" \
  -H "X-Auth-Email: your@email.com" \
  -H "X-Auth-Key: <GLOBAL_API_KEY>"

常见坑

  • 域名 DNS 必须托管在 Cloudflare,否则 Email Routing 开不了。
  • 目标地址没验证之前,指向它的规则不会生效,别以为规则建了就万事大吉,去邮箱确认验证邮件。
  • 域名已有 SPF 记录时,要合并而不是新增一条,多条 SPF TXT 会导致所有邮件的 SPF 校验失败,包括本来发信正常的服务。
  • Catch-all 默认是关闭且丢弃的,只加了几条自定义规则、没管 catch-all 的话,其余地址的邮件会直接被丢弃而不是报错退信,容易被误以为"邮件路由坏了"。

技术笔记