Postfix 无法接收外部邮件

Postfix 无法接收外部邮件

我正在尝试设置一个邮件服务器来接收电子邮件,并且我在具有弹性 IP 的 Ubuntu EC2 实例上使用 Postfix,并且反向 DNS 查找指向我的域。

我可以在本地帐户之间发送和接收电子邮件,但无法接收外部电子邮件。

我已经设置了 MX 记录,并且能够顺利通过 telnet 连接到端口 25,但我仍然怀疑我的 MX 记录是否正确



A   mail.example.in     123.123.3.11 (delete)       300         2010-10-12 03:37:24
A   example.in          123.123.3.11 (delete)       300         2010-10-11 04:34:53
MX  example.in          mail.example.in (delete)    300     10  2010-10-12 02:03:03
A   www.example.in      123.123.3.11 (delete)       300         2010-10-11 04:34:15
MX  www.example.in      mail.example.in (delete)    300     10  2010-10-12 02:12:51

netstat -nl 给了我

 
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:3306             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:110                0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:143                0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:2000               0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80                 0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22                 0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:25                 0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:993                0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:995                0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                            :::*                          LISTEN     
tcp6       0      0 :::25                            :::*                          LISTEN     
udp        0      0.0.0.0:68                   0.0.0.0:*

我的 /etc/postfix/main.cf 如下所示


smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file = /etc/ssl/certs/ssl-mail.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-mail.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

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = www.example.in
mydomain = example.in
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $mydomain
mydestination = $myhostname,localhost.$mydomain, localhost, $mydomain
relayhost =
#mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mynetworks_style = host
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

local_recipient_maps =
virtual_alias_domains =  www.example.in

virtual_alias_maps = hash:/etc/postfix/virtual
inet_protocols = all
home_mailbox = Maildir/
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth
smtpd_sasl_authenticated_header = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = reject_unknown_sender_domain, reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sender_restrictions = reject_unknown_sender_domain
mailbox_command = /usr/lib/dovecot/deliver -c /etc/dovecot/conf.d/01-dovecot-postfix.conf -n -m "${EXTENSION}"
smtp_use_tls = yes
smtpd_tls_received_header = yes
smtpd_tls_mandatory_protocols = SSLv3, TLSv1
smtpd_tls_mandatory_ciphers = medium
smtpd_tls_auth_only = yes
tls_random_source = dev:/dev/urandom

没有看到邮件实际到达我的服务器的日志,并且 /var/log/syslog 中没有详细信息

我确信我遗漏了一些基本的东西,并希望得到一些关于如何进行设置的帮助。

我在 /etc/postfix/virtual 中设置了一个 catch all id,它适用于本地电子邮件。我打算使用 ruby​​ 来处理收到的邮件,但我一直无法启动和运行它。

我的邮件不断收到以下消息

这是一个自动生成的传送状态通知

这仅是一个警告信息。

你不用重新发送你的讯息。

传递到下列收件人已被推迟:

消息将在两天后重试

暂时故障的技术细节:
收件人服务器未接受我们的连接请求。详情请访问 http://mail.google.com/support/bin/answer.py?answer=7720
[mail.example.in. (10): 连接超时]

提前致谢

答案1

如果您可以通过 IP 从网络外部访问服务器,那么您的 MX 记录肯定有问题。在 Google 上搜索开放中继测试器,将您的 IP 放入其中,看看它是否能够连接到服务器。

连接超时通常是由以下两种情况之一导致的:防火墙吞噬了连接(可能是服务器本身或网络防火墙),或者 IP 地址错误并指向未使用的地址,没有任何东西可以拒绝连接。请注意,如果您刚刚更改了 DNS 配置,则根据您的 DNS 记录告诉每个人缓存查找结果的时间长短,他们可能仍在使用旧信息一段时间。

如果 IP 位于你的网络之外并且距离您设置的时间已经过去很久,DNS 缓存已经更新,那么如果没有真实信息,找出 MX 记录的问题并不容易。MX 记录的唯一规则是:
1) MX 记录必须包含主机名(而非 IP)和
2) 主机名必须具有包含其 IP 的 A 记录(而非 CNAME)
大多数邮件服务器会识别完全无效的 MX 记录,并退回邮件并显示一条消息。

最好的办法是使用dig MX example.in应该产生类似

;; ANSWER SECTION:
example.in.      6400    IN    MX   mail.example.in.

然后dig A mail.example.in应该说类似

;; ANSWER SECTION:
mail.example.in.   6400  IN    A    xxx.xxx.xxx.xxx

我能想到的唯一其他事情是,在您粘贴的匿名示例 DNS 配置中,主机名中缺少终止符“。”,但我不知道这是由于您的搜索和替换,还是因为粘贴来自某种 Web 编辑器,该编辑器可能隐藏了这些终止符“。”。您粘贴的退回邮件使用了“mail.example.in。”,所以我怀疑它只是被隐藏了。

如果 IP 在你的网络之外不起作用那么您需要检查服务器防火墙(Linux 上的 iptables)以确保它没有阻止连接。如果您可以从网络中的另一台机器进行连接,则该端口要么被网络防火墙/路由器阻止,要么您的 ISP 阻止了 SMTP。

另外,请确保您的 Elastic IP 与您的实例正确关联。根据此处的文档,这看起来是一个相当复杂的操作:http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1346

答案2

您说您对 MX 记录有疑问。如果不知道域名,检查它们并不容易,但请尝试dig MX yourdomain.com查看结果。如果那不是您的服务器的 IP,那就是您的问题。

如果您知道您的 MX 是正确的,那么接下来我要尝试的不仅仅是远程登录到端口 25,而是实际使用 telnet 推送邮件消息。SMTP 协议对极客直接输入命令非常宽容。RFC 821 包含该协议的详细信息;您只需发送 EHLO,然后告诉它您要向谁发送邮件、邮件来自哪个地址,然后发送 DATA 开始发送文本;以一行中的 . 结尾,它应该会接受该消息或向您发送错误消息。

不过,我自己还是押注 MX 唱片。

相关内容