我在 Oracle Linux 7 上运行 postfix 2.10 + Cyrus sasl 2.1 + Dovecot 2.2。Dovecot 可以正常与 saslauthd 配合使用,但 Postfix 总是无法进行身份验证,希望有人能帮忙检查一下是什么问题。
测试步骤如下:
telnet tiger 25
220 tiger.cwcloud.com ESMTP Postfix
ehlo tiger
250-tiger.cwcloud.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth login
334 VXNlcm5hbWU6
eXVuLndhbmcK
334 UGFzc3dvcmQ6
eXVud2FuZ3Bhc3N3b3JkCg==
535 5.7.8 Error: authentication failed: authentication failure
从 /var/log/maillog 收到的错误消息如下:
May 3 09:50:01 tiger postfix/smtpd[29814]: connect from unknown[10.0.0.11]
May 3 09:50:52 tiger postfix/smtpd[29814]: warning: unknown[10.0.0.11]: SASL login authentication failed: authentication failure
从 /var/log/messages 收到的错误消息如下:
May 3 09:50:52 tiger saslauthd[25162]: do_auth : auth failure: [[email protected]] [service=smtp] [realm=tiger.cwcloud.com] [mech=pam] [reason=PAM auth error]
对用户yun.wang运行testsaslauthd,返回成功。
[root@tiger sysconfig]# testsaslauthd -u yun.wang -p yunwangpassword -s smtp
0: OK "Success."
/var/log/secure中的错误消息:
May 3 09:50:49 tiger saslauthd[25162]: pam_unix(smtp:auth): check pass; user unknown
May 3 09:50:49 tiger saslauthd[25162]: pam_unix(smtp:auth): authentication failure; logname= uid=0 euid=0 tty= ruser= rhost=
Postfix的配置如下:
[root@tiger postfix]# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = all
inet_protocols = ipv4
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mydomain = cwcloud.com
myhostname = tiger.cwcloud.com
mynetworks = 127.0.0.0/8
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject
smtpd_helo_required = no
smtpd_helo_restrictions = permit_mynetworks, reject
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_path = smtpd
smtpd_sasl_security_options = noanonymous
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, reject
unknown_local_recipient_reject_code = 550
答案1
我遇到了完全相同的问题,并且花了将近两天的时间来解决。
我多次重新检查了所有 Postfix 和 SASL 配置,只是为了确定唯一的问题是我将登录名和密码转换为 base64 的方式。
最初我是这样做的:
echo login | base64
即不是正确的。
正确的方法是这样的:
echo -ne 'login' | base64