Ubuntu sendmail“拒绝中继。IP 名称可能被伪造”(回复 rcpt 命令)

Ubuntu sendmail“拒绝中继。IP 名称可能被伪造”(回复 rcpt 命令)

当我尝试向服务器上的本地帐户发送电子邮件(来自不同的服务器)时,出现以下错误:

Relaying denied. IP name possibly forged [W.X.Y.Z]

这是我的做法:

[email protected]:~$ telnet subdomain.domain.com 25
Trying A.B.C.D...
Connected to subdomain.domain.com.
Escape character is '^]'.
220 subdomain.domain.com ESMTP Sendmail 8.14.4/8.14.4/Debian-2ubuntu1; ...
HELO a-different-domain.com
250 subdomain.domain.com Hello ...
MAIL FROM: <[email protected]>
250 2.1.0 <[email protected]>... Sender ok
RCPT TO: <[email protected]>
550 5.7.1 <[email protected]>... Relaying denied. IP name possibly forged [W.X.Y.Z]

问题是,如果我使用而不是RCPT TO: <[email protected]>RCPT TO: <[email protected]>

请参阅下面我当前使用的配置。

DNS 配置:

Host                 Type  Priority  Redirect to
subdomain.domain.com MX    10        mail.subdomain.domain.com
subdomain.domain.com A     10        A.B.C.D

电子邮件服务器配置:

OS: Ubuntu
Email Server: sendmail

在 /etc/mail/access 中我有(其中包括):

mail.subdomain.domain.com
subdomain.domain.com

/etc/mail/本地主机名:

localhost
mail.subdomain.domain.com
subdomain.domain.com

关于伪装,我在 /etc/mail/sendmail.mc 中的内容如下:

MASQUERADE_AS(`subdomain.domain.com')dnl
MASQUERADE_DOMAIN(`subdomain.domain.com.')dnl
MASQUERADE_DOMAIN(localhost)dnl
MASQUERADE_DOMAIN(localhost.localdomain)dnl

仅需澄清:mail.subdomain.domain.com 和 subdomain.domain.com 指向同一个 IP 地址。

================= 更新1 ==================

@Andrzej A. Filip

是的,我重新启动了 sendmail。

以下是输出echo '$=w' | sendmail -Am -bt

root@subdomain:/etc/mail# echo '$=w' | sendmail -Am -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> [A.B.C.D]
mail.subdomain.domain.com
[ip6-loopback]
localhost
subdomain
ip6-localhost
[127.0.0.1]
[127.0.0.2]
subdomain.domain.com
[ip6-localhost]
ip6-loopback

================= 更新2 ==================

我测试并发现(无需更改 DNS 配置),如果我将 subdomainXXX.domain.com(其中 subdomainXXX 是任意字符串)添加到 /etc/mail/local-host-names,然后测试从远程服务器发送电子邮件,它就可以正常工作:

user@remote-server:/# telnet subdomain.domain.com 25
Trying A.B.C.D...
Connected to subdomain.domain.com.
Escape character is '^]'.
220 subdomain.domain.com ESMTP Sendmail 8.14.4/8.14.4/Debian-2ubuntu1; ...
HELO remote-server
250 subdomain.domain.com Hello ....
MAIL FROM: <...>
250 2.1.0 <...>... Sender ok
RCPT TO: <[email protected]>
250 2.1.5 <[email protected]>... Recipient ok

因此,它适用于除我感兴趣的子域(subdomain.domain.com - 实际上是服务器的主机名)之外的任何子域。

答案1

"Relaying denied"建议 mail.subdomain.domain.com 上的 sendmail 不将 subdomain.domain.com 视为本地电子邮件域,即由其托管的电子邮件域。

在修改 mail.subdomain.domain.com 主机上的 /etc/mail/local-host-name 文件后,您是否重新启动/重新加载了 sendmail 服务器?

是 => 在 mail.subdomain.domain.com 主机上由 root 执行的以下命令会报告什么?

echo '$=w' | sendmail -Am -bt

答案2

几个小时后,我发现了这个问题:

localhost.localdomainsubdomain.domain需要与in放在一起/etc/mail/local-host-names

因此,正确的内容/etc/mail/local-host-names应该是:

localhost
localhost.localdomain
subdomain.domain.com

确实如此不行如果你只使用:

localhost
subdomain.domain.com

答案3

我查看了我的 sendmail.cf。您给出的错误消息Relaying denied. IP name possibly forged发生在Relay_ok规则集中。Relay_ok由 执行Basic_check_rcpt,而后者又由 执行,checkrcpt而后者又由 执行check_rcpt(我知道这很令人困惑)。当 的值为$&{client_resolve}FORGED 时会发生错误,这意味着正向查找与反向 DNS 查找不匹配。

所以问题是:如果你所做的更改只是包括或删除localhost.localdomain/etc/mail/local-host-names那么为什么会Relay_ok根据这一事实拒绝或接受电子邮件? 中有趣的几行Relay_ok是:

SRelay_ok
R$*                     $: $&{client_addr}
:
R$*                     $: < $&{client_resolve} >

当 localhost.localdomain 不包含在 中时,/etc/mail/local-host-name我们会收到<FORGED>的回复$&{client_resolve}。当包含 时,我们不会收到此回复。因此,有关中继的决定发生在调用 之前Relay_ok。这意味着Rcpt_ok(再次在Basic_check_rcpt之前调用Relay_ok)决定了这一点。

现在从 OP 给出的描述来看,Ubuntu sendmail 似乎不会自动将名称包含在/etc/hosts$=w 中,这就是为什么需要特别包含 localhost.localdomain。但为什么呢?

[ 如果原始发帖者发布了完整的 sendmail.mc,那将会有很大帮助 ]

相关内容