Как настроить отправку почты через Postfix в Битрикс24

По умолчанию, веб-окружение Битрикс24 использует msmtp для отправки почтовых сообщений. Это решение отличается простотой настройки, однако имеет некоторые недостатки, в частности, медленную отправку почты через внешние сервисы, такие как Google или Yandex.

В большинстве случаев, это не вызывает проблем, поскольку почтовые события выполняются из под cron'а (планировщика задач), но иногда возникают ситуации, когда это может стать проблемой.

Скорость отправки почтовых сообщений в Битрикс24 зависит от нескольких факторов, включая настройки отправки почты и типы писем, которые отправляются.

Если отправка писем осуществляется через агенты (agent-based delivery), то обработка и отправка писем выполняется по расписанию с помощью cron'а. Такая отправка обычно используется для рассылок из CRM или других массовых писем. В этом случае скорость доставки будет зависеть от настроек cron'а и активности агентов, которые выполняют задачи по отправке писем.

Однако, если все агенты настроены на хиты (hit-based delivery) или используется функция mail() напрямую, то скорость доставки будет зависеть от активности пользователей на портале. То есть, при каждом хите пользователя будет отправляться несколько писем. Если на портале Битрикс24 отсутствует активность, например, в период малой загрузки или бездействия сотрудников, скорость отправки писем может быть замедлена, так как письма будут отправляться только при активности пользователей.

Как альтернатива msmtp, возможно перейти на использование Postfix:

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

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

Давайте рассмотрим настройку отправки почтовых сообщений с помощью Postfix

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

  • Также настроим DKIM-подпись для отправляемых писем. DKIM-подпись является важной мерой для повышения доставляемости и подтверждения подлинности писем.
  • Не забываем проверить настройки MX-записей вашего домена и убедиться, что они указывают на правильные серверы, чтобы обеспечить надлежащую маршрутизацию почтового трафика.

Как установить Postfix?

  • Выполнить установку POSTFIX
 yum -y install postfix cyrus-sasl-plain

  • Далее редактируем файлы
 /etc/postfix/canonical
 /.+/ crm@<доменное имя клиента> (crm@company.ru)

 /etc/postfix/header_checks
 # Добавить в Reply-To значение, использованное в From
/^From: (.*)/ PREPEND Reply-To: $1
# Перезаписать From на значение по умолчанию
/^From: (.*)/ REPLACE From: crm@<доменное имя клиента> (crm@company.ru)
# Удалить добавление технического адреса в ответном письме /^(Reply-To:.*)/ IGNORE

/etc/postfix/main.cf
 header_checks = regexp:/etc/postfix/header_checks
smtp_use_tls = yes

  • В консоли выполнить команду, выбрать POSTFIX
 alternatives --config mta

  • в файле /etc/php.d/bitrixenv.ini:
 sendmail_path = /usr/sbin/sendmail -t -i -f crm@<доменное имя клиента> (crm@company.ru)

  • В консоли выполнить команды
 postmap /etc/postfix/canonical
systemctl enable postfix
systemctl start postfix
yum install -y mailx
echo "Test message" | mail -s "Test subject" <указать email адрес, на который хотим отправить тестовое письмо>


И проверить, что письмо пришло.

Добавление OPENDKIM


  • В консоли выполнить команды
 yum -y install opendkim opendkim-tools
opendkim-genkey -D /etc/opendkim/keys -d <доменное имя клиента> -s default
chown opendkim:opendkim /etc/opendkim -R
systemctl enable opendkim
systemctl start opendkim

  • Запись из файла добавить в DNS записи доменного имени
 cat /etc/opendkim/keys/default.txt

  • В файле /etc/opendkim/KeyTable
 default._domainkey.<доменное имя клиента> <доменное имя клиента>:default:/etc/opendkim/keys/default.private

Пример:
 	 default._domainkey.company.ru company.ru:default:/etc/opendkim/keys/default.private


  • В файле /etc/opendkim/SigningTable
 *<доменное имя клиента> default._domainkey.<доменное имя клиента>

  • В файле /etc/opendkim.conf добавить/раскоментировать
 
KeyTable        /etc/opendkim/KeyTable
SigningTable    refile:/etc/opendkim/SigningTable
  • В файле /etc/postfix/main.cf:
 
# Обработка ошибок при фильтрации писем до попадания сообщений в очередь 
milter_default_action = accept
# Версия протокола: 2 для 2.3 ≤ Postfix ≤ 2.5, 6 для Postfix ≥ 2.6
milter_protocol = 2
# Подписывать сообщения, полученные по SMTP с других серверов
smtpd_milters = inet:127.0.0.1:8891
# Подписывать сообщения, приходящие из sendmail
non_smtpd_milters = inet:127.0.0.1:8891
  • В файле /etc/crontab изменить
 
* * * * * bitrix test -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php && 
{ /usr/bin/php -d sendmail_path="sendmail -t -i" -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php; } 
>/dev/null 2>&1

Проверка сообщения

  • www.mail-tester.com отсюда скопировать адрес почты, после пойти в Битрикс24 и отправить письмо на этот адрес
  • в сервисе нажать кнопку "проверка" и убедиться, что не ругается на dkim подпись
  • в соответствии с рекомендациями сервиса прописать в DNS, SPF, DMARC, MX записи


  • Когда почтовый сервер отдельно: В файле /etc/posftix/main.cf
 
myhostname = mail.company.ru (адрес почтового сервера)
mydomain = company.ru (домен)
myorigin = $mydomain
mynetworks = 127.0.0.0/8
inet_protocols = ipv4

  • Изменение имени отправителя: в файле /etc/postfix/headers_check
 
/^From: (crm@company.ru)/ REPLACE From: Моя Компания 


Дополнительные настройки для работы почтового сервера

Настройка Hostname сервера

Посмотреть, как называется сервер можно такой командой:


# hostname

Если название отличается от необходимого или не установлено, тогда записать hostname для сервера:

 
 # echo "server" > /etc/hostname
# hostname -F /etc/hostname


Обратите внимание, что hostname сервера не равно домену сервера! Если полный домен сервера: "server.example.com", то hostname сервера - это "server".


Настройка PTR (Reverse DNS)

В настройках домена прописываются A-записи, которые связывают домен с IP-адресом(ами) сервера. Reverse DNS - это обратное действие, которое связывает IP-адрес с доменом.

Сервер-отправитель письма указывает в параметре HELO (EHLO) свой домен, например, server.example.com, а сервер получателя делает специальный whois-запрос, чтобы проверить, какой домен записан для IP сервера отправителя. Если домен, указанный для IP и в заголовке HELO (EHLO) не совпадают, то с большой долей вероятности письмо будет или отклонено, или перемещено в папку Спам.

Прописать Reverse DNS может только владелец IP-адреса, который назначен серверу - это скорее всего хостинг, где размещен сервер или VPS. Если сервис расположен в квартире/офисе, то по вопросу указания PTR стоит обратиться к интернет-провайдеру.

Не нужно путать владельца IP-адреса и регистратора для доменов - это, обычно, разные компании. Но если вы разместили свой сервер и зарегистрировали домен у одного и того же провайдера, то тогда по вопросу изменения Reverse DNS следует обращаться к одной и той же компании.

Проверить домен, присвоенный PTR, можно утилитой командной строки dig: $ dig -x 5.6.7.8 или используя различные онлайн-сервисы.

Настройка DNS доменного имени почтового сервера

В панели управления регистратора домена company.ru поддомен для сервера (server) конфигурируется, обычно, в разделе "Настройка DNS":

 
 server.example.com A 5.6.7.8
server.example.com MX 10 server.example.com
server.example.com TXT v=spf1 +a +mx -all

В третьей строке указывается SPF-запись для поддомена. SPF используется почтовым сервером-получателем для проверки: разрешено ли владельцем домена отправка писем с IP, с которого пришло в действительности письмо? Параметры SPF "+a +mx -all" указывают, что письма могут отправлять только те IP, которые прописаны в A и MX записях домена, а со всех остальных IP принимать почту запрещено.

Проверка влияния настроек PTR и DNS на отправляемые e-mail

После изменения настроек DNS необходимо подождать какое-то время, для того, чтобы они обновились на всех DNS серверах. Иногда это может затянуться до одних суток. Отправляем тестовое письмо на свой e-mail и смотрим журнал:

 
	 # echo "Email body: test MTA Postfix" | mail -s "Test postfix" myemail@example.com
# tail -30 /var/log/maillog

Если "status" отправки e-mail Postfix равен "sent", значит, письмо было получено сервером принимающей стороны. Следует проверить, не попало ли оно в спам, и если нет, значит, большая часть работы по настройке Postfix выполнена успешно. Но остается еще один важный момент, требующий настройки: шифрование письма.

По умолчанию, Postfix, да и, наверное, все другие MTA, отправляет письма в открытом не зашифрованном виде. Это сравнимо с просмотром web-страниц по небезопасному протоколу HTTP, вместо HTTPS. В этом случае, например, в интерфейсе Gmail, напротив получателя будет отображаться красный перечеркнутый замок, означающий, что сообщение не зашифровано. Но самое печальное, что если в письме будут какие-либо конфиденциальные данные, их смогут без проблем прочитать все, через кого проходит трафик, что очень и очень не безопасно.

TLS-шифрование отправляемых писем в Postfix

Первым делом необходимо получить сертификат, при помощи которого будут шифроваться все отправляемые из Postfix e-mail. Самый простой и быстрый способ - создать сертификат самостоятельно.
 
openssl req -new -nodes -x509 -out /etc/postfix/smtpd.pem -keyout /etc/postfix/smtpd.pem -days 18400

На все вопросы, кроме указания Common Name, можно отвечать на свое усмотрение, Common Name сертификата должно совпадать с именем сервера (в этой конфигурации - server.example.com). Этой командой будет создан сертификат со сроком действия 50 лет.

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

 
	 tls_random_source = dev:/dev/urandom
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/smtpd.pem
smtpd_tls_cafile = /etc/postfix/smtpd.pem
smtpd_tls_cert_file = /etc/postfix/smtpd.pem
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_loglevel = 1
smtpd_use_tls = yes

Краткое описание настроек для шифрования исходящих писем:

  • tls_random_source - ссылка на генератор случайных чисел;
  • smtp_use_tls - оповещение клиентов о наличии TLS-шифрования;
  • smtp_tls_note_starttls_offer - записывать в журнал имена серверов, у которых поддержка TLS не включена (ответ STARTTLS);
  • smtpd_tls_auth_only - применять SMTP-аутентификацию только для соединений с использованием TLS;
  • smtpd_tls_key_file - закрытый ключ сервера;
  • smtpd_tls_cafile - сертификат;
  • smtpd_tls_cert_file - сертификат;
  • smtpd_tls_received_header - запрос на получение данных про алгоритм шифрования и версию протокола;
  • smtpd_tls_session_cache_timeout - данные в кэше TLS-сессии считаются актуальными в указанном периоде (сек);
  • smtpd_tls_loglevel - на сколько подробно записывать сообщения в журнал;
  • smtpd_use_tls - оповестить об использовании TLS.


Напишите, и мы ответим
Понравилась статья или хотите также?
Напишите, и мы ответим
Другие статьи