POSTFIX-SMTP 身份验证失败

POSTFIX-SMTP 身份验证失败

我对 POSTFIX 还不太熟悉。当我连接到我的 LXD 容器时,有些容器显示“/var/mail/root 中有新邮件”。由于这些收件箱没有被查阅,我想将它们重新路由到 Exchange Server(O365 服务器)上的另一个收件箱。

我使用以下参数成功配置了其他应用程序:

['smtp_enable'] = true
['smtp_address'] = "mail.external-smtp-exchange.com"
['smtp_port'] = 587
['smtp_user_name'] = "[email protected]"
['smtp_password'] = "<pwd>"
['smtp_domain'] = "subdomain.contoso.com"
['smtp_authentication'] = "login"
['smtp_enable_starttls_auto'] = true
['smtp_tls'] = false

我希望所有用户在路由邮件时使用一个单一的“noreply”地址(FROM)。因此修改/etc/aliases如下:

mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: [email protected]

然后newaliases重新加载所有内容。

main.cf文件内容

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

# appending .domain is the MUA's job.
append_dot_mydomain = no
# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = core-keycloak.internal-domain.com
myorigin = /etc/mailname
mydestination = $myhostname, subdomain.contoso.com, core-keycloak, localhost.localdomain, localhost
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

relayhost = [mail.external-smtp-exchange.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/smtp.sasl
smtp_sasl_security_options = noanonymous
smtp_use_tls = no
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
inet_interfaces = all
inet_protocols = all
### Tried also parameters below without any improvement
smtp_generic_maps =  regexp:/etc/postfix/smtp_generic_maps
sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps =  regexp:/etc/postfix/sender_canonical_maps
smtp_header_checks = regexp:/etc/postfix/smtp_header_checks

如果没有最后 4 个参数覆盖 FROM 电子邮件,我会得到以下输出:

Jun  8 13:23:21 core-keycloak postfix/smtp[18264]: 86C822CE8A: to=<[email protected]>, relay=mail.external-smtp-exchange.com[<SMTP-IP>]:587, delay=2995, delays=2989/0.01/5.3/0, dsn=4.7.3, status=deferred (SASL authentication failed; server mail.external-smtp-exchange.com[<SMTP-IP>] said: 535 5.7.3 Authentication unsuccessful)
Jun  8 13:23:23 core-keycloak postfix/pickup[18261]: 413752CEAA: uid=0 from=<[email protected]>
Jun  8 13:23:23 core-keycloak postfix/cleanup[18271]: 413752CEAA: message-id=<[email protected]>
Jun  8 13:23:23 core-keycloak postfix/qmgr[18262]: 413752CEAA: from=<[email protected]>, size=408, nrcpt=1 (queue active)

使用最后 4 个参数覆盖 FROM 电子邮件,我得到以下输出:

Jun  8 13:25:23 core-keycloak postfix/pickup[18334]: 68B772CEB0: uid=0 from=<[email protected]>
Jun  8 13:25:23 core-keycloak postfix/cleanup[18346]: 68B772CEB0: message-id=<[email protected]>
Jun  8 13:25:23 core-keycloak postfix/qmgr[18335]: 68B772CEB0: from=<[email protected]>, size=408, nrcpt=1 (queue active)

在两种情况下,我都没有在 Exchange 收件箱中收到任何消息。

任何帮助都将受到欢迎。


编辑

我的密码中有特殊字符,如!([])等等......

答案1

由于您的中继未指定原因,“SASL 身份验证失败”可能表示不同的事情。

  1. 这可能意味着您不应该通过未加密的连接发送您的凭据。您可能被选项的命名误导了,在 Postfixsmtp_use_tls已弃用简写为使能够机会性传输安全,在其他软件中,此名称指的是禁用(在此上下文中已过时的) STARTTLS 机制,而是立即设置传输安全。

    smtp_use_tls从您的 中删除main.cf并改用smtp_tls_security_level = encrypt 后一种配置应用的策略独立于正在使用的机制,影响全部传出 SMTP,端口 465 上的 TLS(Postfix 称为 tls_wrappermode)在端口 587 上启动 STARTTLS。

  2. 这可能意味着您的密码或用户名不正确,或者从过时的缓存中读取。除了用户名中的冒号以及前导/尾随空格外,我不知道有任何字符特殊处理。

    验证 postfix 读取的凭据是否与您使用其他软件测试的凭据相符:

    # postmap -v $(postconf -xh smtp_sasl_password_maps)
    postmap: open hash /etc/postfix/smtp.sasl
    
    # postmap -q "$(postconf -xh relayhost)" $(postconf -xh smtp_sasl_password_maps)
    [email protected]:<pwd>
    

请记住,您的地址映射配置可能对您之前的测试没有任何影响,因为 Postfix 默认附带配置,可防止对已知不接受凭据和/或邮件的主机进行过多重试,因此缺少postfix/smtp后续尝试的日志行。检查您的队列 ( postqueue -p) 是否有潜在的未完成消息。

相关内容