Postfix 邮件转发在不同的发送位置表现不同

Postfix 邮件转发在不同的发送位置表现不同

我正在配置 Ubuntu Server 12.04 上的 Postfix 安装,以将少量邮件从服务器上的特定地址转发到另一个域的特定地址。

$ pwd
/etc/postfix

$ cat main.cf 
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

append_dot_mydomain = no
readme_directory = no

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

myhostname = awsBeta
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = awsBeta, localhost.localdomain, , localhost, someDomain.com
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

virtual_mailbox_domains = someDomain.com
virtual_mailbox_base = /var/mail/vhosts
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000

virtual_alias_domains = someDomain.com
virtual_alias_maps = hash:/etc/postfix/virtual

$ cat virtual
[email protected] [email protected]

$ 

当我登录服务器上的 PHP CLI 解释器发送邮件时,邮件会正确发送到[email protected]。请注意,dotancohen.com是 Google Apps 域,MX 记录托管在 Google 上。

$ php -a
Interactive shell

php > mail('[email protected]','Subject','tMessage', 'From: <[email protected]>');

我可以看到邮件已到达收件[email protected]箱。这说明转发器已正常工作。现在我尝试从桌面的 telnet 提示符执行此操作:

$ telnet mail.someDomain.com 25
Trying x.x.x.x...
Connected to mail.someDomain.com.
Escape character is '^]'.
220 someHostname ESMTP Postfix (Ubuntu)
EHLO dotancohen.com
250-someHostname
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM: [email protected]
250 2.1.0 Ok
RCPT TO: [email protected]
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
From: [email protected]
SUBJECT: Hi, telnet!

This is a second attempt! 
.
250 2.0.0 Ok: queued as 9851E81579
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
$ 

该邮件未送达,我在 Postfix 日志中发现以下内容:

Jul  4 16:02:58 someHostname postfix/smtp[24898]: connect to ASPMX.L.GOOGLE.com[2607:f8b0:400c:c03::1b]:25: Network is unreachable
Jul  4 16:02:58 someHostname postfix/smtp[24898]: 935BC81579: to=<[email protected]>, orig_to=<[email protected]>, relay=ASPMX.L.GOOGLE.com[173.194.75.26]:25, delay=15, delays=15/0.02/0.08/0.15, dsn=2.0.0, status=sent (250 2.0.0 OK 1372953778 d3si1064427vck.0 - gsmtp)

看起来 Google 收到了邮件,但决定(可能是由于 SPF)不发送它。它也不在我的垃圾邮件文件夹中!最后,我尝试从不相关的 Hotmail 帐户向该域名发送电子邮件。这封电子邮件也没有送达,但 Postfix 日志中没有任何内容。

为了完整起见,以下是匿名化的 MX 记录:

$ dig mx someDomain.com
someDomain.com.        1800    IN      MX      10 mail.someDomain.com.

$ dig a mail.someDomain.com
mail.someDomain.   1790    IN      A       x.x.x.x

我可以确认这x.x.x.x实际上是服务器的正确 IP 地址,并且它与我执行 telnet 操作时的地址相同。

为什么来自合法电子邮件帐户(例如 hotmail 帐户)的电子邮件可能无法递送到该[email protected]帐户?

答案1

这一行:

Jul  4 16:02:58 someHostname postfix/smtp[24898]: connect to ASPMX.L.GOOGLE.com[2607:f8b0:400c:c03::1b]:25: Network is unreachable

意味着您通过 telnet 连接到的 SMTP 服务器与 Google 之间存在 ipv6 路由问题2607:f8b0:400c:c03::1b。防火墙当然也可以报告该 ICMP 消息以阻止数据包,但请尝试 ping 它。例如,您可能正在部分或间歇性地进行 ipv6 路由。如果您发现您有时只能 ping 它或根本无法 ping 它并且回复始终告诉您没有路由,则您的上游 ISP(或为您提供 IPv6 路由的人)需要修复他们的路由问题。

端口 25 也可能被阻止。这种情况非常常见;如果您使用 Hurricane Electric 进行 IPv6 连接,除非您明确请求允许,否则他们会阻止端口 25 的传出;大多数 ISP 都是这种情况(因为如果没有这种情况,垃圾邮件发送者就会蜂拥而至,不利于他们的限制性政策开始随处可见,因为他们获得了垃圾邮件天堂的名声)。

这个问题不是由 SPF 或 DKIM 或基于内容的垃圾邮件过滤导致的;这是网络问题。

答案2

问题是端口 25 被防火墙关闭了!我的本地 IP 地址(我所在的位置)已为其打开所有端口,因此我可以通过 telnet 进入。Hotmail 和其他合法电子邮件提供商没有端口 25 访问权限,因此日志文件中没有任何内容!

相关内容