Ubuntu sendmail“中繼被拒絕。IP 名稱可能偽造”(回复 rcpt 到命令)
當我嘗試將電子郵件(從不同的伺服器)發送到我伺服器上的本地帳戶時,我收到以下錯誤:
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_rcpt
beforeRelay_ok
)決定了這一點。現在從 OP 給出的描述來看,Ubuntu sendmail 似乎不會自動將名稱包含在
/etc/hosts
$=w 中,這就是為什麼需要特別包含 localhost.localdomain 的原因。但為什麼?$$ Had the original poster posted the complete sendmail.mc it would have helped a lot $$