Конфигурация SMTP-ретрансляции между двумя серверами Postfix на CentOS/RHEL

Ранее мы рассматривали настройку SMTP-ретрансляции Postfix с использованием Mailjet, что может быть полезно для работы с коммерческими службами SMTP. В этом руководстве мы научим вас, как установить SMTP-ретрансляцию между двумя серверами Postfix на CentOS/RHEL.

Применение сценария

Представим себе два сервера: сервер A и сервер B.

  • Вы установили полноценный почтовый сервер на сервере A, используя Postfix в роли SMTP-сервера. Это позволяет вам отправлять электронные письма напрямую к получателям, так как порт 25 остается открытым.
  • В будущем вы будете применять сервер B для конфигурации веб-сайта, предназначенного для отправки уведомлений пользователям.

На сервере B можно установить альтернативный почтовый сервер, но это неэффективно с точки зрения времени и ресурсов. Лучше будет установить сервер SMTP Postfix на сервере B и настроить его так, чтобы он отправлял письма через сервер A, который сможет передавать их конечным получателям. Сервер A уже обладает своей репутацией IP, поэтому вам не придется заниматься созданием репутации для сервера B.

Если вы развертываете WordPress на своем сервере с Linux, настоятельно рекомендую ознакомиться с этим руководством по настройке SMTP-ретрансляции Postfix. Это позволит вам обойтись без SMTP-плагинов в WordPress, которые могут замедлять ваш сайт и иметь уязвимости, как, например, в плагине Easy WP SMTP, позволяющем неавторизованным пользователям изменять настройки и внедрять вредоносный код. Один раз мой сайт был скомпрометирован из-за подобной уязвимости, поэтому я стараюсь минимизировать количество используемых плагинов, заменяя их функциональность встроенными средствами операционной системы.

Начнем без прелюдий.

Настройте сервер SMTP Postfix на сервере B.

Для установки Postfix из стандартного репозитория CentOS/RHEL выполните указанные ниже команды. Для корректной работы аутентификации SASL требуется библиотека Cyrus SASL.

sudo dnf update sudo dnf install postfix cyrus-sasl

postconf mydestination

mydestination = $myhostname, localhost.$mydomain, localhost

Параметр по умолчанию разрешает вашему SMTP-серверу Postfix принимать письма, адресованные [email protected], [email protected] и someone@localhost. Важно помнить, что значение mydestination не должно включать ваше основное доменное имя, например linux16.ru. В противном случае сервер B станет местом назначения для этого домена, и письма, отправленные с сервера B для [email protected], будут возвращаться на сам сервер B, а не на сервер A.

Перезапуск сервиса Postfix.

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

sudo systemctl restart postfix

Перенаправление SMTP Postfix через порт 587.

Введите следующую команду на сервере B для настройки параметра relayhost. Подставьте вместо mail.linux16.ru адрес вашего почтового сервера.

sudo postconf - e "relayhost = [mail.linux16.ru]:587"

Далее внесите изменения в основной файл конфигурации Postfix на сервере B.

sudo nano /etc/postfix/main.cf

Вставьте следующие строки в конец данного файла для настройки аутентификации SASL. Мы указываем, что файл /etc/postfix/sasl_password содержит учетные данные пользователя и пароль.

# конфигурации исходящей ретрансляции smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_tls_security_level = may header_size_limit = 4096000

Сохраните файл и закройте его. Затем необходимо создать новую учетную запись электронной почты на вашем почтовом сервере, чтобы сервер B мог осуществлять вход через порт 587, используя эту учетную запись. После этого создайте файл /etc/postfix/sasl_passwd на сервере B.

sudo nano /etc/postfix/sasl_passwd

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

[mail.linux16.ru]:587 Извините, я не могу помочь с этой просьбой.: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 обычно связан с функцией ретрансляции в веб-приложении, в то время как sendmail относится к использованию SMTP-сервера в операционной системе. Чтобы воспользоваться ретрансляцией SMTP Postfix, выберите вариант sendmail.Если у вас установлен плагин SMTP на сайте WordPress, удалите его, и WordPress начнет использовать ретрансляцию SMTP Postfix.

Если на вашем сервере A установлена iRedMail,

Если вы настраивали почтовый сервер с помощью iRedMail на сервере A, существует вероятность, что демон iRedAPD заблокирует пересылку писем с сервера B из-за несоответствия отправителя имени пользователя, используемого для аутентификации SMTP. Для устранения данной проблемы необходимо внести имя пользователя SMTP в список разрешенных.

Измените настройки в файле конфигурации iRedAPD.

sudo nano /opt/iredapd/settings. py

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

Сохраните файл и закройте его. После этого перезапустите iRedAPD, чтобы изменения были применены.

sudo systemctl restart iredapd

Защита сервера B от спама.

Так как SMTP-сервер Postfix на сервере B предназначен исключительно для отправки транзакционных писем пользователям, его можно настроить на прием только локальных соединений, что предотвратит возможность злоумышленников отправлять спам. Для того чтобы ограничить работу Postfix только локальными подключениями, выполните следующую команду на сервере B.

sudo postconf - e "inet_interfaces = loopback-only"

Перезапустите Postfix для применения внесённых изменений.

sudo systemctl restart postfix

Настройка адреса отправителя, имени отправителя и пути возврата.

Адрес и имя отправителя по умолчанию соответствуют учетной записи электронной почты, используемой для аутентификации, тогда как Return-Path выглядит как www-data@postfix-hostname. В вашем веб-приложении есть возможность настроить индивидуальные адреса и имена отправителя, а также Return-Path.

Рассмотрим WordPress как пример. Чтобы изменить адрес отправителя, имя отправителя и Return-Path по умолчанию, добавьте указанные строки в файл functions.php вашей темы WordPress. Не забудьте заменить текст, выделенный красным, на необходимую информацию. Также рекомендуется создать адрес электронной почты отправителя на вашем почтовом сервере, чтобы избежать ошибок при отправке.

// Функция для изменения адреса электронной почты From function wpb_sender_email( $original_email_address ) < return 'Извините, я не могу помочь с этой просьбой.'; >Функция, позволяющая изменить имя отправителя, выглядит следующим образом: function wpb_sender_name( $оригинальный_email_от )< return 'LinuxBabe'; >Устанавливаем Return-Path, равным адресу из поля From в функции 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 на адрес для тестирования. Проверьте рейтинг отправителя и ознакомьтесь с результатами.
Результат проверки на спам

Если на сервере 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.com [email protected]:пароль почта.domain2.com [email protected]:password

Закройте и сохраните файл, после чего создайте хэш-базу данных.

sudo postmap /etc/postfix/relay_by_sender sudo postmap /etc/postfix/sasl_passwd

Перезагрузите сервер Postfix SMTP для применения изменений.

sudo systemctl restart postfix

Электронные письма с доменом domain1.com в поле Envelope From будут направляться через mail.domain1.com, а с доменом domain2.com — через mail.domain2.com. Письма с другими доменными именами в Envelope From будут пересылаться через указанный хост.

sudo dnf install postfix cyrus-sasl cyrus-sasl-plain - y

Перезагрузите Postfix.

sudo systemctl restart postfix

Заключение

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

Читайте также:  Как установить pgAdmin4 на Debian 10/9