Postfix邮件转发行为不同于不同的发送位置

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

$ 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] $ 

当我login到服务器上的PHP CLI解释器发送邮件时,邮件被正确地传送到[email protected] 。 请注意, dotancohen.com是一个Google Apps域,MXlogging托pipe在Google。

 $ php -a Interactive shell php > mail('[email protected]','Subject','tMessage', 'From: <[email protected]>'); 

我可以看到邮件已经到达[email protected]收件箱。 这告诉我,货代工作。 现在我尝试从我的桌面的telnet提示符:

 $ telnet mail.someDomain.com 25 Trying xxxx.. 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. $ 

这封邮件未送达,我在后缀日志中find以下内容:

 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) 

这看起来像谷歌得到的邮件,但决定(可能是由于SPF)不交付。 这不是在我的垃圾邮件文件夹! 最后,我尝试通过电子邮件从一个不相关的Hotmail帐户的域名。 这封电子邮件也没有交付,但Postfix日志中没有任何内容。

为了完整起见,这里是未经处理的MXlogging:

 $ dig mx someDomain.com someDomain.com. 1800 IN MX 10 mail.someDomain.com. $ dig a mail.someDomain.com mail.someDomain. 1790 IN A xxxx 

我可以确认xxxx实际上是服务器的正确IP地址,而且是我做telnet的地址。

为什么合法的电子邮件帐户(如hotmail帐户)的电子邮件不能传送到[email protected]帐户?

这一行:

 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上的2607:f8b0:400c:c03::1b之间存在ipv6路由问题。 防火墙当然也可以报告这个ICMP消息,作为阻止数据包的一种方式,但是可以尝试ping它。 例如,你可能有部分或者间歇的ipv6路由正在进行。 如果你发现只能ping通,或者根本ping不通,答复一直告诉你没有路由,你的上游ISP(或者提供给你IPv6路由的任何人)需要解决他们的路由问题。

端口25阻塞正在进行。 这是非常普遍的; 如果您使用飓风电力进行IPv6连接,则会阻止端口25传出,除非您明确要求允许它; 大多数互联网服务提供商(因为没有这种情况,垃圾邮件发送者涌向他们,而不喜欢他们的限制性政策开始在各地涌现,因为他们被誉为垃圾邮件天堂)。

此问题不是由SPF或DKIM或基于内容的垃圾邮件过滤引起的; 这是一个networking问题。

问题是25号港口被挡住了! 我的本地IP地址(我坐的地方)已经打开了所有的端口,所以我可以telnet进来.Hotmail和其他合法的电子邮件提供商没有端口25的访问权限,因此日志文件中没有任何内容!