是否可以通过同一局域网中的另一台机器上的 Postfix 发送邮件,而无需中继?

是否可以通过同一局域网中的另一台机器上的 Postfix 发送邮件,而无需中继?

我认为这是一种很常见的情况,但我有点难以以最简单的方式让它发挥作用,而且,我不确定我现在是否以好的/推荐的方式做到了这一点。

我有两台可以通过 LAN 通信的服务器(而且,两台服务器都有公共互联网 IP 地址)。一台运行 Postfix,另一台服务于一些网站。

我想要做的是能够通过 PHP 从 Web 服务器主机发送一些邮件(例如确认邮件和类似的东西)。由于这台机器只做这些,我不想在那里设置功能齐全的 Postfix,而是使用其他主机发送邮件。

我所做的是在 Web 服务器上设置 msmtp,并在邮件服务器上将其 LAN IP 地址声明为可信任的(通过将其添加到 Postfix 的 my_networks 等)。这确实有效,我可以从此主机发送邮件。但是 – 正如预期的那样 – Postfix 充当以这种方式发送的邮件的中继,添加相应的标头、注释 SPF 检查已被跳过等等。

现在我想知道是否可以用更简单的方法完成此操作,因为 Web 服务器可以通过 LAN 访问邮件服务器。是否可以直接从 Web 服务器在邮件服务器上使用 sendmail?比如通过 ssh 管道,使用一些具有无密码 SSH 密钥的非特权用户?或者通过邮件服务器上的一些小程序(我没有找到)监听一些非暴露端口并将传入数据转发到 sendmail?这样在 Web 服务器上,可以使用虚拟 sendmail 脚本,只需将数据传输到邮件服务器的 LAN 地址和所述端口?

感谢所有提示:-)

答案1

您可以使用 587 提交端口将消息从您的申请直接发送到电子邮件服务器。请参阅RFC 6409

答案2

如果要删除 Received 标头,请在代理服务器上执行以下操作:

在 /etc/postfix/main.cf 中:

header_checks = pcre:/etc/postfix/header_checks

在 /etc/postfix/header_checks 中:

/^Received:/     STRIP Remove Received header.

我不能 100% 确定您的 SPF 标头内容,但请尝试将其放入 /etc/postfix/header_checks 中:

/^skipped\ spf\ test:/     STRIP Remove SPF header.

最后,运行这两个命令:

postmap /etc/postfix/header_checks
systemctl restart postfix

相关内容