You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postfix白名单不生效,已加白IP/域名仍触发450主机名拒收错误如何解决

问题原因分析

1. 白名单未生效的核心原因

Postfix的SMTP校验是按阶段顺序执行的,优先级从高到低为:连接阶段(smtpd_client_restrictions) → HELO阶段(smtpd_helo_restrictions) → 发件人阶段(smtpd_sender_restrictions) → 收件人阶段(smtpd_recipient_restrictions)。你现在的sender_whitelist仅配置在发件人、收件人校验阶段,但你遇到的两个报错分别触发于更早的连接阶段、HELO阶段,校验被拦截时还没有走到发件人白名单的匹配逻辑,所以白名单不生效。

  • 错误1450 4.7.25 Client host rejected:触发自smtpd_client_restrictions中的reject_unknown_client规则,校验客户端IP反解域名时失败直接拦截
  • 错误2450 4.7.1 Helo command rejected:触发自smtpd_helo_restrictions中的reject_unknown_helo_hostname等规则,校验HELO传入的域名有效性失败直接拦截

2. 规则执行逻辑认知验证

你的认知是正确的:Postfix单个阶段内的规则确实是从上到下顺序匹配,匹配到动作指令(OK/REJECT等)就直接执行,不会继续匹配后续同阶段规则,只有无匹配时才会向下执行。但你忽略了不同阶段的规则是按阶段顺序独立执行的,前序阶段的拦截优先级远高于后序阶段的放行规则。

解决方案(无需删除现有校验规则)

你只需要把白名单规则提前加到对应触发报错的阶段即可:

步骤1:修改main.cf配置

调整客户端校验规则,提前匹配白名单IP

smtpd_client_restrictions = 
  permit_mynetworks,
  permit_sasl_authenticated,
  # 新增:先匹配白名单里的IP,匹配就放行
  check_client_access hash:/etc/postfix/sender_whitelist,
  reject_unknown_client

调整HELO校验规则,提前匹配白名单域名

smtpd_helo_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  check_helo_access pcre:/etc/postfix/helo_access,
  # 新增:先匹配白名单里的HELO域名,匹配就放行
  check_helo_access hash:/etc/postfix/sender_whitelist,
  reject_non_fqdn_helo_hostname,
  reject_invalid_hostname,
  reject_unknown_helo_hostname

步骤2:生效配置

每次修改sender_whitelist后都要执行以下命令生成hash索引,再重载Postfix配置:

postmap /etc/postfix/sender_whitelist
postfix reload
注意事项

如果部分发件方的HELO域名、连接IP和发件人域名不一致,需要确认你已经把对应发件方的实际连接IP、实际HELO域名都加到了sender_whitelist中,避免遗漏匹配项。

内容的提问来源于stack exchange,提问作者Gani Karaoğlu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:36:04