Отправка почты от Postfix через почтовый сервер Яндекса

Используемые термины: Postfix, SMTP.

В данной статье мы разберем ситуацию, при которой есть необходимость отправлять почту со своего сервера на Postfix, но через почту яндекса (использовать его в качестве smarthost). При этом, необходимо настроить возможность использования нескольких учетных записей. Инструкция подойдет под любой дистрибутив системы UNIX, на котором можно установить Postfix. Почтовая система Яндекса используется лишь для примера — по сути, по данному принципу можно настроить и пересылку почты через другие почтовые системы.

Требования

Нам необходимо иметь почтовые учетные записи в Яндексе. При отправке писем мы будем использовать правила аутентификации на серверах последнего с использованием данных учетных записей.

Также нам нужен пакет cyrus-sasl. Он реализует метод аутенификации SASL (Simple Authentication and Security Layer).

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

а) на сервере RPM (Rocky, РЕД ОС, CentOS):

yum install cyrus-sasl-plain

б) на сервере DEB (Debian, Astra Linux, Ubuntu):

apt install cyrus-imapd cyrus-clients cyrus-doc cyrus-admin sasl2-bin

Готово. Система подготовлена к настройке почты.

Настройка Postfix

Открываем конфигурационный файл postfix:

vi /etc/postfix/main.cf

Добавим следующие строки:

relayhost =
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/private/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_type = cyrus
smtp_sasl_mechanism_filter = login
smtp_sender_dependent_authentication = yes
smtp_tls_CAfile = /etc/postfix/ca.pem
smtp_use_tls = yes
smtp_tls_security_level=may
smtpd_tls_security_level=may
sender_dependent_relayhost_maps = hash:/etc/postfix/private/sender_relay

* некоторые директивы уже будут в конфигурационном файле. Нужно изменить им значения.
** где:

  • relayhost — сервер, через который нужно отправлять почту. Мы будем использовать отдельные правила, поэтому оставляем данный параметр с пустым значением.
  • smtp_sasl_auth_enable — включение аутентификации на стороне клиента.
  • smtp_sasl_password_maps — указывает на файл, в котором хранится база связок логин/пароль.
  • smtp_sasl_security_options — опции SASL. noanonymous указывает на запрет анонимной аутентификации.
  • smtp_sasl_type — задает плагин SASL для аутентификации.
  • smtp_sasl_mechanism_filter — перечисляет механизмы проверки пользователя и пароля.
  • smtp_sender_dependent_authentication — включает зависящую от отправителя аутентификацию, отключает кэширование SMTP-соединения.
  • smtp_tls_CAfile — файл с сертификатом Яндекса.
  • smtp_use_tls — указывает, использовать ли TLS для SMTP.
  • smtp_tls_security_level, smtp_tls_security_level — уровень безопасности при установке smtp соединения. В нашем примере may означает, что, по возможности, нужно использовать защищенное соединение.
  • sender_dependent_relayhost_maps — указание на список адресов и почтовых серверов, через которые нужно отправлять письма на эти адреса.

Создаем каталог для конфигов:

mkdir /etc/postfix/private

Создаем файл с правилами пересылки сообщений:

vi /etc/postfix/private/sender_relay

@yandex.ru    smtp.yandex.ru

* в данном примере мы все сообщения, отправляемые от домена yandex.ru переправляем через сервер smtp.yandex.ru.

Создаем файл с настройкой привязки логинов и паролей:

vi /etc/postfix/private/sasl_passwd

root@yandex.ru        root@yandex.ru:password1
info@yandex.ru         info@yandex.ru:password2

* в данном примере мы создаем 2 учетные записи для аутентификации на яндексе. При отправке писем от root@yandex.ru необходимо авторизоваться на сервере яндекса от этой же учетной записи с паролем password1. Соответственно, при отправке письма от info@yandex.ru — с паролем password2.

Создаем карты для данных файлов:

postmap /etc/postfix/private/{sasl_passwd,sender_relay}

Получаем сертификат от Яндекса, для этого выполняем запрос:

openssl s_client -starttls smtp -crlf -connect smtp.yandex.ru:25

… на экран будет выведена различная информация — нам нужна вся, что заключена между ——BEGIN CERTIFICATE—— и ——END CERTIFICATE——. Копируем ее и создаем файл сертификата:

vi /etc/postfix/ca.pem

——BEGIN CERTIFICATE——
MIIGazCCBVOgAwIBAgIQcUU9mJXW4OUs5Gf0JfLtsjANBgkqhkiG9w0BAQsFADBf

nRG0DfdqYIuPGApFORYe
——END CERTIFICATE——

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

systemctl restart postfix

 

Обратите внимание на 2 момента:
1) так как яндекс может обслуживать почту для любых доменов, не обязательно должен использоваться домен yandex.ru.
2) отправка сообщения должна идти строго от того пользователя, под которым идет авторизация на yandex. В противном случае, подключение не пройдет проверку и завершится ошибкой.

Проверка

Для проверки можно использовать консольную команду mail.

Если используем Red Hat / CentOS

yum install mailx

После отправляем письмо

echo "Test text" | mail -s "Test title" -r root@yandex.ru master@dmosk.ru

* в данном примере мы отправляем письмо от почты root@yandex.ru на ящик master@dmosk.ru.

Если используем Ubuntu / Debian

apt-get install mailutils

После можно отправлять письмо:

echo "Test text" | mail -s "Test title" master@dmosk.ru -aFrom:info@yandex.ru

* в данном примере мы отправляем письмо от ящика info@yandex.ru на почту master@dmosk.ru.

Результат

В итоге на отправляемый ящик электронной почты должно прийти письмо от нашего адреса с доменом yandex.ru. Если посмотреть в заголовки, оно должно было быть отправлено через серверы Яндекса:

Возможные проблемы

Рассмотрим некоторые проблемы, с которыми можно столкнуться во время выполнения работ.

unsupported dictionary type: hash

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

Причина: для работы с hash используется компонент Berkeley DB (BDB). Его лицензию поменяла компания Oracle, поэтому некоторые сборки Postfix отказались от данного компонента в пользу lmdb.

Решение: в конфигурационном файле postfix необходимо заменить все:

hash:

на

lmdb:

После перезагрузить postfix:

systemctl restart postfix

Читайте также

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

1. Настройка почты GMAIL и Яндекс для подключения по IMAP или POP3.

2. Отправка почты из командной строки Linux.

3. Использование SMTP команд для отправки почты по Telnet.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *