У меня есть пара почтовых серверов, состоящих в основном из 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
и перезапустите постфикс