为什么当 dig 找到主机时,postfix 会显示“Helo 命令被拒绝:找不到主机”?

Ada*_*ack 7 domain-name-system email postfix

所以我看到下面的错误Helo command rejected: Host not found;/var/log/syslog,但是当我做正向和反向查找有问题的主机,DNS记录似乎是合理的。有问题的邮件服务器endor,似乎可以正常接收邮件。

为什么 Postfix 会这么说(还有第二个问题,我应该更改设置来修复它吗?

因隐私而更改的电子邮件地址:

Jul 20 23:35:20 endor postfix/smtpd[1503]: NOQUEUE: reject: RCPT from
bdmrob01-2.metavante.com[206.71.18.21]: 450 4.7.1
<bdmrob02.metavante.com>: Helo command rejected: Host not found;
from=<bbankingonline@mybank.com>
to=<myemail@fqdn.org> proto=ESMTP
helo=<bdmrob02.metavante.com>
Run Code Online (Sandbox Code Playgroud)

但是 DNS 看起来不错:

endor% dig bdmrob01-2.metavante.com

; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> bdmrob01-2.metavante.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32487
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;bdmrob01-2.metavante.com.  IN  A

;; ANSWER SECTION:
bdmrob01-2.metavante.com. 600   IN  A   206.71.18.21

endor% dig -x 206.71.18.21

; <<>> DiG 9.11.3-1ubuntu1.1-Ubuntu <<>> -x 206.71.18.21
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40586
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;21.18.71.206.in-addr.arpa. IN  PTR

;; ANSWER SECTION:
21.18.71.206.in-addr.arpa. 600  IN  PTR bdmrob01-2.metavante.com.
Run Code Online (Sandbox Code Playgroud)

我应该提到,main.cf 说:

smtpd_helo_restrictions = 
reject_non_fqdn_helo_hostname,reject_invalid_helo_hostname,reject_unknown_helo_hostname
Run Code Online (Sandbox Code Playgroud)

Wes*_*ley 9

答案一直盯着我们看。

Postfix 正在寻找主机的APTR记录来问候它HELO。或者,更准确地说,是主机在其 HELO 消息中所说的主机。让我们分解一下:

Jul 20 23:35:20 endor postfix/smtpd[1503]: NOQUEUE: reject: RCPT from
bdmrob01-2.metavante.com[206.71.18.21]:
Run Code Online (Sandbox Code Playgroud)

bdmrob01-2.metavante.com解析为 IP 地址的主机206.71.18.21与您的邮件服务器建立 TCP 连接。

因此,您检查了 A 记录的 IP 地址:

endor% dig bdmrob01-2.metavante.com
[...]
;; ANSWER SECTION:
bdmrob01-2.metavante.com. 600   IN  A   206.71.18.21
Run Code Online (Sandbox Code Playgroud)

然后你检查了它的 PTR 记录:

endor% dig -x 206.71.18.21
;; ANSWER SECTION:
21.18.71.206.in-addr.arpa. 600  IN  PTR bdmrob01-2.metavante.com.
Run Code Online (Sandbox Code Playgroud)

这一切看起来都不错。所以有什么问题?连接的主机肯定是通过上面的主机名和IP地址来识别的,但它并没有说那是谁。它说:

helo=<bdmrob02.metavante.com>
Run Code Online (Sandbox Code Playgroud)

该主机具有 A 记录:

$ dig a bdmrob02.metavante.com
[...]
;; ANSWER SECTION:
bdmrob02.metavante.com. 0   IN  A   92.242.140.2
Run Code Online (Sandbox Code Playgroud)

但是,它的 IP 地址没有PTR记录:

$ dig -x 92.242.140.2
[...]
;; ANSWER SECTION:
2.140.242.92.in-addr.arpa. 84155 IN PTR unallocated.barefruit.co.uk.
Run Code Online (Sandbox Code Playgroud)

这是他们的问题。在那之前,您将不得不接受它,或者更改您的 postfix 服务器,以免打扰HELO命令的正向和反向查找