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

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

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

Если у вас есть желание научиться администрировать системы на базе Linux, рекомендую познакомиться с онлайн-курсом «Linux для начинающих» в OTUS. Курс для новичков, для тех, кто с Linux не знаком. Подробная информация.

В общем случае проблема пересылки почты решается очень просто. Если вы хотите, чтобы отправка всей почты шла через другой 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.

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

Проверьте себя на вступительном тесте и смотрите подробнее программу по ссылке.

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

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

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

Автор Zerox

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

26 комментариев

  1. Николай

    Добрый день!
    Имеется схема: локальный постфикс -> локальный 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 реально. Надо тестировать.

  2. Сергей

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

  3. Сергей

    Добрый день!

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

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

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

      • Сергей

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

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

  4. Добрый день! Подскажите, пожалуйста, при создании пользователя в 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"

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

  5. Руслан

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

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

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

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

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

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

  7. Евгений

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

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

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

  9. Василий

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

  10. Сергій

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

  11. Дмитрий

    Есть проблема поставил 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 если у вас домен и много пользователей дабы не забивать всё в ручную.

  12. Алексей

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

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

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

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

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

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