我想在Debian VPS上运行Postfix从我的应用程序发送电子邮件。该应用程序(在其他VPS上运行)将通过SMTP连接到Postfix。Postfix不必处理传入的电子邮件;这只是发送外发邮件。
为避免成为开放中继,应使用SASL身份验证。但是,我不想运行Dovecot或MySQL进行SASL身份验证。
如何使用简单文件(包含用户名和密码)设置SASL身份验证?
我已经找到一个类似的问题 ; 但是,那里没有给出令人满意的答案。
我想在Debian VPS上运行Postfix从我的应用程序发送电子邮件。该应用程序(在其他VPS上运行)将通过SMTP连接到Postfix。Postfix不必处理传入的电子邮件;这只是发送外发邮件。
为避免成为开放中继,应使用SASL身份验证。但是,我不想运行Dovecot或MySQL进行SASL身份验证。
如何使用简单文件(包含用户名和密码)设置SASL身份验证?
我已经找到一个类似的问题 ; 但是,那里没有给出令人满意的答案。
Answers:
Postfix当前仅支持两种SASL身份验证方法。其中之一就是Dovecot,这是您不想要的。另一个是Cyrus,它几乎与您想要的内容差不多,而无需重写Postfix。它确实涉及运行单独的身份验证守护程序(saslauthd
),但是身份验证文件易于编辑和更新。
可以在postfix文档站点上找到使用Cyrus SASL的基础知识,但这只是简短描述。如果有任何混淆之处,请查看链接!
首先安装带有插件的Cyrus SASL sasldb
。(如何做,这是读者的练习;大概是您的unix品牌使用的任何软件包系统中都有一个软件包。)由于Postfix和SASL之间的通信将通过unix域套接字进行,因此您可能想要将后缀添加到SASL组,并确保该组具有对该目录的读取和执行权限/var/run/saslauthd
。
通过编辑/etc/sasl2/smtpd.conf将SASL配置为使用sasldb:
pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5 NTLM
sasldb插件意味着sasl将使用Berkeley DB文件作为用户名和密码。您可以使用以下命令添加用户saslpasswd2
:
$ saslpasswd2 -c -u example.com username
Password:
Again (for verification):
请注意,您与用户名一起指定了一个域,并且用户在身份验证时将需要使用“ username@example.com”,而不仅仅是“ username”。
您可以通过运行验证输入了哪些用户sasldblistusers2
。
启动saslauthd,并通过执行以下操作验证身份验证是否有效
testsaslauthd -u username@example.com -p password
完成此操作后,通过编辑/etc/postfix/main.cf使其包含,告诉Postfix使用SASL并告诉Cyrus它是SMTP身份验证对象
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd
然后,重新加载后缀,您将被设置。
sasldblistusers2
正确输出我添加的用户列表。但是,执行时testsaslauthd
,我得到以下结果:0: NO "authentication failed"
。您知道我该如何解决吗?这是我的/var/log/auth.log
:saslauthd[30471]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=pam] [reason=PAM auth error]
-s smtpd
其附加。如果我设置MECHANISMS="sasldb"
在/etc/default/saslauthd
并重启saslauthd,我从testsaslauthd相同的结果。身份验证日志显示了不同的消息:saslauthd[3706]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=sasldb] [reason=Unknown]
testsaslauthd -u username -r example.com -p XXX
回报0: OK "Success."
。现在,我将检查Postfix是否可以解决此问题……
-s smtpd
它,它将使其使用PAM而不是sasldb,所以请不要这样做...