Настроим несколько экземпляров 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.
Внутри файлы main.cf и master.cf:
Внутри файла /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-2/postfix-script: the Postfix mail system is not running
Для запуска второго экземпляра выполним:
postmulti -i postfix-2 -p start
Оба экземпляра запущены. Причем дополнительный экземпляр теперь будет запускаться и останавливаться вместе с основным. Например, service postfix restart перезапустит все экземпляры postfix.
Для остановки экземпляра вам может в будущем понадобится команда:
postmulti -i postfix-2 -p stop
Проверим, что оба экземпляра работают:
netstat -tap
Порты TCP 26 и TCP 27 прослушиваются. На этом задача по развёртыванию нескольких экземпляров postfix завершена.