配置 sendmail 以监听备用端口

配置 sendmail 以监听备用端口

我已设置sendmail为监听端口 1234,而不是 25,并进行如下更改sendmail.mc

DAEMON_OPTIONS(`Port=1234, Name=MTA')

这通常有效,但有一个例外。背景是我有一个中继在端口 25 上监听(中继必须有 MX 记录,因此它必须在端口 25 上)。中继通过 sendmail 发送邮件,因此 sendmail 监听localhost:1234。换句话说,sendmail 只负责发送邮件,而不负责接收邮件。/etcnetstat确认中继在 25 上监听,而 sendmail 在 1234 上监听。

这在以下两个测试用例中有效:

  1. 我可以通过 telnet 到 sendmail 发送电子邮件(telnet localhost 1234
  2. s-nail我可以通过适当的配置更改发送电子邮件( set mta=smtp://localhost:1234

然而,这种设置没有如果我直接运行 sendmail 则可以工作:

sendmail -d8.20 -vt < test-email.txt

在这种情况下,sendmail 尝试通过本地连接到端口 25 来发送邮件,因此它实际上与本地中继进行通信,而不是远程 SMTP 服务器。调试输出显示:

[email protected]... Connecting to [127.0.0.1] via relay...
220 mydomain.org ESMTP mydomain relay

这让我很困惑——知道这是怎么回事吗?

编辑

取得了一些进展。我使用的是 Sendmail 8.15.2、Ubuntu 20.04。这个问题其实并不重要,只是 sendmail 使用每 20 分钟运行一次的 cron 作业刷新其 MSP 队列,因此我收到大量 syslog 故障条目和大量无法送达的电子邮件队列,因为 sendmail 找不到自己。

问题似乎如下。当您使用 sendmail 发送邮件(或管理队列)时,它(通常)是一个 2 步过程。您运行 sendmail,它读取submit.cf(和不是 sendmail.cf),并充当 MSA,将邮件提交给某个程序。该程序通常是本地 sendmail 守护程序,它sendmail.cf在启动时读取邮件。

sendmail.cf告诉 sendmail 它需要监听localhost:1234传入邮件。这意味着submit.cf必须包含一个配置,该配置告诉 sendmail 程序将传出邮件路由到localhost:1234

相关submit.mc配置可能是FEATURE msp,默认为

FEATURE(`msp', `[127.0.0.1]', `25')

因此答案可能很简单,只需将 25 改为 1234 即可。然而,这并不容易。只需更改它、重新生成文件并重新启动 sendmail,没有任何区别。事实上,使用submit.cfm4重新生make成都没有任何区别,或者会给你一个cf注释掉该功能的文件。有些魔法可以让你更改该功能,但我不知道是什么。答案可能在 /usr/share/sendmail/cf/feature/msp.m4 中,但我看不到它。

答案1

从命令行运行 sendmail,它使用不同的配置文件。

编辑文件“submit.mc”

添加以下行:

define(`RELAY_MAILER_ARGS', `TCP $h 1234')dnl

在该行之前:

FEATURE(`msp', `[127.0.0.1]')dnl

然后将“submit.mc”编译为“submit.cf”。

相关内容