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

как настроить postfix для отправки локальной почты на другой локальный сервер?

У меня есть пара почтовых серверов, состоящих в основном из Postfix, Procmail и Cyrus-IMAP, и они оба работают нормально. Серверы IMAP сконфигурированы как простая пара главный / реплика. Вся «обычная» почта принимается Postfix мастера, который обрабатывает ее через Procmail для доставки в Cyrus-IMAP, работающий на том же сервере. Оба сервера могут работать таким образом, но только главный получает внешнюю электронную почту.

В настоящее время локальные учетные записи на любом из ящиков отправляют почту (например, созданную заданиями cron) через свой локальный Postfix, который локально доставляется в Cyrus-IMAP на том же самом ящике.

Однако репликации Сайруса не нравятся изменения, происходящие непосредственно в реплике, поэтому я бы предпочел, чтобы реплика доставляла локальную почту мастеру.

Я вижу два пути достижения этого:

или

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

Что я действительно хотел бы сделать, так это просто изменить способ обработки внутренней электронной почты на реплике, чтобы он доставлял их мастеру, либо в Postfix, либо на IMAP-сервер.

Существующая, рабочая, конфигурация моего локального транспорта в master.cf postfix:

procmail-local  unix  -       n       n       -       -       pipe
    flags=OR user=cyrus argv=/usr/bin/procmail -t -m RECIPIENT=${mailbox}
    SENDER=${sender} EXTENSION=${extension} /etc/procmailrc

Существующая, рабочая, настройка доставки Cyrus в procmailrc:

DELIVERMAIL="/usr/lib/cyrus/bin/deliver -r $SENDER -a $RECIPIENT $RECIPIENT

Я бы сделал это еще раньше - удалив ваше доменное имя из mydestination, почта для этого домена должна доставляться на сервер, указанный как MX для вашего домена. Если вы хотите указать сервер, а не использовать MX, вы должны использовать файл /path/to/postfix/etc/transport для этого. Тогда этот файл должен выглядеть так:

# all mails to our own domain should go to our main incoming server
ourdomain.com    smtp:[mainserver.ourdomain.com]

Обратите внимание, что [] метки важны - без них ваш сервер все равно будет искать запись MX для mainserver.ourdomain.com.

После редактирования файла используйте команду postmap /path/to/postfix/etc/transport

Вам также необходимо убедиться, что postfix знает, как использовать этот файл, отредактировав /path/to/postfix/etc/main.cf со следующей строкой:

transport_maps = hash:/path/to/postfix/etc/transport

если ваша система использует файлы db. Если вместо этого он использует файлы dbm, строка должна быть

transport_maps = dbm:/path/to/postfix/etc/transport

Настройка такова:

$ grep domain.com /etc/postfix/*
/etc/postfix/main.cf:relay_domains = domain.com
/etc/postfix/relay_recipients:"@domain.com OK"
Binary file /etc/postfix/relay_recipients.db matches
/etc/postfix/transport:domain.com  smtp:[ip.address.of.the.mail.server]
Binary file /etc/postfix/transport.db matches

Также не забывайте:

$ postmap /etc/postfix/transport
$ postmap  /etc/postfix/relay_recipients
$ /etc/init.d/postfix restart

(CentOS, RedHat)

Вы можете попробовать использовать transport_maps на реплике, которую вы поместили в main.cf

transport_maps = hash:/etc/postfix/transport

затем в / etc / postfix / transport вы помещаете

localdomain smtp:yourmasterserver

не забывайте:

postmap /etc/postfix/transport

и перезапустите постфикс