Назад | Перейти на главную страницу

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

Я пытаюсь заставить 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: удалите запись из / 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 w по-прежнему содержал ОБА 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> должен быть фактическим символом табуляции

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

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

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

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

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

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

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

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

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

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

define(`confDONT_PROBE_INTERFACES',`True')

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

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

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

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

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

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

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

LOCAL_DOMAIN(`localhost.localdomain')dnl

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

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

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

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