我想在 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 发送邮件的应用程序变得复杂。