Как настроить sendmail для отправки почты через MX-запись, а не на localhost?


8

Я пытаюсь заставить sendmail пересылать почту на серверы, указанные в записях MX, поэтому, когда сервер отправляет электронное письмо на адрес me@domain.com, я хочу, чтобы он пропустил localhost и сразу перешел к gmail.

Я просмотрел документы по sendmail, но не совсем понимаю, как объяснить мою ситуацию. По сути, имя хоста моего сервера - «www.domain.com», но когда я отправляю электронное письмо на «me@domain.com», оно попадает в локальную почтовую папку.

Когда я запускаю sendmail в режиме отладки:

sendmail -bt
> $=w

Я получил:

www.domain.com
www.domain.com.
domain.com
localhost
[54.245.___.___] 

Таким образом, он перехватывает всю исходящую почту domain.com. Я не хочу, чтобы это произошло localhost. Я хочу, чтобы он пошел на серверы Gmail.

Вся почта для других адресов работает нормально. У меня также есть sendmail, настроенный на использование DKIM.

Я добавил запись в mailertable (и перестроил mailertable.db и перекомпилировал файл mc> cf), но я не уверен, что это то, что мне нужно сделать, или я делаю это правильно.

domain.com esmtp:[aspmx.l.google.com]

Как мне получить разрешение на отправку почты с адресом users@domain.com с сервера?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: Вот мой файл sendmail.mc:

divert(-1)dnl

include(`/usr/share/sendmail-cf/m4/cf.m4')dnl
VERSIONID(`setup for linux')dnl
OSTYPE(`linux')dnl

define(`confDEF_USER_ID', ``8:12'')dnl

define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST', `True')dnl
define(`confDONT_PROBE_INTERFACES', `True')dnl
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl

define(`confTO_IDENT', `0')dnl

FEATURE(`no_default_msa', `dnl')dnl
FEATURE(`smrsh', `/usr/sbin/smrsh')dnl
FEATURE(`mailertable', `hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl

FEATURE(local_procmail, `', `procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db', `hash -T<TMPF> -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

FEATURE(`accept_unresolvable_domains')dnl
FEATURE(`relay_based_on_MX')dnl
FEATURE(`relay_entire_domain')dnl

LOCAL_DOMAIN(`localhost.localdomain')dnl

MASQUERADE_AS(`domain.com')dnl
MASQUERADE_DOMAIN(`localhost.localdomain')dnl

EXPOSED_USER(`root')dnl

FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl

INPUT_MAIL_FILTER(`opendkim', `S=inet:8891@localhost')

MAILER(smtp)dnl
MAILER(procmail)dnl

1
Логика вашего вопроса совершенно ошибочна. Это сводится к «Я не хочу использовать Sendmail для отправки моей почты. Как мне переконфигурировать Sendmail с дополнительной конфигурацией, чтобы отправлять почту именно так, как Sendmail отправляет почту по умолчанию?» Ответ: оставь это в покое. Либо ваш вопрос должен быть полностью переформулирован, чтобы понять, что вы на самом деле пытаетесь сделать, либо вам нужно прекратить вмешиваться в конфигурацию вашего сервера и позволить ему делать то, что он делает, не нарушая его.
Саммит

1
тогда ладно. в качестве альтернативы, объясните мне, что я буду делать, если я только хочу отправлять электронную почту с сервера, а не на него.
Осьминог

Ответы:


8

Наконец-то я нашел довольно всеобъемлющее решение здесь . Подводя итог, можно выделить несколько вариантов (большинство из которых были упомянуты в других ответах, но по тем или иным причинам не работали в моем конкретном сценарии).

Вариант 1: удалить запись из / etc / mail / local-host-names

для меня этот файл уже был пуст

Вариант 2: удалить любую запись LOCAL_DOMAIN в файле mc

у меня не было ни одного

Вариант 3: сказать sendmail не проверять интерфейсы

define(`confDONT_PROBE_INTERFACES', `true')dnl

в моем случае это было установлено, но проблемный хост все еще присутствовал в классе w sendmail

Вариант 4: переименовать сервер. внешняя ссылка, приведенная выше, даже специально говорит: «Если я хочу удалить whipple.org из класса w, я могу переименовать сервер в frodo.whipple.org, www.whipple.org, elvis.whipple.org, например».

для меня этого было недостаточно. с хостом с именем www.domain.com класс sendmails все еще содержал ОБА www.domain.com И domain.com (даже после перезагрузки)

Вариант 5: ЭТО РАБОТАЕТ ДЛЯ МЕНЯ, добавьте LOCAL_RULE_0 в файл mc sendmail

LOCAL_RULESETS
LOCAL_RULE_0
R$* < @domain.com. > $*  <tab>$#esmtp $@ mail.domain.com $: $1<@domain.com.>$2

это должно идти в конце файла и <tab>должно быть фактическим символом табуляции


Я бы выбрал вариант 5 и bestmxкарту, чтобы сделать ее общей.
Адамо

Этот работает отлично. Спасибо за осьминога LOCAL_RULESETS LOCAL_RULE_0 R $ * <@ domain.com. > $ * <tab> $ # esmtp $ @ mail.domain.com $: $ 1 <@ domain.com.> $ 2 это должно идти в конце файла и <tab> на самом деле вы должны использовать клавишу табуляции вместо код.
Винодх Кумар

7

Измените имя хоста сервера. Нет никаких веских причин для того, чтобы имя хоста совпадало с именем голого домена.


да, я попробовал это, даже когда я установил имя хоста на www.domain.com sendmail хочет сохранить все привязанное к www.domain.com, domain.com и localhost. я вижу, что когда я запускаю sendmail в режиме отладки и набираю $ = w. я перефразировал вопрос, чтобы объяснить.
Осьминог

3

Вот мое понимание вашего вопроса:

  1. Вы установили Sendmail, чтобы использовать его для отправки электронной почты с вашего сайта.

  2. Вы настроили Sendmail как официальный почтовый сервер для вашего публичного пространства имен DNS.

  3. Вы не хотите, чтобы Sendmail был авторитетным для вашего публичного пространства имен DNS. Вы хотите, чтобы электронная почта отправлялась в общедоступное пространство имен DNS и отправлялась на вашу электронную почту, размещенную в Google.

Решение. Переконфигурируйте Sendmail, чтобы он не был доверенным для вашего публичного пространства имен DNS.


2
У меня вопрос по поводу конфигурации sendmail. Может ли ваш ответ быть более конкретным, чем «переконфигурировать sendmail»?
Осьминог

0

Я не слишком разбираюсь в настройке sendmail, но считаю, что в отношении записей MX все должно быть правильно. Тем не менее, я полагаю, что в ходе поиска DNS приоритетным может быть то, что sendmail сначала обращается к локальному файлу hosts /etc/hostsв большинстве операционных систем на основе Unix, а затем использует свои DNS-серверы. Если это так, и в файле hosts есть запись, которая ссылается на ваш компьютер как domain.com, если вы зададите его в качестве имени хоста, это может быть тем, что происходит. Вы можете отредактировать файл hosts в соответствии с вашими потребностями в этом конкретном случае, изменив записи или добавив новые.

Или вы можете настроить sendmail на игнорирование файла хостов локальной системы при разрешении URL. Я не уверен, как это сделать.


0

1) Sendmail автоматически заполняет список локальных почтовых доменов ( $=w).

Вы не можете отключить его, используя следующую строку в вашем sendmail.mc:

define(`confDONT_PROBE_INTERFACES',`True')

Вы можете добавить локальные письма "вручную" в /etc/mail/local-host-namesфайл.
(Это требует HUPing или перезапуска демона sendmail после)

2) Sendmail может добавить (автоматически настроенное) «имя хоста по электронной почте» ( $j) в список локальных доменов электронной почты.

Вы можете определить «это имя электронной почты хоста»

define(`confDOMAIN_NAME',`hostname.example.net')

3) mailertableявляется НЕ consultede для поставок в областях , перечисленных в $=w.


но определение ( confDONT_PROBE_INTERFACES',True ') уже (и всегда было) включено
Octopus

Таким образом, ваш случай может быть охвачен вариантом 2.
AnFi

Это все хорошие предложения, которые я полностью изучил, но я считаю, что вариант 2 такой же, как добавление хостов в файл local-host-names. в этом случае я хочу, чтобы ИСКЛЮЧИТЬ хост не ВКЛЮЧЕН.
Осьминог

0

Код, который отправляет почту, вы используете полный адрес электронной почты или сервер отправляет почту через локальную учетную запись? Потому что:

Это говорит sendmail, чтобы доставить всю почту на users@localhost.localdomain локально

LOCAL_DOMAIN(`localhost.localdomain')dnl

И это говорит sendmail переписать домены в локальных адресах на domain.com, но не меняет локальную доставку .

MASQUERADE_AS(`domain.com')dnl
MASQUERADE_DOMAIN(`localhost.localdomain')dnl

тогда ладно. в качестве альтернативы, объясните мне, что я буду делать, если я только хочу отправлять электронную почту с сервера, а не на него.

Шаг 1: Вернитесь к конфигурации по умолчанию.
Шаг 2: Используйте конфигурацию по умолчанию.


Да, верно, но я отправляю на user@domain.com. Конфигурация по умолчанию имеет те же проблемы, которые я изложил в вопросе.
Осьминог
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.