Postfix:如何使用简单文件进行 SASL 认证?

Postfix:如何使用简单文件进行 SASL 认证?

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

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

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

我已经找到了类似的问题;然而,并没有给出令人满意的答案。

答案1

Postfix 目前仅支持两种 SASL 身份验证方法。其中一种是 Dovecot,但您不需要它。另一种是 Cyrus,它与您想要的非常接近,而且无需重写 Postfix 即可获得。它确实需要运行单独的身份验证守护进程 ( saslauthd),但身份验证文件易于编辑和更新。

有关使用 Cyrus SASL 的基础知识,请参阅Postfix 文档站点,但这里有一个简短的描述。如果有任何令人困惑的地方请查看链接!

首先使用插件安装 Cyrus SASL sasldb。(如何安装留给读者练习;假设您的 unix 品牌使用的任何软件包系统中都有一个软件包。)由于 Postfix 和 SASL 之间的通信将通过 unix 域套接字进行,您可能需要将 postfix 添加到 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):

请注意,您要与用户名一起指定域,并且用户需要使用“[电子邮件保护]“而不是仅仅使用“用户名”来进行身份验证。

您可以通过运行来验证已输入的用户sasldblistusers2

启动 saslauthd,并通过执行以下操作验证身份验证是否有效

testsaslauthd -u [email protected] -p password

配置 Postfix

完成后,告诉 Postfix 使用 SASL,并告诉 Cyrus 它正在验证的是 SMTP,方法是编辑 /etc/postfix/main.cf 以包含

smtpd_sasl_auth_enable = yes
smtpd_sasl_path = smtpd

然后,重新加载 postfix,然后就设置好了。

答案2

只需澄清几件事,

在 sasldb 中创建账户:

% saslpasswd2 -c -u fqdn username

测试身份验证:

% testsaslauthd -u username -p password

(注意:用户名是不是其次是 fqdn)

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

% saslpasswd2 -c -u example.com root

不会让你验证身份,

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

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

答案3

为了防止成为开放中继,应该使用 SASL 身份验证。

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

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

您所问的问题是不可能的,因为 postfix 不直接支持 SASL。

答案4

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

 inet_interfaces = 127.0.0.1

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

相关内容