当我尝试发送电子邮件(从不同的服务器)到我的服务器上的本地帐户时,出现以下错误:
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_ok
由Basic_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