Ubuntu

Ubuntu sendmail“中繼被拒絕。IP 名稱可能偽造”(回复 rcpt 到命令)

  • March 17, 2013

當我嘗試將電子郵件(從不同的伺服器)發送到我伺服器上的本地帳戶時,我收到以下錯誤:

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

這就是我所做的:

user@a-different-domain.com:~$ 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: <user@a-different-domain.com>
250 2.1.0 <user@a-different-domain.com>... Sender ok
RCPT TO: <user@subdomain.domain.com>
550 5.7.1 <user@subdomain.domain.com>... Relaying denied. IP name possibly forged [W.X.Y.Z]

RCPT TO: <user@mail.subdomain.domain.com>問題是,如果我使用而不是,我可以發送電子郵件就好了RCPT TO: <user@subdomain.domain.com>

請看下面我目前使用的配置。

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

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

@Andrzej A.菲利普

是的,我重新啟動了 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

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

我測試並發現(不更改 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: <root@subdomainXXX.domain.com>
250 2.1.5 <root@subdomainXXX.domain.com>... Recipient ok

所以它適用於任何子域,除了我感興趣的子域(subdomain.domain.com - 實際上是伺服器的主機名)。

"Relaying denied"建議在 mail.subdomain.domain.com 上發送郵件不會將 subdomain.domain.com 視為本地電子郵件域,即由它託管的電子郵件域。

在 mail.subdomain.domain.com 主機上修改 /etc/mail/local-host-name 文件後,您是否重新啟動/重新載入了 sendmail 伺服器?

YES=> 由 root 在 mail.subdomain.domain.com 主機上執行的以下命令報告了什麼?

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

我查看了我的 sendmail.cf。您給出的錯誤消息Relaying denied. IP name possibly forged發生在Relay_ok規則集中。Relay_ok由 執行Basic_check_rcpt,而後者又由其執行,checkrcpt而後者又由check_rcpt(我知道令人困惑)執行。當 for 的值$&{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_rcptbefore Relay_ok)決定了這一點。

現在從 OP 給出的描述來看,Ubuntu sendmail 似乎不會自動將名稱包含在/etc/hosts$=w 中,這就是為什麼需要特別包含 localhost.localdomain 的原因。但為什麼?

$$ Had the original poster posted the complete sendmail.mc it would have helped a lot $$

引用自:https://serverfault.com/questions/488244