我按照以下说明配置了 postfix 和 dovecothttp://www.postfix.org/SASL_README.html#server_dovecot_comm描述激活 sasl 身份验证。
不幸的是,postfix 拒绝了每一个连接日志中显示以下错误
postfix/smtpd[5238]: fatal: no SASL authentication mechanisms
我正在使用 Ubuntu LTS 10.04。
谷歌搜索后,我发现很多人报告了这个模糊的错误,但没有给出明确的诊断。不清楚问题是出在 dovecot 端还是 postfix 端。
更新:使用以下方式获取 postfix sasl 配置postconf | grep -e “^smtpd。*sasl”
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_client_access hash:/etc/postfix/access,
reject_rbl_client bl.spamcop.net,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client korea.services.net
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = no
smtpd_sasl_exceptions_networks =
smtpd_sasl_local_domain =
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_type = dovecot
当尝试连接telnet 本地主机 25连接立即关闭,并显示上述消息。注释掉smtpd_sasl_auth_enable = 是禁用 sasl 并且连接正常完成。
Dovecot 配置获得鸽舍-n
# 1.2.9: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-41-generic i686 Ubuntu 10.04.4 LTS
log_timestamp: %Y-%m-%d %H:%M:%S
protocols: imaps
ssl_cert_file: /home/xxxx/cacert/xxxx.net/server.crt
ssl_key_file: /home/xxxx/cacert/xxxx.net/server.key
verbose_ssl: yes
login_dir: /var/run/dovecot/login
login_executable: /usr/lib/dovecot/imap-login
mail_privileged_group: mail
mail_location: maildir:~/Maildir
mbox_write_locks: fcntl dotlock
auth default:
mechanisms: plain login
passdb:
driver: pam
userdb:
driver: passwd
socket:
type: listen
client:
path: /var/spool/postfix/private/auth
mode: 432
user: postfix
group: postfix
使用 xxxx 隐藏的真实值
root@xxxx:/etc/postfix# stat /var/spool/postfix/private/auth
File: «/var/spool/postfix/private/auth»
Size: 0 Blocks: 0 IO Block: 4096 socket
Device: 801h/2049d Inode: 6817165 Links: 1
Access: (0660/srw-rw----) Uid: ( 111/ postfix) Gid: ( 120/ postfix)
Access: 2012-08-10 16:47:06.000000000 +0200
Modify: 2012-08-10 16:46:09.000000000 +0200
Change: 2012-08-10 16:46:09.000000000 +0200
更新:如果我改变,错误就会消失smtpd_tls_auth_only = 否到smtpd_tls_auth_only = 是。现在我可以从远程主机接收邮件到本地邮箱了。
我必须将我的 MUA 配置为使用 STARTTLS 进行连接才能进行连接。如果我尝试使用 SSL/TLS 进行连接,连接就会挂起。使用 STARTTLS,可以建立连接,但由于是匿名的,因此邮件中继会被拒绝,这正是我想要启用的。这是我在系统日志中看到的内容。
postfix/smtpd[7715]: connect from unknown[192.168.2.17]
postfix/smtpd[7715]: setting up TLS connection from unknown[192.168.2.17]
postfix/smtpd[7715]: Anonymous TLS connection established from unknown[192.168.2.17]: TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)
更新尝试通过 postfix 服务器中继邮件时,dovecot auth_debug 输出。这可能是 postfix 配置问题。
postfix/smtpd[8186]: connect from unknown[192.168.2.17]
postfix/smtpd[8186]: setting up TLS connection from unknown[192.168.2.17]
postfix/smtpd[8186]: Anonymous TLS connection established from unknown[192.168.2.17]: TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)
dovecot: auth(default): new auth connection: pid=8186
dovecot: auth(default): client in: AUTH#0111#011PLAIN#011service=smtp#011nologin#011lip=192.168.2.3#011rip=192.168.2.17#011secured#011resp=<hidden>
home dovecot: auth-worker(default): pam(yyyy,192.168.2.17): lookup service=dovecot
home dovecot: auth-worker(default): pam(yyyy,192.168.2.17): #1/1 style=1 msg=Password:
home dovecot: auth(default): client out: OK#0111#011user=yyyy
postfix/smtpd[8186]: NOQUEUE: reject: RCPT from unknown[192.168.2.17]: 554 5.7.1 <[email protected]>: Relay access denied; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<[192.168.2.17]>
postfix/smtpd[8186]: disconnect from unknown[192.168.2.17]
这意味着 postfix 可以正确地与 dovecot 通信,并且我认为身份验证有效,因为 dovecot 在其事务结束时返回了 Ok。
发送到本地帐户有效,我的 MUA 按预期使用 TLS。因此,剩下的唯一问题是允许经过身份验证的用户进行中继。我认为
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination
阅读完 Postfix 文档后就足够了。
解决方案:注释掉 smtpd_sender_restriction 参数后,邮件中继就可进行。我通过逐个注释掉可疑参数找到了它。我不知道其中可能是什么阻止了邮件中继。
smtpd_sender_restrictions =
permit_mynetworks,
reject_sender_login_mismatch,
reject_unauth_destination,
reject_unauth_pipelining,
reject_unknown_sender_domain
regexp:/etc/postfix/forbid_from
答案1
我们可以通过几个问题来解决这个问题:
- dovecot 正在运行吗?
- 您可以使用 IMAP/POP 客户端对其进行身份验证吗?
- 有可用的插座吗
/var/spool/postfix/private/auth
? - postfix 用户是否可以读取/写入该套接字?
如果对其中任何一个问题的回答为“否”,则我们已找到您的问题。如果所有问题的答案均为“是”,请发帖doveconf -n
答案2
我自己解决了这个问题。
导致继电器故障的参数是
smtpd_sender_restrictions = ..., reject_unauth_destination, ...
一旦删除,经过 sasl 认证的用户就可以进行中继。