Перейти к основному содержанию

Postfix — Multi Instance

Mail

Настроим несколько экземпляров postfix на одном сервере. Настраивать будем на Ubuntu 20.04 LTS.

Postfix в режиме Multi Instance имеет один основной экземпляр и один или более дополнительных экземпляров со своими файлами конфигурации. У меня будет всего два экземпляра postfix для отправки сообщений. Основной будет работать на порту TCP 26, дополнительный на TCP 27. IP у обоих один и тот же.

Установка основного экземпляра postfix

Сначала установим postfix в минимальной конфигурации. Я не буду здесь рассматривать SMTP аутентификацию и DKIM, чтобы сосредоточиться только на Multi Instance.

Установка Postfix на Ubuntu 20.04 LTS в минимальной конфигурации

Файл конфигурации /etc/postfix/main.cf:

myorigin = postfix.testsender.internet-lab.ru
myhostname = postfix.testsender.internet-lab.ru
mydomain = testsender.internet-lab.ru

smtpd_banner = postfix.testsender.internet-lab.ru
biff = no

mydestination =
alias_database =
local_recipient_maps =

mynetworks = 127.0.0.0/8 192.168.1.0/24 [::ffff:127.0.0.0]/104 [::1]/128
message_size_limit = 35840000
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

masquerade_classes = envelope_sender, header_sender

relay_domains = testsender.internet-lab.ru

maximal_queue_lifetime = 5d

compatibility_level = 2

Поскольку postfix будет только отправлять письма, то в конфигурационной файле присутствуют строки:

mydestination =
alias_database =
local_recipient_maps =

Основной экземпляр postfix должен работать на порту TCP 26. Правим файл /etc/postfix/master.cf:

#smtp      inet  n       -       y       -       -       smtpd
26      inet  n       -       y       -       -       smtpd

Строку "smtp inet ..." комментируем и вставляем такую же, только вместо smtp пишем нужный порт. Перезагрузим postfix.

service postfix restart

Теперь мы готовы к настройке дополнительного экземпляра postfix.

Установка дополнительного экземпляра postfix

Создаём дополнительный экземпляр postfix, название должно начинаться с "postfix-". У меня будет "postfix-2". Можно будет потом создать "postfix-3" и так далее.

postmulti -e init
postmulti -I postfix-2 -G out-only -e create

У основного экземпляра postfix в конфигурационном файле /etc/postfix/main.cf появляются настройки:

multi_instance_wrapper = ${command_directory}/postmulti -p --
multi_instance_enable = yes
multi_instance_directories = /etc/postfix-2

Для второго экземпляра postfix появляется директория /etc/postfix-2.

postfix

Внутри файлы main.cf и master.cf:

postfix

Внутри файла /etc/postfix-2/main.cf много ненужного, удаляем всё, кроме настроек Multy Instance, копируем туда основные настройки от основного экземпляра postfix. Получилось:

myorigin = postfix.testsender.internet-lab.ru
myhostname = postfix.testsender.internet-lab.ru
mydomain = testsender.internet-lab.ru

smtpd_banner = postfix.testsender.internet-lab.ru
biff = no

mydestination =
alias_database =
local_recipient_maps =

mynetworks = 127.0.0.0/8 192.168.1.0/24 [::ffff:127.0.0.0]/104 [::1]/128
message_size_limit = 35840000
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

masquerade_classes = envelope_sender, header_sender

relay_domains = testsender.internet-lab.ru

maximal_queue_lifetime = 5d

compatibility_level = 2

data_directory = /var/lib/postfix-2
#master_service_disable = inet
queue_directory = /var/spool/postfix-2
multi_instance_group = out-only
multi_instance_name = postfix-2
multi_instance_enable = yes

Комментирую настройку "master_service_disable = inet", она мне не понадобится.

Теперь нужно, чтобы второй экземпляр postfix работал на порту TCP 27. Правим файл /etc/postfix-2/master.cf:

#smtp      inet  n       -       y       -       -       smtpd
27      inet  n       -       y       -       -       smtpd

Строку "smtp inet ..." комментируем и вставляем такую же, только вместо smtp пишем нужный порт.

Активируем второй экземпляр postfix-2:

postmulti -i postfix-2 -e enable

Перезапускаем postfix:

service postfix restart

Смотрим статусы экземпляров:

postfix status

postfix

postfix-2/postfix-script: the Postfix mail system is not running

Для запуска второго экземпляра выполним:

postmulti -i postfix-2 -p start

postfix

Оба экземпляра запущены. Причем дополнительный экземпляр теперь будет запускаться и останавливаться вместе с основным. Например, service postfix restart перезапустит все экземпляры postfix.

Для остановки экземпляра вам может в будущем понадобится команда:

postmulti -i postfix-2 -p stop

Проверим, что оба экземпляра работают:

netstat -tap

postfix

Порты TCP 26 и TCP 27 прослушиваются. На этом задача по развёртыванию нескольких экземпляров postfix завершена.

Теги

 

Похожие материалы

Postfix и DNS

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

Теги

Автоматически чистить почтовый ящик из Ubuntu

Понадобилось мне как-то автоматически стирать все письма из почтового ящика. Ящик был на Exchange, автоматически там можно удалять письма, но только в папку "Удалённые", что не совсем то что нужно. Не найдя нормального функционала автоматической очистки папки плюнул и решил с соседнего сервера Ubuntu кроном удалять письма из ящика. Итак, на сервере Ubuntu ставим пакет fetchmail:

Теги

NXLog — сбор логов Postfix на Ubuntu

Пришла задача организовать сбор логов на почтовом сервере Postfix, который развёрнут на Ubuntu Server. Заказчика интересуют логи отправки писем в виде JSON. Он хочет, чтобы почтовый сервер на каждую отправку письма отчитывался — передавал по curl данные из лога. Поможет нам в этом непростом деле NXLog.

Теги