Ubuntu发送邮件“中继拒绝。 IP名称可能伪造“(回复命令)

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

Relaying denied. IP name possibly forged [WXYZ] 

这就是我所做的:

 [email protected]:~$ telnet subdomain.domain.com 25 Trying ABCD.. 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 [WXYZ] 

问题是我可以发送电子邮件就好了,如果我使用RCPT TO: <[email protected]>而不是RCPT TO: <[email protected]>

请参阅下面我目前使用的configuration。

DNSconfiguration:

 Host Type Priority Redirect to subdomain.domain.com MX 10 mail.subdomain.domain.com subdomain.domain.com A 10 ABCD 

邮件服务器configuration:

 OS: Ubuntu Email Server: sendmail 

在/ etc / mail / access中我有(除其他外):

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

在/ etc /邮件/本地主机名:

 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地址。

================= UPDATE1 =================

@Andrzej A. Filip

是的,我重新启动了sendmail。

这是echo '$=w' | sendmail -Am -bt的输出 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> > [ABCD] 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 

================= UPDATE2 =================

我testing,发现(不更改DNSconfiguration),如果我添加subdomainXXX.domain.com(其中subdomainXXX是任何string)到/ etc /邮件/本地主机名,然后我testing从远程服务器发送电子邮件它只是工作:

 user@remote-server:/# telnet subdomain.domain.com 25 Trying ABCD.. 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 – 实际上是服务器的主机名)。

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

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

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

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

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

所以问题是:如果你改变的是从/etc/mail/local-host-names包含或删除localhost.localdomain ,那么Relay_ok为什么拒绝或接受基于这个事实的电子邮件? Relay_ok有趣的Relay_ok是:

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

当localhost.localdomain不包含在/etc/mail/local-host-name我们从$&{client_resolve}得到一个<FORGED>回复。 当它被包括,我们不明白这一点。 所以关于中继的决定在调用Relay_ok之前发生。 这意味着Rcpt_ok (在Basic_check_rcpt之前在Basic_check_rcpt再次调用)决定。

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

[原来的海报张贴完整的sendmail.mc会帮助很多]

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

localhost.localdomain需要和/etc/mail/local-host-names subdomain.domain放在一起。

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

 localhost localhost.localdomain subdomain.domain.com 

如果你只使用:

 localhost subdomain.domain.com