Catch-all 邮箱让服务器接收发往域名的所有邮件,即使收件人不存在。服务器不会以 550 拒绝 typo@yourdomain.com,而是收下邮件。这能挽回拼写错误的地址,也会接收垃圾邮件、钓鱼邮件和目录探测。邮件送达或恢复并无保证。
缺少保护的 catch-all 可能很快损害发件声誉。配置本身不难,困难在于隔离风险并持续运维。
本文介绍适用于 Microsoft 365、Linux 和 Google Workspace 的三种隔离方式。如果仍不确定是否需要,请先阅读域名 catch-all 邮件。
什么是 catch-all 邮箱?
它是接收域名下所有未知地址邮件的单一收件箱。发往 misspelled-name@yourdomain.com 的邮件不被退回,而是在其他投递条件允许时进入指定邮箱。
问题是服务器会接收更多流量。垃圾邮件机器人、钓鱼和自动目录扫描也会得到 250 OK。若不隔离,这些流量会混入正常邮件并可能损害域名声誉。
基本原则:不要路由到主要收件箱
Catch-all 流量可能绕过 Directory-Based Edge Blocking (DBEB),服务器在验证收件人之前就接收内容。将其路由到 ceo@company.com 或其他活跃邮箱会造成安全盲区。
以下方案都遵循同一原则:将 catch-all 流量与生产邮件隔离。
方案 1:隔离池 (Microsoft 365 / Exchange)
适合因法律或电子取证需要保留 catch-all 邮件,又不希望频繁收到通知的组织。保留期限、访问权限和隐私政策仍需单独配置。
工作方式
- 接收 - 服务器接收未知收件人的邮件。
- 标记 - 传输规则识别外部且未发给有效用户的邮件。
- 抑制 - 规则把 Spam Confidence Level (SCL) 设为 9。
- 存储 - 邮件路由到
catchall-sink@yourdomain.com等共享邮箱。
PowerShell 设置
先在 Exchange Admin Center 将域名设为 "Internal Relay",这会停用 DBEB,然后运行:
# Create the sink (shared mailbox - no license needed)
New-Mailbox -Shared -Name "CatchAll Sink" -PrimarySmtpAddress catchall-sink@yourdomain.com
# Create the transport rule
New-TransportRule -Name "Catch-All Routing & Suppression"
-FromScope "NotInOrganization"
-SentTo "catchall-sink@yourdomain.com"
-RedirectMessageTo "catchall-sink@yourdomain.com"
-SetSCL 9
-ExceptIfRecipientBelongsTo "All Valid Users Group"
为什么使用 SCL 9? 若不设置,邮箱会充满通知。SCL 9 将邮件放入垃圾邮件文件夹。应按保留政策定期检查。
方案 2:带标记的邮件流 (Postfix / Linux)
自建 Postfix/Dovecot 时,单独邮箱可能没有必要。可注入标头,再由客户端或 Sieve 规则分类。
工作方式
- 接收 -
luser_relay接收未知本地用户的邮件。 - 修改 - MTA 注入
X-Catch-All: True标头。 - 过滤 - Sieve 将邮件移到专用文件夹。
Postfix 配置
# /etc/postfix/main.cf
# Route unknown local users to a specific alias
luser_relay = catchall_alias
# /etc/postfix/virtual
# Map the alias to a real user
catchall_alias realuser@yourdomain.com
重要:luser_relay 只适用于本地域名。多个虚拟域名应使用带通配符的 virtual_alias_maps:
# /etc/postfix/virtual
@example.com realuser@example.com
同时设置邮件转发时,应确保虚拟映射不冲突。规则重叠是邮件误投的常见原因。
Sieve 过滤器
不要靠人工区分 catch-all 流量,应自动处理:
if header :contains "X-Original-To" "catchall_alias" {
fileinto "Junk/CatchAll";
stop;
}
方案 3:部分通配符 (正则路由)
不需要完整 catch-all 时,可不再接受全部 *@domain.com,而只接受 sales-*@domain.com 等特定模式,其余地址直接拒绝。
工作方式
配置 MTA 或提供商接受匹配正则表达式的地址,例如 sales-webinar@ 和 sales-q1@,同时拒绝 admin@ 或 hr@ 等高风险目标。
Google Workspace 设置
- 前往 Apps > Google Workspace > Gmail > Default Routing。
- 在 Specify Envelope Recipients 下选择 "Pattern Match"。
- 输入正则:
^sales-.*@yourdomain\.com$ - 把信封收件人改为
sales-team@yourdomain.com。
结果:sales-promo@yourdomain.com 会被接收,admin@yourdomain.com 以 550 拒绝。这可显著缩小目录探测攻击面,但不能完全消除。
若地址还要作为邮箱别名使用,可组合部分通配符与别名转发,并检查认证和循环保护。
防止 catch-all 路由循环
路由循环是最危险的故障之一,可能这样发生:
- Catch-all 接收发往
ghost@domain.com的邮件。 - 规则自动转发到
external@gmail.com。 - Gmail 因 SPF/DMARC 失败而拒绝。
- Gmail 将 NDR 退回
ghost@domain.com。 - Catch-all 接收退信。
- 规则再次转发给 Gmail。
- 重复直至超过
MaxHopCount。
您可能看到 5.4.14 Hop count exceeded 或 5.4.6 Routing loop detected。在繁忙域名上,循环会推高发件队列并可能触发垃圾邮件封锁。
预防清单
- 检查标头 - 确保 MTA 遵循
X-Loop和Delivered-To。 - 阻止自动回复 - 让 catch-all 规则跳过带
Auto-Submitted: auto-generated的邮件。 - Microsoft 365 注意事项 - 出站垃圾邮件策略默认阻止外部转发,错误为
5.7.520 Access denied。启用后会增加反向散射风险,应参考最新文档谨慎权衡。
不同提供商的转发风险详见邮箱别名转发指南。
为什么多数 catch-all 设置并非必要
很多企业为了避开按用户收费而开启 catch-all。需要 support@、billing@ 和 jobs@,却不想为 Google 或 Microsoft 的每个用户支付 $18/month 时,它看似是捷径。此价格仅为文中示例,可能变化。
实际上,它会形成技术债务,并可能影响声誉。
替代方案是不按用户收费的提供商。按照本文所述的当前模式,TrekMail 使用共享存储池:
- Nano 套餐 - $0,无须银行卡。
- Starter - $3.50/mo,含 14-day 试用。
- Pro - $10/mo,含 14-day 试用。
- Agency - $23.25/mo,含 14-day 试用。
可把 support@、billing@ 和 jobs@ 创建为真实邮箱或自定义域名别名。正确的目录记录让服务器在边缘用 550 拒绝未知收件人,有助于保护声誉,但不能保证。通常也不再需要传输规则、Sieve 或正则路由。
管理多个域名时,应评估 catch-all 绕行方案的风险。TrekMail 的 catch-all 收件箱可作为安全网,但仍需要正确的 DNS、认证、存储和垃圾邮件策略。
总结
Catch-all 邮箱本身并非坏事,缺少保护才危险。按环境选择隔离方案:Exchange 使用隔离池,Postfix 使用标记流,Workspace 使用部分通配符。不要把 catch-all 与生产邮件混在一起。
也可以选择在合适套餐中能以合理成本创建真实地址的提供商,避开复杂性。决策前请核对最新价格和限制。