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

SMTP для нескольких доменов на виртуальных интерфейсах

Настройка выглядит так (Ubuntu 9.10):

eth0: 1.1.1.1 name.isp.com

eth0: 0 2.2.2.2 example2.com

eth0: 1 3.3.3.3 example3.com

example2.com и example3.com - это веб-приложения, которым необходимо отправлять электронные письма своим пользователям.

2.2.2.2 указывает на example2.com и наоборот (A / PTR). MX -> Google. Google обрабатывает всю входящую почту.

3.3.3.3 указывает на example3.com и наоборот (A / PTR). MX -> Google. Google обрабатывает всю входящую почту.

Требования:

  1. Локальная доставка должна быть отключена (должна доставляться на указанный сервер MX), чтобы следующее работало (обратите внимание, что нет локального пользователя bob на машине, но существует уже существующий пользователь электронной почты bob):

    echo "Test" | mail -s "Test 6" bob@example2.com

  2. Мне нужно указать, с какого IP / доменного имени доставляется электронное письмо при отправке электронного письма.

Бился с sendmail. Не очень повезло.

Вот некоторая отладочная информация:

sendmail -d0.12 -bt < /dev/null

Canonical name: name.isp.com
UUCP nodename: host
    a.k.a.: example2.com
    a.k.a.: example3.com
    ...

Sendmail всегда использует каноническое имя (взято из eth0). Я не нашел способа выбрать одно из кодовых имен UUCP. Он использует его для отправки электронной почты:

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

test@example2.com... Connecting to [127.0.0.1] via relay...
220 name.isp.com ESMTP Sendmail 8.14.3/8.14.3/Debian-9ubuntu1; Wed, 31 Mar 2010 16:33:55 +0200; (No UCE/UBE) logging access from: localhost(OK)-localhost [127.0.0.1]
>>> EHLO name.isp.com

Я в порядке с другими решениями SMTP. Я кратко рассмотрел nbsmtp, msmtp и nullmailer, но я не уверен, что они могут справиться с отключением локальной доставки и выбором разных доменов при отправке электронных писем.

Я также знаю о подмене поля отправителя с помощью mail -a "From: <bob@example2.com>" но это похоже на половину решения (письма по-прежнему отправляются с домена isp.com, а не с домена example2.com, поэтому записи PTR не используются, и существует больший риск быть отмеченным как спам / спамер).

Я не знаю о sendmail, но с exim вы указываете маршрутизаторы и транспорты. Маршрутизаторы принимают электронную почту с / на адреса и решают, какой транспорт использовать. Для (1) просто создайте транспорты smtp, а не локальные транспорты. Для (2) вы можете указать interface вариант при создании транспорта. Файл конфигурации будет примерно таким (не полный файл конфигурации и не протестирован):

begin routers

example2_route:
 driver = dnslookup
 condition = ${eq{$sender_address_domain}{example2.com}} # 'from' domain is example2.com
 transport = example2_smtp

example3_route:
 driver = dnslookup
 condition = ${eq{$sender_address_domain}{example3.com}}
 transport = example3_smtp

begin transports

example2_smtp:
 driver = smtp
 interface = 2.2.2.2

example3_smtp:
 driver = smtp
 interface = 3.3.3.3

Я установил несколько экземпляров постфикса описанным вами способом для обслуживания исходящей почты для двух пространств имен. Это довольно сложная процедура (моя в большей степени, поскольку я также подписываю DKIMProxy), но хорошей отправной точкой является: http://advosys.ca/papers/email/58-postfix-instance.html

Я задокументировал все это (на RHEL 5.6), поэтому я могу предоставить более подробную информацию, поэтому дайте мне знать, если вы идете по этому маршруту - я могу предоставить дополнительную информацию.

Подход Exim, опубликованный Дэном, выглядит чище - я придерживался postfix / DKIMProxy, поскольку использовал этот подход в прошлом.

Ура

Вы пробовали использовать почтовая таблица? Картография

do.main    esmtp:do.main

должен работать и заставить sendmail использовать MX-запись (не проверено).