我正在尝试向其发送邮件的某个远程 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的这篇文章中找到:
Exim 在 EHLO/HELO 中使用的名称是从配置选项中提取的
primary_hostname
。Debian 的 exim4 默认配置没有设置primary_hostname
. Exim 然后默认使用 uname() 来查找主机名。如果该调用仅返回一个组件,则使用 gethostbyname() 或 getipnodebyname() 来获取完全限定的主机名。如果您的 Exim HELO 为 localhost.localdomain,那么您很可能有一个由某些版本的 Debian 安装程序创建的错误配置的 /etc/hosts。在这种情况下,请修复您的 /etc/hosts。
不幸的是,我对 Linux 服务器管理不够熟悉,无法确切知道这一切意味着什么:(
您的 /etc/hosts 文件中应该至少有两条记录。第一条记录应采用以下形式:
第二个应该是以下形式:
您还需要确保您的 /etc/hostname 文件包含服务器的 FQDN,并且运行
hostname -f
返回您的服务器 FQDN。如果您确保所有这些都是正确的,然后重新启动 Exim,您应该开始正确地看到它 HELO。如果您使用单个配置文件,请将 PRIMARY_HOST_NAME 变量设置为所需的名称:
例如在 /etc/exim4/exim4.conf 中:
MAIN_HARDCODE_PRIMARY_HOSTNAME
如果您使用的是拆分文件配置,或者在 update-exim4.conf.conf 中设置。为了安全起见,请重新启动 exim。
在 exim4 的安装过程中会提示输入主主机名。你可以运行命令
再次通过提示。
据我所知,如果您已经在使用“拆分配置”(/etc/exim4/conf.d 下有很多小文件)并在出现提示时选择坚持使用,dpkg-reconfigure 不应覆盖任何除了提示您设置的设置之外,您现有的配置更改,但是,与以往一样,您应该首先进行备份以确保安全。
该
primary_hostname
变量根据系统的完全限定域名(FQDN)填充。在 Debian 和相关系统上,这通常是使用/etc/hostname
和/etc/hosts
文件的内容形成的。主机名文件应包含短主机名(例如foo
),并且主机文件应包含解析foo
为的条目foo.bar.baz
,即带有域后缀的主机名(通常与 DNS 条目匹配)。命令的输出
hostname
(不带任何参数)将返回前者,hostname -f
输出将返回后者。主机名文件通常在安装时填写,并且可以编辑主机文件以在默认本地主机记录旁边包含另一条记录 - 它应该是以下形式:
三列应该用空格或制表符分隔,没关系。IP地址可以和localhost一样是127.0.0.1,但是hostname部分和系统hostname匹配,中间部分应该是FQDN,即带域后缀的hostname。
要验证该行是否正常工作,只需运行
hostname -f
并检查它是否返回您的服务器的 FQDN。最后,重启 Exim,例如:
之后你应该开始正确地看到它 HELO。它的变量可以通过运行来验证:
(注意:我最初这样做是为了对 2009 年的答案进行编辑,但它被拒绝了。我最初修复的事情是:不需要重复默认的 localhost 记录,只需解释应该添加什么;解释哪个可以使用 IP 地址;解释什么是 FQDN;解释如何验证 exim 本身。)
在 /etc/hosts 中添加相同的字符串后,hostname -f将返回您的 FQDN
我也有同样的问题。我需要更改邮件主机名,因为某些电子邮件在发送时失败。出现此错误:
所以我把它改成
/etc/exim.config
参数primary_hostname该文件的一些代码:
在 WHM 中转到 Exim 配置管理器 -> 高级编辑器
向下滚动,直到找到“添加其他配置设置”(一个蓝色的大按钮)并单击它。
在新行中,添加 [ primary_hostname ] = [ mydomain.com ]
滚动到底部并单击保存。
我花了一些时间来计算更改主机名所需的所有步骤,所以这个答案是在一个地方总结 Debian 9 的所有内容:
要更改主机名,您需要运行:
注意:使用您的域 FQN 作为主机名。如果您使用其他东西 - 您将收到邮件传递拒绝,例如“Helo 命令被拒绝:需要完全限定的主机名”。
最后:编辑
/etc/hosts
使其看起来像:xxx.xxx.xxx.xxx
是您的服务器的 IP。然后通过运行验证更改
它必须返回
example.com
。然后运行
它必须返回您的域 FQN,例如
example.com
还要验证是否
/etc/hostname
包含example.com
并更改它,以便在操作系统重新启动后主机名仍然存在。操作系统部分完成。让我们继续exim。
为确保 exim 使用新主机名,您需要编辑
/etc/exim4/exim4.conf.localmacros
并添加行:注意:exim 配置编辑是可选的,如果
/usr/sbin/exim4 -bP primary_hostname
返回您的新主机名 -/etc/exim4/exim4.conf.localmacros
不需要编辑。但是您仍然必须更新 exim 配置并重新启动 exim:
最后通过运行验证 exim 主机名
它必须返回
example.com