当我尝试向服务器上的本地帐户发送电子邮件(来自不同的服务器)时,出现以下错误:
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.localdomain
subdomain.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,那将会有很大帮助 ]