Postfix maillog 中 connection timed out 和 connection refused 都是连不上对方,区别是什么?分别怎么处理?

35 Postfix maillog 中 connection timed out 和 connection refused 都是连不上对方,区别是什么?分别怎么处理?
本质区别

connection refused = 连接被对方服务器主动拒绝。TCP SYN 包到达了对方主机,但对方的 25 端口没有进程在监听,或防火墙返回了 RST。这是 应用层拒绝
connection timed out = TCP SYN 包发出后未收到任何响应,直到超时。网络路径不通或对方主机对发信 IP 静默丢包。这是 网络层/策略层超时

日志特征

connection refused 日志示例:
connect to mx.example.com[1.2.3.4]:25: Connection refused
→ 通常伴随 status=deferred(4.4.1 或 4.7.1)。
connection timed out 日志示例:
connect to mx.example.com[5.6.7.8]:25: Connection timed out
→ 通常伴随 status=deferred(4.4.2)。

排查步骤

收到 connection refused:
1. 对方防火墙规则过滤了你的 IP——尝试换一个 IP 发信。
2. 对方只开了 25 但没运行 MTA——做 nmap -sV -p 25 mx-host 确认端口完全关闭。
3. 对方只收 TLS 连接但你的 Postfix 未启用 smtp_tls_security_level = may
4. 处理:退信原因明确,确认对方确实不接你这端的邮件后,要么换 relay 要么联系对方管理员。

收到 connection timed out:
1. 防火墙/ACL 实施 drop(丢弃)而非 reject(拒绝)——对方选择静默丢弃你的 SYN 包,让你自己超时,这是许多大邮件服务商(如国内的昆仑邮件系统)的常规反垃圾策略。
2. 路由不可达——mtr mx-host 看最后一跳是否 over 50% 丢包。
3. 处理:确认对方是否在发信白名单或高信誉 IP 列表中。临时方案:smtp_connection_timeout = 30 缩短超时时间,让 Postfix 更快切换到备用 MX。

快速判断总结

refused → 对方知道你的 IP 存在,但选择拒绝 → 查信誉/黑名单/ACL。
timed out → 对方假装你根本不存在 → 查路由/白名单/防火墙 drop 策略。

RFC 5321 §4.5.4.1 · RFC 9293 §3.4 (TCP RST) · RFC 3975