Отключить локальную доставку в Sendmail

31

Я использую Sendmail на сервере Centos для отправки электронной почты для сценариев PHP, но проблема в том, что почта доставляется в локальный почтовый ящик на компьютере, а не в том, что указано в записях MX для домена - которые фактически указывают на другую машину. использовать для электронной почты.

Я бы хотел, чтобы sendmail не пытался локально доставлять почту для домена, для которого настроен компьютер. Существует ли простой способ отключить локальную доставку?

Домен отсутствует в файле local-host-names.

Я уже много гуглил и посмотрел:

Конфигурация Sendmail, чтобы не доставлять почту на локальный компьютер

Отключить локальную доставку в Sendmail

Но либо ответа нет, либо он не подходит.

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

Чтобы привести пример:

У меня есть два сервера: один почтовый сервер на mail.example.com и веб-сервер example.com. Когда я использую службу smtp на веб-сервере, он в настоящее время направляет почту в локальный почтовый ящик на example.com, но это должно идти в почтовые ящики на mail.example.com

Вывод sendmail -bt возвращает:

РЕЖИМ ТЕСТА АДРЕСА (набор правил 3 НЕ вызывается автоматически)
Войти  
> 3,0 info@example.com
canonify input: info @ example. ком
Canonify2 вход: информация 
Canonify2 возвращает: информация 
canonify возвращает: информация 
анализ ввода: информация 
Вход Parse0: информация 
Parse0 возвращает: информация 
ParseLocal input: информация 
ParseLocal возвращает: информация 
Вход Parse1: информация 
Parse1 возвращает: $ # local $: info
Возврат разбора: $ # local $: info
Сообщество
источник
stalkr.net/forum/… Кажется, ближе всего к тому, что я на самом деле после. В частности, упоминается настройка MAIL_HUB, но, похоже, она на самом деле не работает.
Попробуйте выполнить следующее: sendmail -bt, а затем введите 3,0 user@domin.com. Это даст вам много правил перезаписи, последние должны дать вам реле, которое он будет использовать. Пожалуйста, предоставьте вывод.
Франсуа Волмаранс
Привет Франсуа, я отредактировал свой вопрос, чтобы включить вывод

Ответы:

37

Что я сделал, чтобы отключить локальную доставку. Я буду использовать домен example.com.

Требования:

  • example.com Запись, указывающая на IP-адрес, назначенный одному из интерфейсов eth.
  • / etc / hosts, определяющий example.com, назначенный тому же IP-адресу, что и выше
  • MX-записи example.com, указывающие на серверы Google (ASPMX.L.GOOGLE.COM и т. д.)
  • установка sendmail по умолчанию (моя была на Ubuntu)

шаги:

vim /etc/mail/sendmail.mc

в конце:

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

а потом:

sendmailconfig (or /etc/mail/make depending on your distro)
service sendmail restart

тестирование:

echo -e "To: user@example.com\nSubject: Test\nTest\n" | sendmail -bm -t -v
echo -e "To: user\nSubject: Test\nTest\n" | sendmail -bm -t -v

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

Павел Гольчицкий
источник
3
Это сработало отлично, я просто удивляюсь, что есть. после доменного имени.
Родриго
Работал также без нареканий!
Филипе Пина
Благодарность! Я пытался это исправить некоторое время. Я сделал следующее; очистите и переустановите sendmail, запустите sendmailconfig, добавьте указанные вами строки, sendmailconfigснова запустите и выполните a, service sendmail restartи все работает!
Лиам Ньюмарч
@Rodrigo example.com. с завершающей точкой - каноническое полное доменное имя. Пример.com без точки является относительным и, следовательно, неточным, например, это может означать example.com.yourdomain.org. в зависимости от настроек вашей ОС. Это точно такая же разница , как между /etc/passwdиetc/passwd
kubanczyk
4

Благодаря Sporker и Pawel вы направили меня в правильном направлении, чтобы исправить это.

Моя первоначальная проблема заключалась в том, что sendmail рассматривал почтовые учетные записи моего домена example.com как локальные.

Эти ссылки оказались очень полезными: Sendmail на локальный домен, игнорирующий записи MX (часть 2) http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382.html http://objectmix.com/sendmail/ 367920-Sendmail-игнорируемых-mailertable-некоторые-полулокальное-domains.html

Но в моем случае, используя FreeBSD 8.2, в действительности получилось:

# cd /etc/mail

# vim freebsd.mc

Добавьте эти две строки:

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

Прямо перед:

MAILER(local)
MAILER(smtp)

# make

--- это вывод ---

 cp freebsd.mc host.example.com.mc
 /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 host.example.com.mc > host.example.com.cf
 cp freebsd.submit.mc host.example.com.submit.mc
 /usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 host.example.com.submit.mc > host.example.com.submit.cf

--- конец вывода ---

# cp sendmail.cf sendmail.cf.bak

# cp host.example.com.cf sendmail.cf

# /etc/rc.d/sendmail restart

Надеюсь, это избавит кого-то от головной боли.

estepix
источник
1

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

EDIT
Имя файла я уже фактически установлен в sendmail.cfи ваш не может быть установлен , чтобы local-host-names
посмотреть в /etc/mail/sendmail.cfтечение

# file containing names of hosts for which we receive email 
Fw/etc/mail/local-host-names    

Это ни в коем случае не проверенные факты, но только я думаю вслух.

aussielunix
источник
Да, именно поэтому я уже упоминал, что домен не находится в файле local-host-names
Извините, это научит меня отвечать на вопросы, которые я не прочитал должным образом.
aussielunix
Была эта проблема на наборе недавно исправленных серверов Solaris 10 (100 или около того исправлено, но проблема возникла только у нескольких). Это было исправление! Благодарность!
Сигнал15
0

Возможно, это не то решение, которое вы ищете, но если ваша проблема заключается в том, что пользователь с правами администратора или root получает много писем и огромный почтовый ящик, вы можете подумать о настройке задания cron для его очистки. вне каждую неделю, день и т. д.

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

Решение состояло в том, чтобы просто выполнить работу и время от времени стирать коробку.

Если бы мы нашли проблему ... мы бы закомментировали работу cron (временно) и прочитали журналы и электронные письма для подсказок.

Просто мысль ... и быстрое / простое решение для тебя.

Если нет, взгляните на файл sendmail.mc и внесите соответствующие изменения.


Быстрое обновление:

Это не совсем то, о чем вы просите, но может дать вам некоторые идеи и помочь пролить свет на некоторые вещи для вас:

http://www.pettingers.org/code/sendmail-local.html

KPWINC
источник
Извините, что не помогло. Все, что я хочу сделать - это не доставлять почту локально, почему sendmail делает это так сложно?
0

Лично я больше постфиксный человек, но это звучит очень похоже на то, что вы настроили отправляющий сервер на получение почты для @ yourdomain.com. Если в postfix есть sendmail, эквивалентный транспортному механизму, это то, что я использую для внутренней маршрутизации почты между моими серверами.

Greeblesnort
источник
Я настроил его не так сильно, как это было по умолчанию для установки sendmail по центу.
0

Похоже, ваш Ruleset 3 удаляет информацию о домене. Я включил некоторые общие шаги по устранению неполадок ниже. Если это не работает, вам нужно будет отправить мне свой sendmail.cf, чтобы посмотреть.

Исходя из вывода, example.com рассматривается как локальный домен. сделать nslookup:

установить q = mx

domain.com

Если это дает IP-адрес локальной машины, то вам нужно посмотреть на ваш DNS. Также посмотрите в / etc / hosts, чтобы убедиться, что domain.com не указан.

Похоже, что он также удаляет @ domain.com, не могли бы вы попробовать что-то вроде user@stackoverflow.com, чтобы увидеть, если он также перечисляет его как локальный домен.

Также проверьте значение Cw в вашем файле sendmail.cf.

Франсуа Вольмаранс
источник
Спасибо, Франсуа, я начинаю понимать внутренности sendmail немного лучше. Я решил просто изменить имя хоста машины, чтобы обойти это сейчас, так что теперь это www.example.com вместо example.com, что означает, что он будет выполнять локальную доставку для user@www.example.com, но не user@example.com - это хороший компромисс для меня на данном этапе.
0

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

Тревор Харрисон
источник
Спасибо, я посмотрю на SSMTP, но пока пытаюсь исправить sendmail.
0

Если вы хотите вернуть ошибку при попытке доставки на локальный адрес, вы можете использовать карту доступа и что-то вроде:

@your.domain error:nouser 550 No such user here

Если вы хотите, чтобы сообщения электронной почты были «доставлены», но были выброшены, вы можете установить виртуальную запись, в которой псевдоним все для « @your.domain» равен dev-null. Это может быть полезно держать доставки по крайней мере , « root» на местном уровне, так как часто получатель отчетов по электронной почте от хрон рабочих мест и т.д. Попробуйте что - нибудь подобное в вашем virtusertable:

root@your.domain local:root

@your.domain local:dev-null

С локальным dev-nullпсевдонимом, который перенаправляет сообщения в / dev / null, это должно продолжать доставлять корневую электронную почту, но отбрасывать сообщения, доставленные другим пользователям.

gkeramidas
источник
0

Исправление Павла сработало для меня, но sendmailconfig не было в centos, поэтому мне пришлось бежать

cd /etc/mail    
m4 /usr/share/sendmail-cf/m4/cf.m4 sendmail.mc > sendmail.cf
service sendmail restart

обновить конфигурацию


источник
это второе правило не работает / не существует на моем CentOS
solsol
0

Просто подтверждение того, что ответ Павела решил мою очень похожую проблему.

Для тех, кто использует FreeBSD, но не заинтересован в участии в тяжелой работе sendmail cf file, вы должны использовать следующую последовательность для добавления двух строк в примере Pawel:

cd /etc/mail
make conf (generates stock .mc/.cf files with the hostname as part of the 
filename - these will NOT be overriten during an upgrade)
vi hostname.mc
(add the two lines to the .mc file right above the last two "MAILER" lines)
make conf
cp hostname.cf sendmail.cf
/etc/rc.d/sendmail restart
sporker
источник
0

Я последовал этим предложениям и заметил, что просто добавив шаг, о котором говорил Павел,

«/ etc / hosts, определяющий example.com, назначенный тому же IP-адресу, что и выше», в основном я добавил свой IP-адрес сервера, а затем имя сервера в /etc/hostsфайл, и все.

Мне было достаточно, чтобы письма переправлялись через Google и обратно на мои письма.

user737133
источник
0

Если вы используете Cpanel / WHM для управления вашим сервером, убедитесь, что вы выбрали Удаленный почтовый обменник в Cpanel / WHM вместо автоматического определения конфигурации. Remote Mail Exchanger отправит всю электронную почту через MX записи, включая локальный домен. При использовании Автоматически электронные письма локального домена будут напрямую направляться локально и не будут отправляться на внешний сервер, определенный в записях MX.

Али Пунавала
источник