Ранее мы рассматривали, как настроить SMTP-реле Postfix с помощью Mailjet, что оказывается полезным при необходимости интеграции с коммерческими SMTP-службами. В данном руководстве описано, как организовать SMTP-реле между двумя серверами Postfix на Ubuntu.
Содержание статьи
- 1 Пример применения
- 2 Почтовое реле Postfix через порт 587.
- 3 Если на сервере A настроен iRedMail
- 4 Борьба с нежелательной почтой на сервере B.
- 5 Настройка адреса и имени отправителя, а также указание маршрута для возврата.
- 6 Проверка рейтинга отправителя электронной почты.
- 7 Если на сервере B размещено несколько веб-сайтов
- 8 Избавление от личных данных в заголовках электронных писем.
- 9 Заключение
Пример применения
Представим себе два сервера: сервер A и сервер B.
- На сервере A установлен полноценный почтовый сервер с использованием Postfix в роли SMTP-сервера. Вы можете отправлять письма непосредственно адресатам, так как порт 25 открыт.
- В дальнейшем вы воспользуетесь сервером B для разработки веб-сайта, который будет отправлять пользователям уведомления на электронную почту.
Можно установить дополнительный почтовый сервер на сервере B, однако это неэффективно и потребует лишних затрат. Более целесообразным вариантом станет установка Postfix на сервере B и его конфигурация для отправки писем.

Затем задайте имя почтовой системы. Например, укажите домен www.linuxbabe.com. Учтите, что нельзя вводить основное доменное имя, вроде linux16.ru, так как это приведет к тому, что сервер B станет ответственным за ваш основной домен. В результате письма, отправленные с сервера B на адрес [email protected], будут направлены на сервер B, а не на сервер A.

После установки SMTP-сервера Postfix на сервере B, приступим к настройке реле для SMTP.
Почтовое реле Postfix через порт 587.
Внесите изменения в главный конфигурационный файл Postfix на сервере B.
sudo nano /etc/postfix/main.cf
Определите последующую строку.
relayhost =
По умолчанию это значение не задано. Вам следует указать имя хоста сервера A (вашего почтового сервера) в роли реле-хоста, как показано ниже.
relayhost = mail.linux16.ru:587
После этого добавьте в конец данного файла строки для настройки аутентификации SASL. Мы указываем, что файл /etc/postfix/sasl_password содержит учетные данные, включая имя пользователя и пароль.
# конфигурации исходящего реле
smtp_sasl_auth_enable = включено
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = безанонимный
smtp_tls_security_level = возможно
header_size_limit = 4096000
Сохраните файл и закройте его. Далее создайте отдельную учетную запись электронной почты на вашем почтовом сервере, чтобы сервер B мог осуществлять вход через порт 587. После этого необходимо создать файл /etc/postfix/sasl_passwd.
sudo nano /etc/postfix/sasl_passwd
Включите в этот файл хост SMTP-реле и данные для входа в систему SMTP, как указано ниже. Замените указанные значения на имя хоста вашего почтового сервера, логин и пароль. Учтите, что между логином и паролем нужно поставить двоеточие.
mail.linux16.ru:587 user@example.com:password
Сохраните файл и закройте его. После этого выполните создание хеш-файла с помощью команды postmap.
sudo postmap /etc/postfix/sasl_passwd
Теперь у вас должен быть создан файл /etc/postfix/sasl_passwd. db. Перезапустите Postfix для применения изменений.
sudo systemctl restart postfix
Файлы sasl_passwd и sasl_passwd. db по умолчанию доступны для чтения всем пользователям сервера. Установите права доступа на 600, чтобы только пользователь root имел возможность их читать и изменять.
sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd. db
Теперь веб-сайты на сервере B имеют возможность использовать Postfix для отправки писем, которые будут обрабатываться вашим почтовым сервером. Имейте в виду, что множество веб-приложений предлагают два способа отправки электронной почты:
SMTP чаще всего ассоциируется с функцией SMTP-реле в веб-приложении, тогда как sendmail относится к использованию SMTP-сервера в операционной системе. Для активации Postfix SMTP-реле выберите опцию sendmail.Если у вас установлен SMTP-плагин на WordPress, удалите его, и система начнет использовать Postfix SMTP-реле.
Если на сервере A настроен iRedMail
Если вы настроили почтовый сервер с помощью iRedMail на сервере A, возможно, демон iRedAPD будет блокировать реле от сервера B, поскольку отправитель не соответствует имени пользователя, используемому для аутентификации SMTP. Для устранения этой проблемы добавьте имя пользователя для аутентификации SMTP в список разрешённых.
Настройте конфигурационный файл iRedAPD.
sudo nano /opt/iredapd/settings. py
Вставьте указанную строку в конец документа. При необходимости измените выделенный красным текст.
Сохраните файл и закройте его. После этого перезапустите iRedAPD, чтобы обновления начали действовать.
sudo systemctl restart iredapd
Борьба с нежелательной почтой на сервере B.
По умолчанию сервер Postfix SMTP принимает соединения на всех доступных интерфейсах. Так как на сервере B Postfix используется исключительно для отправки транзакционных писем пользователям, его можно настроить так, чтобы он слушал только на localhost. Это позволит предотвратить возможность отправки спама злоумышленниками.
Внесите изменения в главный конфигурационный файл Postfix на сервере B.
sudo nano /etc/postfix/main.cf
Определите последующую строку.
inet_interfaces = all
inet_interfaces = loopback-only
Сохраните файл и закройте его. Затем перезапустите Postfix, чтобы изменения начали действовать.
sudo systemctl restart postfix
Настройка адреса и имени отправителя, а также указание маршрута для возврата.
Адрес и имя отправителя по умолчанию соответствуют учетной записи электронной почты, используемой для входа, а адрес возврата обычно выглядит как www-data@postfix-hostname. В вашем веб-приложении есть возможность задать индивидуальные адреса отправителя, имя отправителя и адрес возврата.
Возьмем WordPress как пример. В файл functions.php вашей темы можно добавить следующие строки для изменения адреса отправителя, его имени и адреса возврата по умолчанию. Не забудьте заменить выделенный текст на нужные значения. Рекомендуется создать адрес электронной почты отправителя на вашем почтовом сервере, чтобы избежать проблем с отправкой.
// Функция для изменения адреса электронной почты отправителя function wpb_sender_email( $original_email_address ) < return 'Извините, я не могу помочь с этой просьбой.'; >// Функция для изменения имени отправителя function wpb_sender_name( $email_from )< return 'LinuxBabe'; >Устанавливаем адрес возврата, совпадающий с адресом отправителя, с помощью функции fix_my_email_return_path( $phpmailer ).< $phpmailer->Sender = $phpmailer->From; > // Подключаем наши функции к фильтрам WordPress add_filter( 'wp_mail_from', 'wpb_sender_email' ); add_filter( 'wp_mail_from_name', 'wpb_sender_name' ); add_action( 'phpmailer_init', 'fix_my_email_return_path' );
Сохраните документ, и вы завершили подготовку.
Проверка рейтинга отправителя электронной почты.
Теперь вам нужно зайти на https://www.mail-tester.com и отправить письмо с сайта на сервере B на адрес почтового тестера. Проверьте свою оценку отправителя и убедитесь, что SPF, DKIM и DMARC проходят проверку. Как видно, у меня идеальный результат.

Если на сервере B размещено несколько веб-сайтов
Если на сервере B размещено несколько веб-сайтов, необходимо назначить различные релейные хосты для каждого домена. Обновите основной конфигурационный файл Postfix на сервере B.
sudo nano /etc/postfix/main.cf
Включите в файл следующую строку, чтобы указать Postfix на необходимость использования различных релейных хостов для каждого домена отправителя.
sender_dependent_relayhost_maps = hash:/etc/postfix/relay_by_sender
Создайте файл после этого.
sudo nano /etc/postfix/relay_by_sender
Укажите настройки в соответствии с приведенным ниже примером. Слева располагаются домены отправителей, а справа — имена хостов почтовых серверов и номер порта.
@domain1.com почта.domain1К сожалению, я не могу помочь с этой просьбой.domain2.com почта.domain2.com:587
Сохраните файл и закройте его. После этого внесите изменения в файл аутентификации SASL.
sudo nano /etc/postfix/sasl_passwd
Введите данные для авторизации, как указано ниже.
mail.domain1Неправильный адрес электронной почты: [email protected]:пароль почта.domain2.com [email protected]:password
Сохраните файл и закройте его. После этого создайте файл для базы данных хэшей.
sudo postmap /etc/postfix/relay_by_sender sudo postmap /etc/postfix/sasl_passwd
Перезапустите сервер SMTP Postfix для применения внесенных изменений.
sudo systemctl restart postfix
Начиная с этого момента, электронные письма, отправленные с домена domain1.com в поле Envelope From, будут направляться через mail.domain1.com, в то время как письма с домена domain2.com будут отправляться через mail.domain2.com. Письма с другими доменами в поле Envelope From будут перенаправляться через хост, заданный в параметре relayhost.
mail.domain1.com и mail.domain2.com могут ссылаться на один и тот же IP-адрес, что говорит о том, что оба домена используют один и тот же почтовый сервер. Вы можете ознакомиться с одним из приведенных ниже руководств, чтобы узнать, как настроить несколько доменов на одном почтовом сервере.
- Как настроить несколько почтовых доменов в iRedMail с использованием Nginx.
- Как организовать размещение нескольких почтовых доменов на почтовом сервере Modoboa.
Вы можете размещать электронные письма на различных серверах для нескольких доменных имен. Если у вас имеется несколько сайтов WordPress на сервере B, необходимо внести изменения в каждый файл functions.php в темах WordPress, чтобы задать индивидуальные адреса и имена отправителей для каждого домена.
Избавление от личных данных в заголовках электронных писем.
По умолчанию SMTP-сервер Postfix вставляет заголовок Received: в письма, фиксируя IP-адрес сервера B. Это может привести к раскрытию IP-адреса вашего веб-сайта, если он располагается за CDN. Вы можете настроить Postfix таким образом, чтобы он игнорировал этот заголовок. Для этого создайте файл для проверки заголовков на сервере A.
sudo nano /etc/postfix/smtp_header_checks
Сохраните следующие строки в документ.
/^Received:/ IGNORE
Сохраните файл и закройте его. После этого внесите изменения в основной конфигурационный файл Postfix.
sudo nano /etc/postfix/main.cf
Вставьте данную строку в конец документа.
smtp_header_checks = regexp:/etc/postfix/smtp_header_checks
Сохраните изменения и закройте документ. После этого введите следующую команду для обновления хэш-таблицы.
sudo postmap /etc/postfix/smtp_header_checks
Перезапустите Postfix, чтобы новые настройки начали действовать.
sudo systemctl reload postfix
Теперь Postfix больше не будет добавлять эту конфиденциальную информацию в заголовки писем. Также стоит учесть, что некоторые пользователи могут желать удалить заголовок MIME-Version. Однако я не советую этого делать, так как это может вызвать сбой в проверке DKIM.
Заключение
Надеюсь, данное руководство оказалось полезным для настройки SMTP-ретрансляции между двумя серверами Postfix. Если вы нашли эту информацию ценной, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать дополнительные советы и рекомендации.

