postfix 邮件到中继主机被退回 dsn=5.0.0:如何调试?

postfix 邮件到中继主机被退回 dsn=5.0.0:如何调试?

Postfix 向中继主机发送邮件,但中继主机反弹并显示 dsn=5.0.0 且没有进一步的详细信息。

问:我该如何详细调试才能找出错误所在?

设置:

smtp-客户端.test.com:这是我安装了 Postfix 和 Debian 10 的测试服务器。此测试服务器模拟了托管公司网站的情况,它应该能够发送由脚本生成的电子邮件。因此没有用户电子邮件。只有此服务器上的脚本生成的出站电子邮件。Postfix 将这些电子邮件转发到以下 smtp 服务器:

中继主机.test.com:这是托管服务的服务器空间。这现在是测试服务器,但在生产中它将充当公司邮件服务器。它使用 TLS 在端口 587 上接受 smtp 流量。(例如,使用 Thunderbird 时,此服务器可以毫无问题地在端口 587 上用作 smtp 服务器)。

问题:postfix 配置为将邮件发送到中继主机,但中继主机将电子邮件退回,并显示 dsn=5.0.0 status=bounced,且没有任何进一步的详细信息。

所有设置在 /etc/postfix/main.cf

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

append_dot_mydomain = no

readme_directory = no

compatibility_level = 2

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

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

myhostname = test.mydomain.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, testX.novalocal, localhost.novalocal, localhost
relayhost = [relayhost.test.com]:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
default_transport = error
relay_transport = error
inet_protocols = all

smtp_sasl_auth_enable = yes
smtp_sasl_mechanism_filter = plain
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

/etc/postfix/sasl_passwd好像:

[relayhost.test.com]:587 [email protected]:mypassword

哈希数据库文件/etc/postfix/sasl_passwd.db并重新启动 postfix:

sudo postmap sasl_passwd
sudo systemctl restart postfix

下一步:发送测试邮件:

mailx -s "testmail" [email protected] < testmessage.txt

这会导致以下几行/var/log/mail.log

Jan 29 23:35:26 testX postfix/postfix-script[13256]: stopping the Postfix mail system
Jan 29 23:35:26 testX postfix/master[13023]: terminating on signal 15
Jan 29 23:35:27 testX postfix/postfix-script[13384]: warning: symlink leaves directory: /etc/postfix/./makedefs.out
Jan 29 23:35:27 testX postfix/postfix-script[13420]: starting the Postfix mail system
Jan 29 23:35:27 testX postfix/master[13422]: daemon started -- version 3.4.14, configuration /etc/postfix
Jan 29 23:35:34 testX postfix/pickup[13423]: 60836C262C: uid=1000 from=<user>
Jan 29 23:35:34 testX postfix/cleanup[13431]: 60836C262C: message-id=<[email protected]>
Jan 29 23:35:34 testX postfix/qmgr[13424]: 60836C262C: from=<[email protected]>, size=473, nrcpt=1 (queue active)
Jan 29 23:35:34 testX postfix/error[13433]: 60836C262C: to=<[email protected]>, relay=none, delay=0.12, delays=0.09/0.01/0/0.02, dsn=5.0.0, status=bounced ([relayhost.test.com]:587)
Jan 29 23:35:34 testX postfix/cleanup[13431]: 6C649C262D: message-id=<[email protected]>
Jan 29 23:35:34 testX postfix/qmgr[13424]: 6C649C262D: from=<>, size=2312, nrcpt=1 (queue active)
Jan 29 23:35:34 testX postfix/bounce[13434]: 60836C262C: sender non-delivery notification: 6C649C262D
Jan 29 23:35:34 testX postfix/qmgr[13424]: 60836C262C: removed
Jan 29 23:35:34 testX postfix/local[13436]: 6C649C262D: to=<[email protected]>, relay=local, delay=0.03, delays=0.01/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
Jan 29 23:35:34 testX postfix/qmgr[13424]: 6C649C262D: removed

我尝试通过mail.log添加以下几行来获取更多详细信息main.cf

debug_peer_list = relayhost.test.com
debug_peer_level = 3

...但这并没有给我提供更多mail.log细节syslog

在无法访问托管服务提供商(托管我的中继主机的提供商)的日志的情况下,如何才能找出中继主机在身份验证过程的哪个阶段拒绝连接?

答案1

如果您告诉 Postfix 因错误而停止..

default_transport = error
relay_transport = error

.. 它确实会这样做。下次使用该功能时,请指定一个人类可读的状态文本:

default_transport = error:This system only processes local mail, look <here> or ask <person>.
relay_transport = error:This system only processes local mail, look <here> or ask <person>.

这样,您的日志将包含一些文本,您可以搜索您的配置以查看发生了什么。


如果您希望系统实际上将邮件转发到互联网,请删除这些覆盖(如果未设置,它们默认为smtprelay,应该已经以适合您的使用情况的方式进行了配置)。


如果这不是手动配置,而是您的发行版 postinst 脚本根据您在安装过程中的选择而设置的配置,那么请 Debian 维护人员添加明确理想的状态文本(我没有检查,只是提到这种可能性,以防您认为该配置不是您的)。

相关内容