电子邮件标题中的本地主机 [127.0.0.1]

Cam*_*all 5 email sendmail

我正在使用 sendmail 从文本文件发送一封非常简单的电子邮件。这是文本文件:

to:test@someaddress.com
from:admin@hostname.tld
subject:Testing

test test test
Run Code Online (Sandbox Code Playgroud)

我发送的:

sendmail -t < mail.txt
Run Code Online (Sandbox Code Playgroud)

我正在运行 sendmail 的服务器是 hostname.tld。这是/etc/hosts:

12.34.56.78     hostname hostname.tld
127.0.0.1       localhost
Run Code Online (Sandbox Code Playgroud)

其中hostname.tld是服务器的fqdn,12.34.56.78是服务器的公网IP。/etc/hostname 只包含 hostname.tld

当我收到电子邮件时,我得到了这个标题:

Received: from hostname.tld (hostname.tld [127.0.0.1])
Run Code Online (Sandbox Code Playgroud)

我不想要 127.0.0.1,我想要公共 IP,但是无论我做什么,我都无法让 sendmail 使用它。我还编辑了 /etc/mail/sendmail.mc 以获得以下行:

define(`confDOMAIN_NAME', `hostname.tld')dnl
Run Code Online (Sandbox Code Playgroud)

但它什么也不做。

我已经阅读了很多线程,其中人们遇到了类似的问题,但似乎没有任何解决方案。我能做什么?

slm*_*slm 3

守护进程模式与 MSP

您上面提到的IP地址的注释实际上并不是服务器sendmail本身的配置。如果您查看现代部署,sendmail它通常分为两个组件。传统服务器(守护进程模式)和另一台服务器运行在邮件提交程序模式(MSP)。您可以通过一个简单的命令看到这一点ps

$ ps -eaf | grep send
root     24488     1  0 21:10 ?        00:00:00 sendmail: accepting connections
smmsp    24504     1  0 21:10 ?        00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
Run Code Online (Sandbox Code Playgroud)

第一行是守护进程模式下的sendmail,第二行是MSP 模式下的sendmail。您始终可以区分它们,因为大多数附带 sendmail 的发行版都使 MSP 变体作为具有较低权限的特殊用户运行。这是它以用户身份在我的 CentOS 5.x 服务器上运行的情况smmsp

注意:这样做是为了分离处理邮件提交(MSP)和邮件传递(守护程序模式)的职责。用户在本地使用mail和等命令发送邮件时,会连接到 MSP 实例。mailx

在基于 Red Hat 的发行版(例如 CentOS)上处理 sendmail 时,配置文件位于此处:/etc/mail。我们对此修改感兴趣的文件有 2 个:

  • /etc/mail/sendmail.mc
  • /etc/mail/submit.mc

第一个文件控制守护程序模式服务器,而第二个文件用于 MSP 服务器。

顺便说一下,这些*.mc文件并不是两台服务器直接使用的实际配置文件;一般来说sendmail配置可能会很复杂。鉴于它的年龄和多功能性,它可以通过多种方式进行配置,因此这些*.mc文件是预配置文件,可以“编译”到实际的sendmail配置文件中。这些文件的编译版本也位于同一目录中:

  • /etc/mail/sendmail.cf
  • /etc/mail/submit.cf

通常明智的做法是不要直接更改这两个文件,而是通过其相应的.mc文件进行更改。您通常会编辑.mc文件,然后make/etc/mail目录内运行命令。据我所知,这又是一种红帽主义,所以另一个发行版可能会让事情有所不同。

注意: * 这些.mc文件采用名为M4的宏语言,因此编译它们的工具当然称为m4。您可以使用如下命令手动编译这些文件:

$ m4 /etc/mail/submit.mc > /etc/mail/submit.cf
Run Code Online (Sandbox Code Playgroud)

这就是Red Hat 在目录中提供的所有花哨的make内容。Makefile/etc/mail

对submit.cf 的更改

那么你需要做出哪些改变呢?需要将以下行附加到submit.mc文件中:

CLIENT_OPTIONS(`Family=inet, Address=<your ip here>, Name=MTA')dnl
Run Code Online (Sandbox Code Playgroud)

请务必在其显示的位置添加您的 IP <your ip here>。进行此更改后,您需要重新生成submit.mc文件。

$ cd /etc/mail && make
Run Code Online (Sandbox Code Playgroud)

重新生成文件后,.cf您需要重新启动sendmail

$ /etc/init.d/sendmail restart
-or-
$ /etc/init.d/sendmail reload
Run Code Online (Sandbox Code Playgroud)

完成品

进行上述更改后,您将看到以下标题。例如,在此示例中,我的外部 IP 地址是 50.122.22.45。

Return-Path: <root@mail.sdom.com>
Received: from mail.sdom.com (mail.sdom.com [50.122.22.45])
    by sdom.com (8.14.3/8.14.3) with ESMTP id r5J188Gx018193
    for <user@sdom.com>; Tue, 18 Jun 2013 21:08:08 -0400
Received: (from root@localhost)
    by mail.sdom.com (8.14.3/8.14.3/Submit) id r5J15ua4018000;
    Tue, 18 Jun 2013 21:05:56 -0400
Date: Tue, 18 Jun 2013 21:05:56 -0400
Message-Id: <201306190105.r5J15ua4018000@mail.sdom.com>
to:user@sdom.com
from:admin@hostname.tld
subject:Testing
X-Spam-Status: No, score=-4.4 required=5.0 tests=ALL_TRUSTED,BAYES_00
    autolearn=ham version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on mail.sdom.com
X-Greylist: Sender is SPF-compliant, not delayed by milter-greylist-4.0 (sdom.com [127.0.0.1]); Tue, 18 Jun 2013 21:08:09 -0400 (EDT)

test test test
Run Code Online (Sandbox Code Playgroud)

参考