如何在 Postfix 中设置 smtpd 的用户名和密码?

如何在 Postfix 中设置 smtpd 的用户名和密码?

我已通过添加此配置将 Postfix 设置为 SMTP 服务器main.cf

myhostname = foo.com
mydomain = foo.com
myorigin = $mydomain

smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_helo_required = yes
smtpd_helo_restrictions = reject_invalid_helo_hostname
smtpd_recipient_restrictions = reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

sasl_passwd文件如下所示:

foo.com    user:pass

我已经sasl_passwd.db从该文件生成了一个。不幸的是,当我使用用户名和密码连接到我的服务器时,我总是验证失败。我做错了什么?

答案1

你搞混了smtpd_saslsmtp_sasl第一个是用户验证在您的服务器上提交电子邮件进行投递,后者用于当 Postfix 不直接投递,而是通过中继投递时,postfix 本身进行身份验证

不幸的是,当使用用户名和密码连接到我的服务器时,我一直收到身份验证失败的消息。

你说,那正在连接到服务器,所以我猜你想使用 SASL 进行 smtpdpostfix 中的 SASL 对于用户认证一般是使用 dovecot 或者 cyrus 来完成的。

关于从哪里开始面对你实际要完成的任务的两个提示:

答案2

如上一个答案所述,该变量smtp_sasl_password_maps仅适用于 SMTP,而不适用于 SMTPD。解决方案是否像将 Postfix SMTPD 指向文件一样简单。

前面的回答引用了似乎不必要的文档,用于解决指定服务器用户名和密码对的问题。如果 Postfix SMTPD 有办法回退到文件,而不是要求管理员了解带有可插入模块的守护进程,那就太好了。

显然这样的解决方案并不存在,因此向 Postfix SMTPD 配置指定一组用户名和密码的问题变成了让 Postfix SMTPD 与名为 SASL 的守护进程交互的问题。(如果这个事实属实,但参考文献中没有出现,因此我冒着一定风险在这里声明这一点)

我在这里找到了让 Postfix SMTPD 与 SASL 交互的最直接的文档:https://wiki.debian.org/PostfixAndSASL

我最终能够使用上述教程“使用 PAM 的 saslauthd”中的第一种方法让 Postfix SMTPD 从我的 shell 登录中识别用户名/密码。这使用/etc/default/saslauthdDebian 上指定的默认 SASL 机制“pam”(尽管教程告诉您仅为 Postfix 创建此文件的副本,我照做了)。PAM 是一个标准的 Unix 身份验证框架。

我记得在使用 Debian 文档时也遇到过一些问题,但我记不清具体是什么问题了。这两个命令对于调试我遇到的问题是必不可少的(替换您自己的用户名和密码):

echo MYPASSWORD | pamtester -v smptd myusername authenticate

sudo testsaslauthd -s smtp -u myusername -p MYPASSWORD

我可能必须saslauthd先运行 Postfix SMTPD,它才会公布向客户端进行身份验证的能力。

最后,我在另一台主机上测试了提交msmtp。此工具不喜欢默认 Debian Postfix 配置中的 TLS 密钥,因此我进行了修改main.cf以使用letsencrypt键。

对于这个解决方案,我从来不用学习 Dovecot 或 Cyrus 是什么。但是,最好有一个解决方案,使我能够使用与 shell 登录不同的密码,因为现在我的整个系统只与 Postfix 一样安全。

相关内容