我正在尝试设置我的 sendmail 以针对中继 (comcast) 进行身份验证。我根本没有看到任何身份验证尝试。我只是试图调试身份验证的工作原理,但无法将所有部分连接起来...
我的 .mc 文件中有:
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`SMART_HOST', `relay:smtp.comcast.net.')dnl
define(`confAUTH_MECHANISMS', `PLAIN')dnl
FEATURE(`authinfo',`hash /etc/mail/client-info')dnl
在我的 /etc/mail/client-info 中:
AuthInfo:*.comcast.net "U:root" "I:comcast_user" "P:comcast_password"
现在,我知道 u/p 一切正常,因为我可以使用 telnet 直接通过 SMTP 进行身份验证。
有两件事我不明白。
搜索 AuthInfo 记录时,它们会与目标主机名匹配。如何匹配?它是使用映射键(这是我所期望的),还是使用所谓的“域”(“R:”参数,我没有在 auth-info 行中设置)
“U:”到底是什么?Sendmail README (http://www.sendmail.org/m4/smtp_auth.html) 表示它是“用户(authoraztion id)”,而“I:”是“身份验证 ID”。这实际上表明我的用户名应该在“U:”中,但是http://www.sendmail.org/~ca/email/auth.html说“I:”是您的远程用户名。
会话如下所示:
[root@manticore]/etc/mail# sendmail -qf -v
Warning: Option: AuthMechanisms requires SASL support (-DSASL)
Running /var/spool/mqueue/p97CgcWq023273 (sequence 1 of 399)
[email protected]... Connecting to smtp.comcast.net. port 587 via relay...
220 omta19.westchester.pa.mail.comcast.net comcast ESMTP server ready
>>> EHLO my.host.name
250-omta19.westchester.pa.mail.comcast.net hello [my.ip.add.res], pleased to meet you
250-HELP
250-AUTH LOGIN PLAIN
250-SIZE 15728640
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-STARTTLS
250 OK
>>> STARTTLS
220 2.0.0 Ready to start TLS
>>> EHLO my.host.name
250-omta19.westchester.pa.mail.comcast.net hello [my.ip.add.res], pleased to meet you
250-HELP
250-AUTH LOGIN PLAIN
250-SIZE 15728640
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 OK
>>> MAIL From:<> SIZE=2183
550 5.1.0 Authentication required
MAILER-DAEMON... aliased to postmaster
postmaster... aliased to root
root... aliased to [email protected]
postmaster... aliased to root
root... aliased to [email protected]
>>> RSET
250 2.0.0 OK
[root@manticore]/etc/mail# sendmail -d0.1
Version 8.14.3
Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7
NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS PIPELINING SCANF
SOCKETMAP STARTTLS TCPWRAPPERS USERDB XDEBUG
谢谢,Pawel。
答案1
如果使用 FEATURE(`authinfo'),则映射条目中的主机名必须与 ISP 邮件服务器的主机名完全匹配
查看你的 SMART_HOST + 客户端信息
“U:” 到底是什么?
出色地,SMTP 身份验证用纯英语陈述
U 用户(授权) ID
我验证ID
...
用户或者身份验证 ID 和密码必须存在。所有其他条目都有默认值。如果一个用户或身份验证 ID 是丢失的, 这使用现有值寻找丢失的物品。
答案2
我的解决方案很简单。默认的 OpenBSD sendmail 没有设置 SASL 标志,无法进行任何身份验证,甚至无法进行纯文本身份验证。我实际上以为 SASL 仅用于“高级”身份验证。我的 -d0.1 输出清楚地显示没有 SASL 标志。
对于有同样问题的人:此页面(http://theory14.wordpress.com/2009/06/16/openbsd-smtp-authtls-imaps-proxy/) 模糊地(这不是一步一步的如何修复 OpenBSD sendmail 的 SASL 页面)解释了需要执行的步骤。基本上,-- 下载用户空间源代码,并使用 -DSASL 标志重建 sendmail。
PS 我认为,“U:”实际上是运行 sendmail 的用户,而“I:”是向客户端进行身份验证的用户。