垃圾邮件传递 postfix 配置“主机名无法解析地址:没有与主机名关联的地址”

垃圾邮件传递 postfix 配置“主机名无法解析地址:没有与主机名关联的地址”

在 postfix MTA MX 设置中,我有一封垃圾邮件通过了两次检查,但这是绝对不应该的。

postfix/smtpd过程记录这些警告,应该在这个设置中是一个严重的失败:

  • hostname * does not resolve to address *: No address associated with hostname
  • Unable to look up MX host * for Helo command *: No address associated with hostname

相关邮件日志如下:

postfix/smtpd: warning: hostname peggy-langley.colormemobile.com does not resolve to address 45.58.139.69: No address associated with hostname
postfix/smtpd: connect from unknown[45.58.139.69]
postfix/smtpd: warning: Unable to look up MX host mail.intrcomm.net for Helo command eldoark.com: No address associated with hostname
policyd-spf: prepend Received-SPF: Neutral (mailfrom) identity=mailfrom; client-ip=45.58.139.69; helo=eldoark.com; [email protected]; receiver=<UNKNOWN>
postgrey: action=greylist, reason=new, client_name=unknown, client_address=45.58.139.69, [email protected], recipient=<hidden>
postfix/smtpd: NOQUEUE: reject: RCPT from unknown[45.58.139.69]: 450 4.2.0 <hidden>: Recipient address rejected: Greylisted, try again later; from=<[email protected]> to=<hidden> proto=ESMTP helo=<eldoark.com>

这甚至不应该进入灰名单,也不应该通过稍后会阻止它的进一步检查。
原因如下:

  • 45.58.139.69有 PTR 记录peggy-langley.colormemobile.com,但是该域名没有 A/AAAA IP 记录(也没有 MX 记录)。
  • 的 HELOeldoark.com具有 的 MX 记录mail.intrcomm.net,但是此子域名没有 A/AAAA IP 记录。

我找不到postconf 设置这会使这些警告变成错误,我想知道我是否必须在那里写自己的支票。
postfix 日志警告,它意识到了这些问题,所以希望我只是遗漏了一些东西?


MTA 配置有

smtpd_delay_reject = yes    
smtpd_helo_required = yes
smtpd_helo_restrictions =
    [...]
    reject_unknown_helo_hostname,
    [...]
    permit

smtpd_sender_restrictions =
    [...]
    reject_unknown_sender_domain,
    [...]
    permit

我本来以为其中一个或者两个都应该切断这个连接,但仔细观察后发现,这些检查似乎还不够:

拒绝未知的 helo 主机名:当 HELO 或 EHLO 主机名没有 DNS A 或 MX 记录时拒绝请求。

显然,HELO 域名有 A 和 MX 记录(只有 MX 解析失败)。所以这似乎可以通过。

拒绝未知发件人域名:当 Postfix 不是发件人地址的最终目的地,并且 MAIL FROM 域具有 1) 没有 DNS MX 和 DNS A 记录,或 2) 格式错误的 MX 记录(例如长度为零的 MX 主机名的记录)时,拒绝请求

MAIL FROM([email protected])显然是伪造的,所以这根本没有帮助?

编辑:添加了请求的 SMTP 记录,值得一提

Out: 220 my.domain.name ESMTP Postfix
In:  EHLO eldoark.com
Out: 250-my.domain.name
Out: 250-PIPELINING
Out: 250-ETRN
Out: 250-STARTTLS
Out: 250-ENHANCEDSTATUSCODES
Out: 250-8BITMIME
Out: 250-DSN
Out: 250 SMTPUTF8
In:  MAIL FROM:<[email protected]> BODY=8BITMIME
Out: 250 2.1.0 Ok
In:  RCPT TO:<hidden>
Out: 450 4.2.0 <hidden>: Recipient address rejected:
     Greylisted, try again later
In:  QUIT
Out: 221 2.0.0 Bye

答案1

从#postfix@freenode IRC,我得到了有用的提示(感谢,JPT),连接 IP/主机名当然已经签入smtpd_client_restrictions

smtpd_client_restrictions =
    [...]
    reject_unknown_reverse_client_hostname,
    [...]

我的现有reject_unknown_reverse_client_hostname条目仅检查缺少的客户端 IP 地址地址->名称映射!我现在已将其替换为更严格的reject_unknown_client_hostname检查,这应该会“消除”第一个警告:

拒绝未知客户端主机名:当1)客户端IP地址->名称映射失败,或2)名称->地址映射失败,或3)名称->地址映射与客户端IP地址不匹配时拒绝请求。

Postfix 似乎没有为第二个警告提供拒绝选项: postfix/smtpd: warning: Unable to look up MX host mail.intrcomm.net for Helo command eldoark.com: No address associated with hostname

也许这很有道理,我不能即兴地说出来。(要清楚:如果没有 MX 主机,只有 A 记录,这对我来说是有效且可以接受的,但指向 nirvana 的 MX 主机不应该被接受?如果有人知道强制执行该配置,我很想知道。)

编辑: 解决的主要问题:

postfix/smtpd[13599]: warning: hostname extremetech.com does not resolve to address 23.94.113.133
postfix/smtpd[13599]: connect from unknown[23.94.113.133]
postfix/smtpd[13599]: NOQUEUE: reject: RCPT from unknown[23.94.113.133]: 450 4.7.25 Client host rejected: cannot find your hostname, [23.94.113.133]; from=<[email protected]> to=<hidden> proto=ESMTP helo=<lapolla.com>
postfix/smtpd[13599]: disconnect from unknown[23.94.113.133] ehlo=1 mail=1 rcpt=0/1 data=0/1 quit=1 commands=3/5

答案2

如果不查看此 SMTP 事务的完整日志,很难判断,但 Postfix 实际上不会拒绝邮件,直到客户端发送 RCPT TO 命令之后。它可能知道自己会拒绝,但实际上不会这样做。原因是,一些客户端不会检查事务期间邮件是否被拒绝,并继续尝试传递,因此连接时间会比需要的更长。

如果设置 smtpd_delay_reject = no,那么 Postfix 将在评估规则后立即拒绝。我不确定这是不是一个好主意。

如果没有看到整个配置,就很难知道这里发生了什么。

相关内容