Когда я пытаюсь отправить электронное письмо (с другого сервера) на локальную учетную запись на моем сервере, я получаю следующую ошибку:
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 / local-host-names:
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
:
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 - который на самом деле является именем хоста сервера).
Я посмотрел свой sendmail.cf. Сообщение об ошибке, которое вы даете Relaying denied. IP name possibly forged
происходит в Relay_ok
набор правил. Relay_ok
выполняется Basic_check_rcpt
, который, в свою очередь, выполняется checkrcpt
который, в свою очередь, выполняется check_rcpt
(сбивает с толку, я знаю). Ошибка возникает, когда значение для $&{client_resolve}
ПОДДЕЛЬНО, что означает, что прямой поиск не соответствует обратному поиску в 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, он бы очень помог]
"Relaying denied"
suggets, которые sendmail на mail.subdomain.domain.com не обрабатывает subdomain.domain.com как локальный домен электронной почты, домен электронной почты, размещенный на нем.
Вы перезагружали / перезагружали сервер sendmail после изменения файла / etc / mail / local-host-name на хосте mail.subdomain.domain.com?
ДА => Что сообщает приведенная ниже команда, выполняемая пользователем root на хосте mail.subdomain.domain.com?
echo '$=w' | sendmail -Am -bt
И ... через несколько часов я обнаружил проблему:
localhost.localdomain
нужно поставить рядом с subdomain.domain
в /etc/mail/local-host-names
.
Итак, правильный контент для /etc/mail/local-host-names
должно быть:
localhost
localhost.localdomain
subdomain.domain.com
Оно делает НЕ РАБОТАЕТ если вы используете только:
localhost
subdomain.domain.com