我想在Debian VPS上运行Postfix来从我的应用程序发送电子邮件。 应用程序(运行在其他VPS上)将通过SMTP连接到Postfix。 Postfix不必处理传入的电子邮件; 这只是发送传出的消息。
为了防止开放中继,应使用SASLauthentication。 但是,我不想运行Dovecot或MySQL进行SASL身份validation。
如何使用简单的文件(包含用户名和密码)设置SASLauthentication?
我已经find了类似的问题 。 然而,在那里没有令人满意的答案。
Postfix目前只支持两种SASLauthentication方法。 其中一个是鸽舍,你不想要的。 另一个是赛勒斯,这是接近你想要的,因为它是可能得到没有重写Postfix。 它涉及到运行一个单独的身份validation守护进程( saslauthd ),但是身份validation文件很容易编辑和更新。
使用Cyrus SASL的基础知识可以在postfix文档站点find ,但是这里有一个简短的描述。 如果有任何混淆,请看链接!
首先安装带插件sasldb Cyrus SASL。 (如何做到这一点是读者的一个练习;大概是在你的unix所使用的包系统中有一个包)。由于Postfix和SASL之间的通信将通过unix域套接字进行,所以你可能想要将后缀添加到SASL组,并确保该组具有对目录/var/run/saslauthd读取和执行权限。
通过编辑/etc/sasl2/smtpd.confconfigurationSASL以使用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):
请注意,您指定了一个域名和用户名,用户在validation时需要使用“[email protected]”而不是“username”。
您可以通过运行sasldblistusers2来validationinput了哪些用户。
启动saslauthd,并validation身份validation的工作
testsaslauthd -u [email protected] -p password
一旦完成,告诉Postfix使用SASL并通过编辑/etc/postfix/main.cf来告诉Cyrus它是SMTPauthentication
smtpd_sasl_auth_enable = yes smtpd_sasl_path = smtpd
然后,重新加载后缀,你应该被设置。
只是澄清一些事情,
在sasldb中创build一个帐户:
% saslpasswd2 -c -u fqdn username
testingauthentication:
% testsaslauthd -u username -p password
(注意:用户名不是跟着fqdn)
我还想补充说,创build一个根帐户
% saslpasswd2 -c -u example.com root
不会让你authentication,
% testsaslauthd -u root -p some_password 0: NO "authentication failed"
但是这不是一个错误。 这只是一个安全function。
如果你不需要处理收到的邮件,那么不要打扰authentication。 只需使用防火墙阻止传入stream量,并/或仅限于本地主机。
inet_interfaces = 127.0.0.1
没有更多的开放中继问题,而且还避免了需要通过postfix发送邮件的应用程序的复杂化。
为了防止开放中继,应使用SASLauthentication。
SASL只是防止这种情况的众多方法之一。 另一种方法是将您在其他VPS上使用的IP列入白名单,或者要求TLS客户端证书(这可以说是最安全的方式)。
只需在postfix机器上设置一个签名CA,并签名每个VPS你想提交电子邮件的证书。
然后要求所有提交的邮件完整的客户端证书validation; 禁用任何其他提交方法。
你所要求的是不可能的,因为postfix不直接支持SASL。