opendmarc:hostnamefqdn() 仅显示短名称/helo 命令拒绝 fqdn

opendmarc:hostnamefqdn() 仅显示短名称/helo 命令拒绝 fqdn

我对 opendmarc 有疑问。该软件使用 perl 函数发送报告邮件。因此,在源代码中,我看到 /etc/opendmarc_reports 还使用函数 hostnamefqdn() 将其传递给 helo 命令 smtp。然后我在 postfix 日志中看到此消息:Helo 命令被拒绝:需要完全限定的主机名。

我的配置:/etc/hosts

127.0.1.1 mail.本地邮件

/etc/主机名

邮件

$ hostname -f
mail.local
$ perl -e 'use Net::Domain qw(hostfqdn); print hostfqdn()."\n";'
mail

为什么 perl 函数 hostnamefqdn() 在这种情况下仅返回短名称域而不是 fqdn ? 当然,当我将主机名更改为 mail.local 时,一切正常。

答案1

大多数尝试确定主机的 FQDN 的代码都是通过查看 gethostbyname() 或 getaddrinfo() 函数返回的“规范名称”字段来实现的。

当 /etc/hosts 处理查找时,第一的每行中的名称是该条目的“规范”名称,其余的是“别名”。您的条目应如下所示:

127.0.1.1 mail.local mail

答案2

Net::Domain 在几个地方查找域:

  1. 网络::配置
  2. /etc/resolv.conf -searchdomain选项
  3. NIS(通过domainname命令)
  4. LOCALDOMAIN 和 DOMAIN 环境变量
  5. /etc/hosts、DNS(通过gethostbyname

根据代码中的注释,该模块旨在尽可能避免 DNS 请求。

相关内容