如何在Debian机器上更改Exim4的primary_hostname?


24

我试图将邮件传递给某些远程SMTP服务器,以拒绝从我的服务器接受HELO:

504 5.5.2 <localhost>: Helo command rejected: need fully-qualified hostname

显然,我的Exim4服务器localhost以其FQDN 发送。搜索网络和一堆配置文件,我了解到在HELO期间以FQDN形式发送的值是从primary_hostname配置变量中提取的。

我的问题是:在Debian系统中更改此变量的正确方法是什么?我想我可以简单地在一个Exim4配置文件中对一个值进行硬编码,但是恕我直言,如果该值自动地对应于/etc/mailname某个或其他集中式名称配置,则似乎更有意义。

我觉得可以在Debian Wiki的以下文本中找到我的问题的答案:

Exh在EHLO / HELO中使用的名称是从配置选项中提取的primary_hostname。Debian的exim4默认配置未设置primary_hostname。然后,Exim默认为uname()来查找主机名。如果该调用仅返回一个组件,则使用gethostbyname()或getipnodebyname()获取完全限定的主机名。

如果您的Exim HELO为localhost.localdomain,则很可能是由某些版本的Debian安装程序创建的/ etc / hosts配置错误。在这种情况下,请修复您的/ etc / hosts。

不幸的是,我对Linux服务器管理还不够熟悉,无法确切地知道所有这些意味着什么:(

Answers:


21

/ etc / hosts文件中至少应包含两个记录。第一条记录应采用以下格式:

<IP_ADDRESS> <HOST_FQDN> <HOSTNAME>

第二个应采用以下形式:

127.0.0.1 localhost

您还需要确保/ etc / hostname文件包含服务器的FQDN,并且正在运行hostname -f返回您的服务器FQDN。如果确保所有步骤均正确无误,然后重新启动Exim,则应开始正确查看它。


我已经将/ etc / hostname从本地计算机名称更改为FQDN。hostname -f仍然报告“本地主机”。您的答案中有关/ etc / hosts的部分似乎有问题-应该是第一个记录是什么样的?
约恩·舒德罗德(JørnSchou-Rode)2009年

1
虽然hostname -f仍然报告“ localhost”,但似乎对/ etc / hostname的更改确实可以解决问题-我现在可以发送邮件了。我还是想看到您的帖子虽然:)的缺失部分
约恩休乌-罗德

糟糕!格式化节棍。固定:-)
Paul Lathrop

1
/etc/hostname在Debian系统上通常不包含FQDN,仅包含简短的主机名。
Josip Rodin

好吧,其中的第一行/etc/hosts可能是127.0.0.2 mydomain.com myhostname127.0.0.2与一样工作127.0.0.1,因为回送是A类网络)。您可能可以将这两行合并为一127.0.0.1 mydomain.com myhostname localhost,但是localhost是的规范主机名127.0.0.1,不是吗?假设您拥有主机名,而不是FQDN作为主机名。此外,/etc/hostname您必须立即更改才能立即生效hostname myhostname。或重新启动服务器。
x-yuri

8

如果使用单个配置文件,则将PRIMARY_HOST_NAME变量设置为所需的名称:

例如在/etc/exim4/exim4.conf中:

PRIMARY_HOST_NAME = mybox.mydomain.com

MAIN_HARDCODE_PRIMARY_HOSTNAME在使用拆分文件配置时在update-exim4.conf.conf中设置。

为了安全起见,请重新启动exim。


请注意,列出的主机不能用引号引起来,否则HELO 'mybox.mydomain.com'将发送exim发送,这会中断向Google(也许其他人)发送邮件的过程。
mkomarinski

1
在文档中找不到该“ PRIMARY_HOST_NAME”变量名称的任何提及。您在哪里找到的?
Josip Rodin

在Debian上,您必须update-exim4.conf更改配置后才能运行。并且此后通常不需要重新启动。
x-yuri

...好吧,exim通常情况下似乎无需重新加载即可注意到对配置的更改。但是重新加载可以说更安全,因为我认为守护程序本身在重新加载之前不会重新读取配置。然后,您听起来像/etc/exim4/exim4.conf可能只包含上面的行,但是在您创建文件的那一刻,它/var/lib/exim4/config.autogenerated会被忽略……
x-yuri

...“ Exim为SMTP接收或队列运行而启动的分叉进程将使用新的配置文件,而原始的主要exim-daemon仍将使用旧的配置文件。” 因此,对于单个配置文件,最好使用/etc/exim4/exim4.conf.localmacros进行拆分/etc/exim4/conf.d/main/000_localmacrosmain首先处理dir中的文件)。并在进行更改后运行update-exim4.conf+ systemctl reload exim4
x-yuri

4

在安装exim4时会提示输入主要主机名。您可以运行命令

sudo dpkg-reconfigure exim4-config

重新浏览提示。

据我所知,如果您已经在使用'split configuration'(/etc/exim4/conf.d下的许多小文件)并选择在提示时坚持使用,dpkg-reconfigure不应覆盖任何您现有的配置更改(除了提示您进行的设置之外),但是,与以往一样,为了安全起见,您应该先备份。


2
似乎只要求输入“邮件名[哪个]应该是唯一的完全限定的域名(FQDN)”。但是,此设置已经正确,并且HELO似乎仍然说“ localhost”。
约恩·舒德罗德(JørnSchou-Rode)

您所说的是一个邮件名称,该邮件名称会出现“惊喜”,“惊喜”,“ /etc/mailname。”。默认情况下,它用于限定不合格的地址。只包含用户名的用户。通过添加来自的域名/etc/mailname。结果地址用于From标题中。
x-yuri

2

primary_hostname变量是根据该系统的完全合格域名(FQDN)填充。在Debian和相关系统上,这通常是使用/etc/hostname/etc/hosts文件的内容来形成的。主机名文件应包含简短的主机名(例如foo),并且主机文件应包含解析foo为的条目foo.bar.baz,即带有域名后缀的主机名(通常与DNS条目匹配)。

命令的输出hostname(不带任何参数)将返回前者,而hostname -f输出将返回后者。

通常会在安装时填充主机名文件,并且可以编辑主机文件以在其中包含默认的localhost记录之外的其他记录-它的格式应为:

<IP address> <hostname FQDN> <hostname>

这三列应该用空格或制表符分隔,没关系。IP地址可以像localhost一样为127.0.0.1,但是主机名部分与系统主机名匹配,中间部分应为FQDN,即带有域后缀的主机名。

要验证线路是否正常运行,只需运行hostname -f并检查它是否返回服务器的FQDN。

最后,重新启动Exim,例如:

sudo service exim4 restart

之后,您应该开始正确看到它了。可以通过运行以下命令来验证其变量:

/usr/sbin/exim4 -bP primary_hostname

(注意:我最初是为了编辑2009年的答案,但后来被拒绝了。我最初解决的问题是:无需重复默认的localhost记录,只需解释添加的内容;解释其中的内容即可。可以使用IP地址;说明什么是FQDN;说明如何验证exim本身。)


/usr/sbin/exim4 -bP primary_hostname不起作用。您可以通过向port25的身份验证检查器或任何其他可以查看原始邮箱的邮箱发送测试电子邮件来验证HELO主机名。在这里更多。考虑更新您的答案。
x-yuri

它在我的Debian稳定机(拉伸)上可以正常工作。您能解释一下它对您不起作用吗?请注意exim.org/exim-html-current/doc/html/spec_html/…中的文档,明确指出默认helo_data值为$primary_hostname。在Debian系统上,您可以使用REMOTE_SMTP_HELO_DATA变量来覆盖它,但是如果您只是正确设置了主主机名,则没有必要。
Josip Rodin

我相信我曾尝试过,但它抱怨没有提出意见。但是现在无法重现,所以没关系,我的糟糕。关于“如果您只是正确设置了主主机名”,通常不接受主机名必须解析为任何内容。因此,假设“如果您以exim期望的方式设置主机名...”,然后将其保留在该位置:)
x-yuri

抱歉,但我不以十足的面貌从十年前的漫长的debian-devel讨论中得出任何临时结论是不明智的。如果您指向有关此类问题的一些政策文档,那将更有帮助。
Josip Rodin

那是我所能找到的最好的。如果您能找到更好的东西或您的语言证明,如果您告诉我,我将很高兴。就目前而言,我只能说,即使是最近几天,也有人不将主机名添加到/etc/hosts。我要问的是不正确地称呼不被普遍接受的东西。
x-yuri

1

在/ etc / hosts中添加相同的字符串后,主机名-f将返回您的FQDN


换句话说,myhostname转到/etc/hostname(后跟hostname myhostname)。然后127.0.0.1 mydomain.com myhostname.com localhost/etc/hosts。加上重新加载exim以防万一。
x-yuri

0

我也有同样的问题。我需要更改邮件主机名,因为某些电子邮件在发送时会失败。出现此错误:

host receiver.server.com [200.200.200.200]: 550 <info@sender.server.com>: Sender address rejected: Domain not found

所以我将其更改为/etc/exim.config参数primary_hostname

该文件的一些代码:

smtp_connect_backlog = 50
smtp_accept_max = 100

#primary_hostname = myhostname.com 
deliver_queue_load_max = 3

嗯,这篇文章为我提供了“ primary_hostname”帮助,现在我的exim工作得比以往更好:)

0

在WHM中转到Exim Configuration Manager->高级编辑器

向下滚动,直到找到“添加其他配置设置”(蓝色的大按钮)并单击它。

在新行中,添加[primary_hostname] = [mydomain.com]

滚动到底部,然后单击保存。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.