Отправка почты со своего сервера: пошаговая настройка Postfix, SPF, DKIM и TLS для Битрикса

При отправке почты через сторонние smtp сереры нужно подстраиваться под их ограничения. Например для Яндекса это ограничение 3000-5000 писем в сутки.


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


Для приема писем будем считать что используется сервис от Яндекса - Почта для домена или сейчас уже Яндекс 360


Установку производим на том же сервере где расположен сайт на Битркисе.


Домен для пример - domain.ru

Почтовые адреса - info@domen.ru, order@domen.ru и тд

Адрес тестовой почты - name@gmail.com


Установка и настройка Postfix

Первым делом устанавливаем postfix, который будет отправлять исходящую почту.
yum install mailx
yum install postfix
systemctl enable postfix
systemctl start postfix
Далее редактируем настройки в файле /etc/postfix/main.cf
cd /etc/postfix/ cp main.cf main.cf.ori
Добавляем в конец файла записи чтобы переопределить исходные
inet_interfaces = loopback-only mydestination = localhost.$mydomain, localhost, $myhostname # если нужно складывать письма в локлаьныя ящик для o**@domain.ru #mydestination = domain.ru localhost.$mydomain, localhost, $myhostname
Включаем использование postfix по умолчанию
alternatives --config mta
В результате у нас будет список доступных вариантов, нужно будет ввести цифру под которой находится запись со строкой postfix, в примере это - 2. Нажимаем Enter
pochta1.png
Отправляем тестовое письмо
echo "Test mail" | mail -v -s "Testing mail" -S smtp="localhost:25" -S from="info@domain.ru" -S return-path="info@domain.ru" name@gmail.com
Скорее всего оно не дойдет, будет отклонено почтовым сервисом, так как нужно выполнить еще ряд манипуляций.

Посмотреть что произошло можно в логе
tail -n 40 /var/log/maillog
И увидим там примерно следующее

pochta2.png

Поэтому перейдем к настройке DKIM и SPF

Настройка SPF

Для настройки SPF записи, необходимо чтобы в DNS записях была TXT запись примрено следующая для хоста - @.


v=spf1 a ip4:11.180.180.120 include:_spf.yandex.net ~all

IP адрес - 11.180.180.120 приведен для примера, этот адрес должен быть адресом сервера на котором производим настройку. Его указывать не обязательно, так как есть в строке символ - "a" который говорит о том что нужно взять ip адрес из записи типа A.


include:_spf.yandex.net - это нужно чтобы работала почта от яндекса, чтоб из почтового ящика также можно было отправлять письма по старому.


Так это выглядит на странице управления DNS домена в яндексе


pochta3.png

Настройка DKIM

На этом шаге также будем вносить запись в DNS, но прежде нужно подготовить данные.


Устанавливаем, включаем, запускаем


yum install opendkim opendkim-tools
Далее генерируем ключ и переименовываем полученные файлы для удобства
cd /etc/opendkim/keys/ opendkim-genkey -d domain.ru -s server mv server.private server.domain.ru.private mv server.txt server.domain.ru.txt chown opendkim:opendkim server.*

Содержимое файла server.domain.ru.txt нужно указать в DNS домена
pochta4.png

Так это выглядит на странице управления DNS домена в яндексе
pochta5.png

Проверить подпись можно будет через некоторое время например здесь - https://dkimcore.org/c/keycheck указав селектор из примера - server и домен - domain.ru ( в вашем случае домен будет другой)

Теперь заполняем соответствующие таблицы
cd /etc/opendkim/
В конец файла KeyTable добавляем запись
server._domainkey.domain.ru
domain.ru:server:/etc/opendkim/keys/server.domain.ru.private
pochta6.png

В файл SigningTable добавляем адреса с которых будет отправлять, укажем через * чтобы правила работали для любых адресов исходящих писем с конкретного домена.

# WILDCARD EXAMPLE
*@domain.ru server._domainkey.domain.ru
# NON-WILDCARD EXAMPLE
domain.ru server._domainkey.domain.ru
* server._domainkey.domain.ru
pochta7.png

В файл TrustedHosts добавляем домен в конец файла

*.domain.ru domain.ru
pochta8.png

Теперь вносим изменения в конфиг opendkim - /etc/opendkim.conf и приводим значения параметров к следующему виду

Mode s Selector server KeyFile /etc/opendkim/keys/server.domain.ru.private KeyTable /etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable InternalHosts refile:/etc/opendkim/TrustedHosts Socket inet:8891@localhost
Применяем сделанные настройки и включаем
systemctl restart opendkim systemctl enable opendkim
Добавляем в конец основного файла настроек Postfix - /etc/postfix/main.cf соответствующие настройки
# dkim milter_protocol = 2 milter_default_action = accept smtpd_milters = inet:localhost:8891 non_smtpd_milters = inet:localhost:8891 #!/bin/bash # Ваш Bash скрипт
Применяем настройки
systemctl restart postfix

TLS. Шифрование исходящих писем Postfix


Чтобы исходящие письма шифровались и в почтовиках не отображались лишние надписи что письма не зашифрованы и не безопасны, сделаем несколько действий.


Для работы шифрования возьмем действующие сертификаты на домен, которые были автоматически получены с помощью Let's Encrypt через меню Bitrix Env


Для этого укажем пути до файлов приватного ключа и цепочки сертификатов. Пути не меняются при обновлении сертификатов и лежат по стандартному пути - /home/bitrix/dehydrated/certs/domain.ru/


Добавляем в конец основного файла настроек Postfix - /etc/postfix/main.cf соответствующие настройки


smtpd_tls_key_file = /home/bitrix/dehydrated/certs/domain.ru/privkey.pem smtpd_tls_cert_file = /home/bitrix/dehydrated/certs/domain.ru/fullchain.pem smtp_use_tls = yes

pochta9.png

Применяем настройки
systemctl restart postfix

PTR запись


Также необходимо сделать в панели управления хостингом или виртуальным серверов некоторые настройки, чтобы IP адрес сервера указывал на домен domain.ru


Как это сделать смотрите на страницах помощи вашего хостинг провайдера.


Настройка отправки почты для Битрикс


Настройки для отправки email писем в битриксе хранятся в файле /home/bitrix/.msmtprc


Его можно изменить через меню Bitrix Env либо вручную приведя к следующему виду. В поле From укажите адрес отправителя по умолчанию, например: info@domain.ru


pochta10.png

Тестовая отправка email


После добавления записей в DNS нужно подождать несколько часов, лучше сутки, чтобы сделанные изменения стали учитываться.


После этого можно сделать тестовую отправку письма например из терминала


echo "Test mail" | mail -v -s "Testing mail" -S smtp="localhost:25" -S from="info@domain.ru" -S return-path="info@domain.ru" name@gmail.com

 Также можно сделать тестовую отправку из административного раздела битркиса, выполнив PHP код на странице /bitrix/admin/php_command_line.php?lang=ru

var_dump(mail('name@gmail.com', 'Тема', 'Сообщение'));

Проверка DKIM


Проверить устанавливается ли подпись можно не выходя из консоли, для этого выполним тестовую отправку письма
echo "Test text" | mail -s "Test title" name@gmail.com
И посмотрим в локальном почтовом ящике содержимое письма, елси операция выполнялась по польвзаотелем root, то сомтрим так
tail /var/mail/root -n 50
и ищем текст DKIM-Signature, если он есть, значит письма подписываются

pochta11.jpeg


Обратно к списку