Postfix - настройка relayhost, отдельный для каждого домена

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

Онлайн-курс по устройству компьютерных сетей

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

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

relayhost = mailsrv.mymail.ru:25

После этого вся исходящая почта будет отправляться на сервер mailsrv.mymail.ru. Мне такой вариант не подходил. Я хотел потестировать proxmox mail gateway на рабочем сервере, но только на одном домене. Для этого мне надо было почту одного конкретного домена направить на отправку через новый почтовый шлюз.

Почему-то в интернете нашел много советов настроить пересылку почты через transport_maps. Я потестировал этот параметр, но он не для моего случая. С помощью transport_maps вы можете пересылать всю входящую почту на какой-то другой сервер. Мне же нужно было не пересылать входящую, а настроить именно отправку сообщений, то есть исходящую почту.

Чтобы сделать то, что мне надо, необходим параметр - sender_dependent_relayhost_maps. Добавляем его в конфиг в таком виде:

sender_dependent_relayhost_maps = hash:/etc/postfix/relayhost_map

Содержимое файла relayhost_map.

@prox.mymail.ru 10.1.3.15:26

Создаем индексированную базу из этого файла:

# postmap hash:/etc/postfix/relayhost_map

После этого можно перезапускать postfix и проверять. В данном случае я отправил всю почту с домена prox.mymail.ru через внешний smtp сервер 10.1.3.15 на 26-й порт. Его использует proxmox mail gateway для пересылки почты. Все остальные домены как отправляли почту сами локально, так и будут отправлять.

В целом, мне понравился proxmox mail gateway, думаю, буду его использовать. Немного усложняется структура почтового сервера, так как надо разделять smtp службы и imap по разным серверам, но в целом там все очень удобно собрано в одном месте с хорошей панелью управления. Возможно, напишу статью. Его можно использовать совместно с классическим почтовым сервером на postfix.

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

31 комментарий

  1. Доброго времени суток. Может кто, что сможет подсказать. Есть майлер на FreeBSD который через которого отправляется почта с Exchange. Теперь подняли Postfix+Dovecot+OpenLDAP+RoundCube (Авторизация через LDAP). Собственно как сделать что бы с Postfixа исходящая почта шла наружу через майлер на FreeBSD?

    • Настройка relayhost за это отвечает. Статья же как раз об этом.

      • Все сделали, но к сожалению почта во вне не уходит

        Jun 6 04:17:00 mailos postfix/amavis/smtp[95058]: 4QZsyN1D52zBhrc: to=, relay=127.0.0.1[127.0.0.1]:10026, delay=0.25, delays=0.07/0.04/0/0.13, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 4QZsyN2jKdz9cWD)
        Jun 6 04:17:00 mailos postfix/qmgr[94932]: 4QZsyN1D52zBhrc: removed

        Ну и письмо остается висеть в очереди

        [root@mailos postfix]# mailq
        ----Queue ID----- --Size-- ---Arrival Time---- --Sender/Recipient------
        4QZsyN2jKdz9cWD 1736 Tue Jun 6 04:17:00 plamen@dom.cif.ru
        (connect to mx.yandex.ru[77.88.21.249]:25: Connection timed out)
        pav@oooatm.ru

        • В логи еще попало такое сообщение, не заметил сразу. Майлер и postfix находятся в одной подсети.

          Jun 6 04:43:48 mailos postfix/smtp[98284]: warning: relayhost configuration problem
          Jun 6 04:43:48 mailos postfix/smtp[98284]: 4QZtYH6z66zFZD2: to=, relay=none, delay=0.04, delays=0/0.04/0/0, dsn=4.3.5, status=deferred (Host or domain name not found. Name service error for name=mailer.dom.cif.ru type=A: Host not found)

  2. Николай

    Добрый день!
    Имеется схема: локальный постфикс -> локальный haproxy -> пачка relay с белыми адресами
    Задача: разделить 2 принципиально разных потока писем (системные: коды входа, сброс пароля; коммерция: рассылки, акции).
    Проблема: коммерческие письма в больших объемах забивают очередь и системные письма приходят не быстро или же вообще из-за коммерческих писем ip адреса relay попадают в бан и встает вообще все.

    На локальном постфиксе прописан relayhost на локальный haproxy в первый пул который ответчает за отправку системных сообщений и балансится через сам haproxy на условно небольшой пул relay.
    Так же на локальном постфиксе в master.cf прописан еще один smptd на порту 2555 где через -o передан другой relayhost который завернут в другой пул haproxy и балансится на большой список relay для рассылки коммерции.

    Проблема: в логах вижу, что не важно отправляю ли я письмо на 25 порт или 2555, всегда идет relayhost туда где указано в main.cf. Т.е. фактического разделения нет вообще. Как будто бы master.cf -o relayhost директива игнорируется.

    Пробовал убирать relayhost из main.cf и прописывать две директивы -o relayhost для процессов smtpd (дефолтный) и 0.0.0.0:2555 smtpd (второй кастомный).

    В этом случае вообще идет прямая отправка мимо рилеев как будто бы они вообще не указаны.

    Что можно сделать?

    • Я не решал такие задачи, поэтому не подскажу. Описанная в заметке схема - рабочая, проверял лично. Так что распределить потоки отправки по разным relayhost реально. Надо тестировать.

  3. Сергей

    Добрый день, подскажите как настроить PMG что бы пересылал сразу на 2 почтовых сервера, в дефолтном релее можно указать только 1 сервер. а у меня 2 почтовых сервера в режиме DAG. Спасибо.

  4. Сергей

    Добрый день!

    Не подскажите, можно ли так подружить Exchnge c Proxmox Gateway?

    Задача отправлять с конкретного домена через шлюз PMG.

    • Proxmox Gateway это в первую очередь про получение и фильтрацию, а не отправку. Не помню даже, умеет ли он отправлять почту. Если умеет, то никаких проблем не вижу сделать отправку через него.

      • Сергей

        Спасибо за ответ!

        Проблема в том что есть два домена на одном сервере Exchange, и два релея на PMG, смысл отправлять каждый домен через свой PMG релей, у меня затык как это реализовать, есть два коннектора отправки, получается можно отправлять через релей только с одного домена(смарт хост на разыне реле настроены на обоих коннекторах), но по приоритету отрабатывает только один коннектор.

  5. Добрый день! Подскажите, пожалуйста, при создании пользователя в postfixadmin делаю следующее: ввожу setup пароль, email пользователя любой, и два раза пароль для него и жму кнопку "Добавить администратора".
    Получаю ошибку: Everything seems fine... attempting to create/update database structure

    Database is up to date: 1841/0

    DEBUG INFORMATION:
    Invalid query: ERROR: invalid input syntax for integer: "t" LINE 1: ..._domain_count,0) as domain_count,CASE active WHEN 't' THEN '... ^

    Check your error_log for the failed query.

    В логах вижу:
    PHP message caused by query SELECT username,password,password as password2,CASE superadmin WHEN 't' THEN '1' WHEN 'f' THEN '0' END as superadmin,CASE superadmin WHEN 't' THEN 'ДА' WH$ WHERE 1=1 AND ( username='postmaster@мойдомен' ) ORDER BY username" while reading response header from upstream, client: ххх.ххх.ххх.ххх (ip адрес), server: _, request: "POST /padmin/publi$ 2021/12/16 12:32:51 [error] 1143#0: *294 FastCGI sent in stderr: "PHP message: Invalid query: ERROR: invalid input syntax for integer: "t"

    Подскажите, как можно исправить ?

  6. Руслан

    Добрый день! Подскажите как сделать так чтоб Postfix отправлял исходящие письма с машины находящейся в VPN , можно ли это реализовать без доп smtp сервера?

    • Тут 2 варианта:
      1. Вы делаете машину с vpn шлюзом для почтового сервера с postfix. Тогда он всю почту отправляет через него, как и прочий сетевой трафик.
      2. Вы на vpn сервере настраиваете smtp сервер и на postfix указываете его в качестве relayhost.

      Выбирать вам, как лучше сделать, в зависимости от ваших условий.

  7. Здравствуйте! Посоветуйте, как выйти из ситуации, и вообще реально ли это. В организации настроен старый postfix, и люди баловались алиасами. Теперь в /etc/aliases нахожу записи вида user1: user1, user2, user3... и user2: user2, user1, user3 ... И в логах жалуется на петлю, при этом сами пользователи хотят получать письма друг друга "как они всегда делали!" Я так понимаю через алиасы эту проблему не решить, существуют ли какой-то другой метод, который решит мою проблему?

    • Так петлю просто убрать надо. Ее можно при любом способе хранения алиасов сделать. Надо группировать алиасы и пользователей по-другому.

      А вообще, у меня есть статья и не одна, как всё настроить и хранить пользователей и алиасы в базе mysql и управлять через браузер и postfixadmin.

  8. Евгений

    Доброй ночи. Хотел спросить может что посоветуете и куда двигаться.
    Задача следующая:
    В офисе есть почтовый сервер назовем его так mail-1 установлен postfix+dovecote, выделенный ip, домен example-1.com, и направлен на ip. Все работает.
    На хостинге есть VPS с выделенным ip, необходимо настроить через него отправку и прием почты для домена example-1.com и с пересылкой на сервер mail-1
    Аналогично настроен почтовый сервер mail-2, с доменом example-2.com. Необходимо также через уже оговоренный VPS принимать и отправлять почту.

  9. Добрый вечер!
    Бьюсь уже который час, никак не могу вьехать. Есть SMTP типо [smtp.zoho.com]:587 - на нем есть два пользователя на одном домене, первый это noreply@mydomen.ru - со своим логином и паролем, и второй info@mydomen.ru - также со своим логином и паролем для smtp. Они оба находятся на одном домене, где произвести их настройку???? Подскажите куда копать если тут /etc/postfix/sasl_passwd их прописываю обоих то он ругается типо дубликат((((

    Нужна только отправка почты и все.

  10. Василий

    Добрый день.
    Нетривиальный вопрос. а можно сделать в постфиксе маршрутизацию исходящих писем на основе домена получателя а не отправителя.
    Например - все письма уходят напрямую, а для домена получателя zzz.com через релей mail.xyz.ru:25

  11. Сергій

    Надо, наверное, упомянуть, что таблица sender_dependent_relayhost_map, которую Вы используете, имеет приоритет выше relayhost, но ниже transport_maps и relay_transport. И если последние параметры определены в кофиге, то таблица не сработет

  12. Дмитрий

    Есть проблема поставил proxmox mail gateway почтовый сервер настраивал по вашей инструкции.
    но теперь с этой связкой не проходит проверка существования почтового ящика на валидность.
    Server doesn't allow e-mail address verification
    Пишет что ящик не существует не знаю в какую сторону смотреть, без pmg все нормально.

    • Максим

      Была похожая проблема, но только в роли анти-спама использую Cisco ironport. Решение было следующее :
      в main.cf необходимо раскомментировать строку relay_recipient_maps = hash:/etc/postfix/relay_recipients.
      В etc/postfix/ создать relay_recipients и внести в него адреса получателей вида example@exampe.com OK и так же нельзя забывать про служебные учётные записи postmaster@, abuse@, webmaster@ hostmaster@ которые так же нужно указать в relay_recipients , после чего обязательно делаем postmap relay_recipients , далее postfix reload и всё должно работать. Так же можно настроить relay_recipietns по средствам LDAP если у вас домен и много пользователей дабы не забивать всё в ручную.

  13. Алексей

    А можно узнать по какой причине использовался PMG только для отправки писем, а не для приема также? Просто интересны сами случаи, когда есть не совсем стандартная конфигурация.

    У себя используем PMG как почтовый шлюз больше года в связке с Zimbra для входящей и исходящей почты для нескольких почтовых доменов.
    Полет нормальный, PMG показал себя только с положительной стороны. Спам ловит неплохо, при этом мы сами немного закрутили гайки дополнительно. Есть стандартные опции по фильтрации почты, белые, черные и greylist списки, прикручен стандартный антивирус и т.
    д.

    • Для приема он тоже используется. Для этого на самом почтовом сервере никаких настроек делать не надо.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar