我正在将邮件服务器从一个 CentOS 6 移到另一个。我使用带有 sasl pam 身份验证的 sendmail。当我尝试发送邮件时,它失败了,因为用户未经过身份验证,并且邮件客户端不需要密码。新旧服务器上的所有配置文件都相同。我使用 telnet(新服务器)对此进行了测试:
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 new.mldb.org ESMTP Sendmail 8.14.4/8.14.4; Wed, 4 Feb 2015 14:05:18 +0100
ehlo localhost
250-new.mldb.org Hello localhost.localdomain [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-STARTTLS
250-DELIVERBY
250 HELP
旧服务器:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mldb.org ESMTP Sendmail 8.14.4/8.14.4; Wed, 4 Feb 2015 16:07:23 +0200
ehlo localhost
250-mldb.org Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP
新服务器上缺少此行 250-AUTH LOGIN PLAIN。
以下是 sendmail 配置的部分内容:
define(`confAUTH_OPTIONS', `A')dnl
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confCACERT_PATH', `/etc/pki/tls/certs')dnl
define(`confCACERT', `/etc/pki/tls/certs/ca-bundle.crt')dnl
define(`confSERVER_CERT', `/etc/pki/tls/certs/sendmail.pem')dnl
define(`confSERVER_KEY', `/etc/pki/tls/certs/sendmail.pem')dnl
FEATURE(`access_db', `hash -T<TMPF> -o /etc/mail/access.db')dnl
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
我使用此命令测试了 sasl
# testsaslauthd -s smtp -u <user> -p <password>
0: OK "Success."
我检查过的其他文件:
# cat /etc/sasl2/Sendmail.conf
pwcheck_method:saslauthd
saslauthd_path:/var/run/saslauthd
mech_list: LOGIN PLAIN
# cat /etc/pam.d/smtp
#%PAM-1.0
auth include password-auth
account include password-auth
# cat /etc/sysconfig/saslauthd
SOCKETDIR=/var/run/saslauthd
MECH=pam
FLAGS=
当我尝试发送邮件时,我在日志中收到以下信息:
# tail /var/log/maillog
Feb 4 15:17:38 new sendmail[12070]: STARTTLS=server, relay=*******.spectrumnet.bg [****], version=TLSv1/SSLv3, verify=NO, cipher=DHE-RSA-AES256-SHA, bits=256/256
Feb 4 15:17:38 new sendmail[12070]: t14EHba9012070: ruleset=check_rcpt, arg1=<****@mail.bg>, relay=*****.spectrumnet.bg [**********], reject=550 5.7.1 <****@mail.bg>... Relaying denied. Proper authentication required.
Feb 4 15:17:40 new sendmail[12070]: t14EHba9012070: from=<*****@*****.eu>, size=422, class=0, nrcpts=0, proto=ESMTP, daemon=MTA, relay=*******.spectrumnet.bg [******]
在我更改任何 /etc/mail 后,我运行“make”
sendmail 不提供身份验证的原因是什么?
更新
sendmail 不需要身份验证的主要原因是我没有安装这个数据包:cyrus-sasl-plain
我安装了它,现在邮件客户端要求输入密码,但密码总是失败。
更多配置:# grep TrustAuthMech sendmail.cf C{TrustAuthMech}EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN R$* $| $={TrustAuthMech} $# RELAY # grep AuthMechanisms sendmail.cf O AuthMechanisms=EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
答案1
您的 sendmail.mc 看起来不错。除了停止并重新启动 sendmail(我猜您已经这样做了)。我会查看实际的配置文件,该文件名为 sendmail.cf。
确保你看到了以下几行:
C{TrustAuthMech}DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
和
# list of authentication mechanisms
O AuthMechanisms=DIGEST-MD5 CRAM-MD5 LOGIN PLAIN
如果没有 LOGIN PLAIN,则您的“make”就不会从.mc 文件生成.cf 文件。
答案2
好吧,唯一的问题似乎是我没有在新服务器上安装 cyrus-sasl-plain 软件包。重新启动所有服务(saslauthd 和 sendmail)后,邮件客户端发送和身份验证工作正常。