Несколько инстансов Postfix SMTP с изменением IP на одном VPS

Данный учебник поможет вам научиться настраивать несколько инстансов сервера Postfix SMTP с ротацией IP на одном виртуальном частном сервере (VPS).

Причины для использования нескольких IP-адресов.

При отправке массовых электронных писем с использованием собственного программного обеспечения для email-маркетинга, например, Mautic, рекомендуется применять несколько IP-адресов для распределения трафика. Если почтовые провайдеры фиксируют значительный поток писем с одного IP-адреса, это может вызвать подозрения на спам. Для поддержания положительной репутации IP важно снизить интенсивность отправки писем с одного адреса.

Оптимальный провайдер для хостинга Linux VPS, предлагающий возможность использования нескольких IP-адресов на одном сервере, — это Kamatera. Цены на VPS начинаются от 4 долларов в месяц, а каждый дополнительный IP-адрес стоит 1 доллар в месяц. Ознакомьтесь с руководством по ссылке ниже, чтобы настроить свой сервер Linux VPS с несколькими публичными IP-адресами.

  • Как установить сервер Linux VPS на платформе Kamatera.

Вы можете воспользоваться iRedMail для оперативной настройки почтового сервера на VPS Kamatera.

  • Как просто установить собственный почтовый сервер на Ubuntu 20.04 с помощью iRedMail.
  • Как просто установить собственный почтовый сервер на Debian 10 с помощью iRedMail.
  • Как просто установить собственный почтовый сервер на CentOS 8 с помощью iRedMail.

После завершения этой процедуры, вернитесь сюда для настройки нескольких экземпляров Postfix с ротацией IP-адресов.

Почтовый сервер Postfix с поддержкой нескольких экземпляров и ротацией IP-адресов.

Какое количество IP-адресов требуется для отправки электронной почты?

  • При наличии 10 тысяч подписчиков в рассылке вам потребуется всего один IP-адрес.
  • Если вам необходимо отправить 100 тысяч писем одновременно, я советую использовать не менее пяти IP-адресов.

Структура нескольких установок Postfix

SMTP-сервер Postfix позволяет на одном хосте запускать несколько экземпляров. Все экземпляры используют одни и те же исполняемые файлы, но при этом имеют различные директории для хранения отдельных файлов.

  • Файлы конфигурации
  • Очередь/спул
  • Данные

Данный учебник познакомит вас с процедурой конфигурации двух экземпляров Postfix. Вы можете применять ту же методику для добавления третьего, четвертого, пятого и так далее экземпляров.

Конфигурация нескольких инстансов Postfix.

Введите следующую команду для инициализации нескольких экземпляров в Postfix.

sudo postmulti - e init

В конце файла /etc/postfix/main.cf будут добавлены следующие две строки.

multi_instance_wrapper = $/postmulti - p -- multi_instance_enable = yes

Создайте новый экземпляр Postfix.

sudo postmulti - e create - I postfix-smtp1

  • Режим редактирования включается с помощью параметра — e.
  • I : имя экземпляра, которое обязательно должно начинаться с постфикса -.

В результате будет автоматически создана директория /etc/postfix-smtp1/, в которой находятся файлы master.cf и main.cf. В нижней части файла /etc/postfix-smtp1/main.cf будут добавлены следующие строки.

readme_directory = no inet_protocols = ipv4 master_service_disable = inet authorized_submit_users = queue_directory = /var/spool/postfix-smtp1 multi_instance_name = postfix-smtp1

master_service_disable = inet

master_service_disable =

Таким образом, экземпляр postfix-smtp1 может подключаться к TCP-сокету. Для каждого экземпляра Postfix необходимо задать уникальные значения для следующих двух параметров.

Читайте также:  Debian Server для новичка

myhostname = inet_interfaces =

Основной конфигурационный файл ( /etc/postfix/main.cf ) может быть использован, например, для

myhostname = smtp. example.com

inet_interfaces =

11.22.33.44

Postfix-smtp1 экземпляр может быть использован

sudo postqueue - c /etc/postfix-smtp1/ - p

Обращаем ваше внимание, что коллектив

sudo systemctl restart postfix

Запустит только главный экземпляр. Для вывода всех экземпляров Postfix выполните

sudo postmulti - l - a

Выполните следующую команду, чтобы убедиться, что Postfix принимает подключения на нужных IP-адресах.

sudo ss - lnpt | grep :25

При корректной настройке оба экземпляра должны принимать запросы на своих уникальных IP-адресах.

Конфигурация балансировки нагрузки через DNS

Вы можете назначить уникальное имя хоста для вашего VPS и настроить две DNS A записи для этого имени. Этот процесс известен как балансировка нагрузки в DNS.

smtp. example.com A 11.22.33.44 A 11.22.33.55

Далее необходимо сконфигурировать SMTP-клиентов (например, ваше приложение для email-маркетинга) с использованием имени хоста (smtp. example.com). Клиент будет поочередно пытаться установить соединение с двумя IP-адресами.

Конфигурация брандмауэра

Ваш сервер по умолчанию настроен с шлюзом, который использует его IP-адрес для связи с другими серверами. Для улучшения доставки электронной почты необходимо выполнить следующие шаги.

  • При подключении SMTP-клиента к первому IP-адресу вашего VPS, он должен использовать этот адрес для отправки электронной почты.
  • Если SMTP-клиент осуществляет подключение ко второму IP-адресу на вашем VPS, то для отправки электронной почты VPS должен использовать именно этот второй IP-адрес.

Для реализации этого необходимо настроить SNAT (Source NAT) на брандмауэре сервера. Данная технология изменяет исходный IP-адрес.

На Linux доступно множество программ для настройки брандмауэра. Вот некоторые из наиболее популярных.

  • iptables — наиболее распространенный брандмауэр в системе Linux.
  • nftables: современный аналог iptables.
  • UFW: интерфейс для управления iptables, широко используемый на серверах под управлением Debian и Ubuntu.
  • Firewalld — это интерфейс для работы с iptables/nftables, который часто используется на серверах, работающих под управлением RHEL, CentOS, Rocky Linux и Alma Linux.

iptables

Если вы применяете iptables, необходимо выполнить следующие две команды для настройки SNAT.

sudo iptables - t nat - A POSTROUTING - s 11.22.33.44-p tcp --dport 25 - j SNAT --to-source11.22.33.44

bash11.22.33.55-p tcp --dport 25 - j SNAT --to-source11.22.33.55

  • Если соединение начинается с первого IP-адреса, применяйте его как исходный. SMTP-сервер получателя будет считать, что электронное письмо отправлено именно с этого IP-адреса.
  • Если соединение начинается с второго IP-адреса, то необходимо использовать его в качестве исходного. SMTP-сервер получателя будет считать, что сообщение отправлено именно с этого второго IP-адреса.

UFW

Если вы применяете брандмауэр UFW, внесите изменения в файл.

/etc/ufw/before. rules

.

sudo nano /etc/ufw/before. rules

Вставьте указанные строки в нижнюю часть этого файла. При необходимости измените IP-адрес.

# Правила NAT таблицы *nat :POSTROUTING ACCEPT [0:0] - A POSTROUTING - s 11.22.33.44-p tcp --dport 25 - j SNAT --to-source11.22.33.44

  • A POSTROUTING - s
  • 11.22.33.55-p tcp --dport 25 - j SNAT --to-source11.22.33.55 # Завершите каждую таблицу строкой 'COMMIT', иначе эти правила не будут обработаны COMMIT

    Постфикс UFW SNAT

    Сохраните изменения и закройте файл, после чего перезапустите UFW.

    sudo systemctl restart ufw

    Firewalld

    Если вы работаете с Firewalld, выполните две команды для настройки SNAT. При необходимости измените IP-адрес.

    sudo firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 - s 11.22.33.44-p tcp --dport 25 - j SNAT --to-source11.22.33.44Для добавления правила NAT в IPv4 с использованием FirewallD, выполните следующую команду:

    css11.22.33.55-p tcp --dport 25 - j SNAT --to-source11.22.33.55

    Перезапустите Firewalld для применения изменений.

    sudo systemctl reload firewalld

    Конфигурация резервного SMTP-пересылщика

    Что, если отправленное вами письмо вернется из-за проблем с доставкой? В таком случае можно настроить Postfix на использование другого SMTP-инстанса, чтобы повторить отправку с альтернативного IP-адреса вашего VPS. Ваш сервер сможет переключаться между IP-адресами для снижения вероятности сбоев доставки. Подобный подход применяется и в Gmail.

    К примеру, можно открыть файл main.cf, относящийся к основному экземпляру Postfix.

    sudo nano /etc/postfix/main.cf

    Вставьте следующую строку в конец данного файла.

    smtp_fallback_relay = [11.22.33.55]:25

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

    smtp_fallback_relay имеет свои ограничения, так как функционирует лишь при мягком отклонении почты (код 4xx). В случае жесткого отклонения исходящей электронной почты (код 5xx) Postfix не активирует резервный ретранслятор.

    Вы можете изменить код ответа SMTP с 5xx на 4xx, что заставит Postfix воспринимать все отклоненные письма как временные ошибки. Это позволит использовать резервный SMTP-ретранслятор. Для этого просто добавьте следующую строку в конец файла /etc/postfix/main.cf.

    smtp_reply_filter = pcre:/etc/postfix/smtp_reply_filter

    Сохраните файл и закройте его. После этого создайте файл /etc/postfix/smtp_reply_filter.

    sudo nano /etc/postfix/smtp_reply_filter

    Вставьте следующую строку в данный файл. Пожалуйста, убедитесь, что перед этой строкой нет пробелов.

    /^5(.*)$/ 4$1

    Сохраните файл и закройте его. Затем перейдите к созданию этой таблицы для поиска.

    sudo postmap /etc/postfix/smtp_reply_filter

    Настройте поддержку карт PCRE для Postfix.

    • Debian/Ubuntu: выполните команду sudo apt установить postfix-pcre.
    • CentOS/RHEL/Rocky Linux: выполните команду sudo dnf установить postfix-pcre.

    Проверьте, чтобы все IP-адреса были включены в параметр mynetworks Postfix в файле main.cf, иначе SMTP-ретрансляция не будет функционировать. Это необходимо сделать для каждого экземпляра Postfix.

    Перезапустите Postfix, чтобы новые настройки начали действовать.

    sudo systemctl restart postfix

    Включите запись PTR для каждого IP-адреса.

    Kamatera не предоставляет возможность редактирования записи PTR непосредственно в панели управления. Чтобы добавить такую запись, необходимо открыть обращение в службу поддержки. Возможно, это не совсем удобно, но такая мера направлена на предотвращение использования платформы спамерами и на поддержание хорошей репутации IP-адресов для легитимных отправителей электронной почты, таких как мы.

    Конфигурация SMTP-аутентификации

    Теперь необходимо выполнить настройку SMTP-аутентификации для экземпляров Postfix postfix-smtp1.

    sudo nano /etc/postfix-smtp1/master.cf

    Включите указанные строки в данный файл, чтобы SMTP-клиенты могли проходить аутентификацию на TCP-портах 587 или 465 и отправлять исходящие письма.

    submission inet n - y - - smtpd - o syslog_name=postfix/submission - o smtpd_tls_security_level=encrypt - o smtpd_tls_wrappermode=no - o smtpd_sasl_auth_enable=yes - o smtpd_relay_restrictions=permit_sasl_authenticated, reject - o smtpd_recipient_restrictions=permit_mynetworks, permit_sasl_authenticated, reject - o smtpd_sasl_type=dovecot - o smtpd_sasl_path=private/auth smtps inet n - y - - smtpd - o syslog_name=postfix/smtps - o smtpd_tls_wrappermode=yes - o smtpd_sasl_auth_enable=yes - o smtpd_relay_restrictions=permit_sasl_authenticated, reject - o smtpd_recipient_restrictions=permit_mynetworks, permit_sasl_authenticated, reject - o smtpd_sasl_type=dovecot - o smtpd_sasl_path=private/auth

    Сохраните изменения и закройте документ. После этого остановите экземпляр postfix-smtp01.

    sudo postmulti - i postfix-smtp1 - p stop

    Запустите его еще раз.

    sudo postmulti - i postfix-smtp1 - p start

    Теперь необходимо сконфигурировать отдельный сокет для аутентификации SMTP Dovecot для экземпляра postfix-smtp1.

    sudo nano /etc/dovecot/conf.d/10-master.conf

    Ваш раздел для аутентификации сервиса может выглядеть следующим образом:

    service auth < unix_listener /var/spool/postfix/private/auth < mode = 0660 user = postfix group = postfix >>

    Необходимо создать новый unix_listener для экземпляра postfix-smtp1, использующего каталог /var/spool/postfix-smp1/ в качестве очереди.

    service auth < unix_listener /var/spool/postfix/private/auth < mode = 0660 user = postfix group = postfix > unix_listener /var/spool/postfix-smtp1/private/auth mode = 0660 user = postfix group = postfix > >

    Сохраните изменения и закройте документ. После этого перезапустите Dovecot.

    sudo systemctl restart dovecot

    Проведение тестирования

    Теперь у вас есть возможность отправлять тестовые электронные письма для проверки их функционирования.

    Диагностика и решение проблем

    Если в журнале почты ( /var/log/mail.log или /var/log/maillog ) отображается следующая ошибка,

    postfix/submission/smtpd[4125]: warning: SASL: Connect to private/auth failed: No such file or directory postfix/submission/smtpd[4125]: fatal: no SASL authentication mechanisms

    Это указывает на то, что вы не включили новый unix_listener для экземпляра postfix-smtp1 в конфигурационный файл Dovecot 10-master.conf.

    Отсутствует подпись DKIM?

    Если вы применяете OpenDKIM и ваше электронное письмо не имеет подписи DKIM, вам стоит настроить следующие параметры.

    Запустите файл настройки OpenDKIM.

    sudo nano /etc/opendkim.conf

    Если в вашем файле присутствует строка, похожая на приведённую ниже, это означает, что OpenDKIM принимает соединения от Postfix через Unix-сокет.

    Socket local:/var/spool/postfix/opendkim/opendkim. sock

    Оставьте комментарий к ней. Необходимо настроить OpenDKIM для работы с TCP/IP сокетами.

    Socket inet:8891@localhost

    Сохраните изменения и закройте файл. Затем внесите изменения в файл main.cf для каждого экземпляра Postfix, добавив в него следующие строки, чтобы обеспечить подключение Postfix к OpenDKIM через сокет TCP/IP.

    # Конфигурация Milter milter_default_action = accept milter_protocol = 6 smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters

    Сохраните изменения в файле и закройте его. После этого перезапустите все запущенные экземпляры Postfix.

    Активировать автоматический запуск.

    Основной экземпляр Postfix может быть автоматически активирован при загрузке системы.

    sudo systemctl enable postfix

    Однако это не приводит к автозапуску других экземпляров Postfix. Нам необходимо разработать сервис systemd, чтобы обеспечить его автозапуск.

    sudo nano /etc/systemd/system/postfix-smtp1.service

    Вставьте указанные строки в данный файл.

    [Unit] Description=Запуск экземпляра postfix-smtp1 After=network. target [Service] Type=forking ExecStartPre=/bin/sleep 5 ExecStart=/bin/bash - c '/usr/sbin/postmulti - i postfix-smtp1 - p start' ExecStop=/bin/bash - c '/usr/sbin/postmulti - i postfix-smtp1 - p stop' ExecReload=/bin/bash - c '/usr/sbin/postmulti - i postfix-smtp1 - p reload' Restart=on-failure [Install] WantedBy=multi-user. target

    Сохраните изменения и закройте файл. После этого перезапустите systemd.

    sudo systemctl daemon-reload

    Активируйте автоматический запуск при старте системы.

    sudo systemctl enable postfix-smtp1

    Приостановите работающий экземпляр postfix-smtp1.

    sudo postmulti - i postfix-smtp1 - p stop

    Теперь вы можете запустить его при помощи systemd.

    sudo systemctl start postfix-smtp1

    Способы обхода черных списков электронной почты.

    Исходящие сообщения электронной почты могут быть заблокированы из-за того, что IP-адрес оказался в черном списке. Даже если вы не рассылаете спам, ваш почтовый сервер может попасть в этот список по обстоятельствам, которые не зависят от вас. Ознакомьтесь с приведенными рекомендациями, чтобы узнать, как избежать попадания в черные списки.

    • Способы обхода черных списков электронной почты.

    Заключение

    Надеюсь, это руководство оказалось полезным для настройки нескольких экземпляров почтового сервера Postfix с ротацией IP на одном VPS. Если вам понравился этот материал, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать дополнительные советы и рекомендации.