Postfix:如何使用简单文件进行SASL身份验证?


8

我想在Debian VPS上运行Postfix从我的应用程序发送电子邮件。该应用程序(在其他VPS上运行)将通过SMTP连接到Postfix。Postfix不必处理传入的电子邮件;这只是发送外发邮件。

为避免成为开放中继,应使用SASL身份验证。但是,我不想运行Dovecot或MySQL进行SASL身份验证。

如何使用简单文件(包含用户名和密码)设置SASL身份验证?

我已经找到一个类似的问题 ; 但是,那里没有给出令人满意的答案。


使用防火墙仅允许其他VPS的IP地址连接。此外,即使防火墙出现故障,您也可以在main.cf中设置mynetworks变量以使后缀意识到这一点。如果您确实需要SASL,请阅读postfix随附的SASL_README,并将SASL设置为将/ etc / sasldb用作“数据库”。应该开箱即用。saslpasswd添加/删除/更改文件。
AndreasM

Answers:


15

Postfix当前仅支持两种SASL身份验证方法。其中之一就是Dovecot,这是您不想要的。另一个是Cyrus,它几乎与您想要的内容差不多,而无需重写Postfix。它确实涉及运行单独的身份验证守护程序(saslauthd),但是身份验证文件易于编辑和更新。

可以在postfix文档站点上找到使用Cyrus SASL的基础知识,但这只是简短描述。如果有任何混淆之处,查看链接!

首先安装带有插件的Cyrus SASL sasldb。(如何做,这是读者的练习;大概是您的unix品牌使用的任何软件包系统中都有一个软件包。)由于Postfix和SASL之间的通信将通过unix域套接字进行,因此您可能想要将后缀添加到SASL组,并确保该组具有对该目录的读取和执行权限/var/run/saslauthd

配置SASL

通过编辑/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.logsaslauthd[30471]: do_auth : auth failure: [user=XXX@XXX] [service=smtpd] [realm=] [mech=pam] [reason=PAM auth error]
Jonathan

这意味着saslauthd尝试使用PAM而不是sasldb。用于启动它的命令行是什么?
珍妮D

我使用了testsaslauthd(如您的原始答案中所述),还尝试将-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]
Jonathan

2
嗯,testsaslauthd工作,如果我单独指定的用户名和域名的一部分,是这样的:testsaslauthd -u username -r example.com -p XXX回报0: OK "Success."。现在,我将检查Postfix是否可以解决此问题……
Jonathan

如果您使用-s smtpd它,它将使其使用PAM而不是sasldb,所以请不要这样做...
Jenny D

1

为避免成为开放中继,应使用SASL身份验证。

SASL只是防止这种情况的众多方法之一。另一个办法是将您在其他VPS上使用的IP列入白名单,或者要求TLS客户端证书(这可以说是最安全的方法)。

只需在postfix机器上设置一个签名CA,然后为每个希望提交电子邮件的VPS签名一个证书即可。
然后要求对所有提交的邮件进行完整的客户证书验证;禁用任何其他提交方法。

您的要求是不可能的,因为后缀不直接支持SASL。


1

只是澄清一些事情,

在sasldb中创建一个帐户:

% saslpasswd2 -c -u fqdn username

测试身份验证:

% testsaslauthd -u username -p password

(注意:用户名后面没有 fqdn)

我还想补充一点,即创建一个根帐户

% saslpasswd2 -c -u example.com root

不会让您进行身份验证,

% testsaslauthd -u root -p some_password
0: NO "authentication failed"

但这不是错误。这只是一项安全功能。


0

如果您不需要处理传入的邮件,则不必担心身份验证。只需使用防火墙阻止传入流量,和/或将其限制为仅本地主机。

 inet_interfaces = 127.0.0.1

不再存在开放中继问题,并且还避免使需要通过后缀发送邮件的应用程序变得复杂。


感谢您的回答。该应用程序正在其他VPS上运行,因此Postfix将从本地主机以外的其他主机接收电子邮件。
乔纳森

您可以定义所需连接的IP并在后缀配置或防火墙配置中列出它们吗?例如,它们可能都在单个网络块中,或者是可以轻松列出它们的足够小的IP或块集。或者,您可以考虑在虚拟主机之间使用专用网络。
mc0e
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.