使用zen.spamhaus.org时MTA被拦截,但官网查询IP无异常
解决Sendmail误拦截AWS SES/Outlook等合法MTA的问题
核心原因
你的Sendmail服务器使用公共递归DNS查询Spamhaus ZEN时,被Spamhaus返回了虚假拦截结果——Spamhaus为防止公共DNS滥用其服务,会对未授权的公共DNS请求返回模拟的黑名单记录,导致合法IP被误判。这也是为什么官网查询IP正常,但本地Sendmail拦截的原因。
解决步骤
1. 验证本地DNS查询结果
在你的Sendmail服务器上执行反向DNS查询,确认是否收到错误的黑名单返回:
# 验证被拦截的SES IP dig +short 2.226.251.23.zen.spamhaus.org # 验证被拦截的Outlook IP dig +short 106.41.92.40.zen.spamhaus.org
如果返回127.0.0.2/127.0.0.3等非127.0.0.10/127.0.0.11的结果,说明本地DNS被Spamhaus限制。
2. 修复DNS查询问题
Spamhaus仅允许授权的DNS服务器查询其ZEN列表,你有两种选择:
- 使用Spamhaus授权的公共DNS:将服务器DNS改为
8.141.141.141和8.141.141.142(Spamhaus免费公共DNS,专门用于邮件相关查询) - 配置本地递归DNS:确保你的递归DNS服务器IP未被Spamhaus列入公共DNS黑名单,且仅用于自身邮件流量查询(不对外提供公共DNS服务),符合Spamhaus的使用条款。
3. 确保白名单规则生效
之前access.db白名单无效,大概率是规则执行顺序问题——DNSBL检查在access.db之前执行,导致白名单未被触发。调整sendmail.mc配置:
- 确保
access_db特性在dnsbl特性之前定义:# 先定义access_db白名单 FEATURE(`access_db', `hash -T<TMPF> /etc/mail/access')dnl # 再定义DNSBL检查 FEATURE(`dnsbl',`zen.spamhaus.org')dnl - 在
/etc/mail/access文件中添加需要放行的IP或域名:# AWS SES服务器 e226-2.smtp-out.us-east-2.amazonses.com RELAY 23.251.226.2 RELAY # Outlook服务器 mail-dm6nam10olkn2106.outbound.protection.outlook.com RELAY 40.92.41.106 RELAY - 重新生成access.db并重启Sendmail:
makemap hash /etc/mail/access < /etc/mail/access systemctl restart sendmail
4. 临时应急方案(若DNS问题无法立即解决)
如果需要快速恢复邮件接收,可临时注释掉ZEN的DNSBL配置,改用其他低误判率的DNSBL,或暂时禁用DNSBL检查:
# 注释掉原DNSBL配置 # FEATURE(`dnsbl',`zen.spamhaus.org')dnl
修改后重新编译sendmail.cf并重启服务:
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf systemctl restart sendmail
内容的提问来源于stack exchange,提问作者gerryd
相关产品推荐
相关产品推荐

