Отправка почты с нескольких сайтов через Exim в Debian

Каждый сайт должен отправлять письма. Если это простой блог, то отправляются письма с восстановлением пароля или уведомлением о новых сообщениях. Если это интернет-магазин, то письма о формировании или смене статуса заказа.

Здесь мы настроим отправку почты с сайта от А до Я. В качестве операционной системы будет использоваться Debian, но может и другой дистрибутив. В качестве почтового сервера Exim.


Частая ситуация, когда для «человеческой» работы с входящей и исходящей почтой используется сторонний почтовый сервис: Google Apps, Яндекс 360 для Бизнеса или VK WorkSpace от mail.ru. А на сайте нужно настроить отправку только служебной почты.

Задача усложняется, если на сервере несколько сайтов и нужно для каждого сделать правильную настройку.

Именно такую ситуацию и будем рассматривать ниже.

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

Установка

Устанавливаем Exim командой:

sudo apt install exim4

Настройка

Далее запускаем команду на конфигурирование Exim:

sudo dpkg-reconfigure exim4-config

Далее в псевдографическом интерфейсе по шагам настраиваем Exim. Шагов всего 9 или 10. В зависимости настраивали вы Exim ранее или нет.

Шаг 1

Выбираем первый вариант: Internet site; …. Этот вариант позволяет серверу Exim самостоятельно отправлять почту.

Настройка Exim4. General type

  • internet site; mail is sent and received directly using SMTP выбираем если нужно отправлять почту от локальных пользователей силами своего сервера;
  • mail sent by smarthost; received via SMTP or fetchmail – выбираем если нужно использовать сторонний SMTP-сервер (smarthost) от Yandex или Google. Вся исходящая почта локальных пользователей будет отправлена сначала на smarthost, а потом доставлена до адресата;
  • mail sent by smarthost; no local mail – отправляет почту сразу на smarthost. Непонятно зачем нужно.
  • local delivery only; not on a network – выбираем если нужно сделать внутреннюю почту, которая не отправляется наружу.

Мы будем всю исходящую почту от сайтов отправлять своими силами, поэтому используем вариант №1.

Шаг 2

На этом шаге указываем PTR-запись внешнего ip-адреса сервера Exim. Про настройку PTR у домена пойдет ниже

Если у сервера Exim несколько IP-адресов и отправка исходящей почты для разных сайтов будет осуществляться с разных адресов, то указываем все записи через пробел. Этот случай и представлен на скрине ниже.

Настройка Exim4. Указываем доменные имена

Вообще у Вас может быть 3 возможных варианта:

  1. Один сайт и один IP-адрес – указываем доменное имя сайта и в дальнейшем мы нашему IP-адресу пропишем в качестве PTR доменное имя сайта.
  2. Много сайтов и один IP-адрес – указываем доменное имя которое стоит в PTR-записи у IP-адреса. В этом случае в PTR нужно внести доменное имя основного сайта. Если нет возможности изменить PTR, то письма 100% будут попадать в спам.
  3. Много сайтов и много IP-адресов – указываем через пробел все домены. Далее всем используемым IP-адресам пропишем соответствующие домены, от которых они будут отправлять почту. Вариант самый предпочтительный, так как каждый домен будет отправлять почту со своего адреса.

Шаг 3

Оставляем только 127.0.0.1. Отправлять исходящую почту Exim`ом мы планируем только с этого севера.

Настройка Exim4. Какие IP-адреса слушает

Шаг 4

Оставляем пустым, так как не используем локальные домены.

Настройка Exim4. Указываем локальные домены

Шаг 5

Оставляем пустым, так как не будем использовать пересылку на smarthost

Настройка Exim4. Указываем Smarthost

Шаг 6

Оставляем пустым, так как не будем использовать пересылку на smarthost

Настройка Exim4.  Адрес SMTP для релея почты

Шаг 7

Отвечаем No.

Настройка Exim4. Не разрешать искать DNS-сервер

На сервере постоянное подключение к Интернету и «минимизировать» DNS-запросы нам не нужно.

Шаг 8

Выбираем mbox format in /var/mail.

Настройка Exim4. Выберете место хранения почты

  1. mbox format in /var/mail — храним всю почту от всех пользователей в одном месте /var/mail/.
  2. Maildir format in home directory — почта хранится в домашних директориях пользователей.

Так как отправлять почту будет только один локальный пользователь – www-data, то первый вариант предпочтителен. Web-сервер работает от имени пользователя www-data.

Шаг 9

Отвечаем No.

Настройка Exim4. Разделении файла конфигурации на маленькие

Так как у нас Exim используется для отправки исходящей почты сайтов, нам не нужно разделять конфигурационный файл на несколько мелкий. Это бывает удобно для администрирования почтового сервера компании, где много почтовых ящиков, обслуживаемых доменов, ACL-листов и разных дополнительных правил.

Шаг 10

Этого пункта может и не быть.

Указываем e-mail для системной учетной записи

Указываем почту для системного аккаунта. Чаще всего на эту почту будут приходить ошибки сервера.

Доп. настройка Exim

Все дополнительные настройки необходимо вносить в конфигурационный файл /etc/exim4/exim4.conf.template. Открыть его нужно командой:

sudo nano /etc/exim4/exim4.conf.template

Чтобы изменения вступили в силу, перезапускаем exim:

sudo service exim4 restart

Отключаем IPv6

Чтобы отключить IPv6 в Exim в самое начало конфигурационного файла вписываем disable_ipv6 = true.

Должно получиться так:

disable_ipv6 = true
#####################################################
### main/01_exim4-config_listmacrosdefs
#####################################################
...

Разрешить исходящую почту на сторонние SMTP

Если Вы также используете сервисы Google Apps, Яндекс 360 для Бизнеса или VK WorkSpace от mail.ru для создания копоративных почтовых ящиков на этом домене, то необходимо настроить exim для такой работы.

Сервер exim4 не будет отправлять на такие ящики почту, так как по умолчанию считать себя единственным сервером этого доменного имени и при отправке почты будет искать получателя у себя. Для того, чтобы разрешить ему отправлять такую почту, необходимо в конфигурационном файле закомментировать строчку domains =! +local_domains в секции – dnslookup::

...
dnslookup:
debug_print = «R: dnslookup for $local_part@$domain»
driver = dnslookup
#domains =! +local_domains
transport = remote_smtp
...

Теперь наш сервер не будет считать почту на домене, который он обслуживает, только своей.

Правильный обратный адрес в письмах

По умолчанию все письма от ваших сайтов будут приходить от имени www-data@adminway.ru, так как web-сервер запущен от имени www-data. Чтобы исправить это, необходимо в файле /etc/email-addresses внести изменения:

sudo nano /etc/email-addresses

Добавить строчку:

www-data: no-reply@adminway.ru

Убрать лишние заголовки в письме

В исходящем письме присутствуют заголовки, которые могут выдавать ваш локальный IP-адрес и другую «секретную» информацию. В Exim есть возможность убрать такие заголовки.

Для этого необходимо создать файл /etc/exim4/filter и в него добавить заголовки, которые нужно удалить.

touch /etc/exim4/filter

В него помещаем код:

headers remove X-PHP-Originating-Script
headers remove Received
headers remove X-Mailer

Эти строки удалят заголовки X-PHP-Originating-Script, Received и X-Mailer.

Далее в начало конфигурационного файла exim помещаем код:

system_filter = /etc/exim4/filter
#####################################################
### main/01_exim4-config_listmacrosdefs
#####################################################
######################################################################
#      Runtime configuration file for Exim 4 (Debian Packaging)      #
######################################################################
...

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

Настройка доменного имени

PTR

PTR запись – это запись, которая связывает IP-адрес с доменом вашего сайта. PTR защищает владельца IP-адреса от злоумышленника, который арендуя адрес, отправляет почту от чужого имени. Письмо отправляется с SMTP-сервера, проверяется его IP-адрес и если у этого адреса есть привязка к домену и домен совпадает, то все в порядке.

PTR-запись может быть изменена только владельцем IP-адреса. Это может быть либо хостинг, либо провайдер. В любом случае нужно искать настройки этой записи в панели управления хостингом или в личном кабинете провайдера. Если там нет возможности изменить, то стоит обратиться в техническую поддержку.

PTR нужно изменить для всех IP-адресов, которые будут использоваться для рассылки. Если у нас несколько адресов и несколько сайтов на сервер, то указываем домены в качестве PTR-записи соответствующим адресам.

Проверить PTR

Проверить PTR можно командой:

nslookup 81.19.72.32
Server:		192.168.55.1
Address:	192.168.55.1#53
Non-authoritative answer:
32.72.19.81.in-addr.arpa	name = lenta.ru.
Authoritative answers can be found from:
lenta.ru	internet address = 81.19.72.32

В примере мы проверяем IP-адрес популярного новостника России. У него PTR-запись в порядке.

SPF

SPF-запись – это запись, которая связывает ваше доменное имя с IP-адресом. Если PTR связывало IP-адрес, то SPF наооборот. Это защита доменного имени от злоумышленника. В SPF указываются все адреса, которым разрешено отправлять почту от этого домна.

Эта запись указывается на «нашей» стороне, в панели регистратора домена. Вот так она выглядит в REG.RU:

Добавление SPF в Reg.ru

@ — это домен второго уровня. Если нужно добавить для домена третьего уровня, скажем test.ваш_домен.ru, то вместо значка собаки вписываем test.

В большинстве запись должна иметь вид:

v=spf1 ip4:188.1.13.122 a mx -all

Где:

  • ip4: — IP-адрес вашего сервера;
  • a — IP-адрес, который указан в A-записи;
  • mx — IP-адрес, который указан в MX-записи;
  • -all — все остальные письма отбрасывать. Если указать ~ вместо тире, то все остальные письма будут отправлены в спам.

Если сайт размещен на сервере, на который указывает A-запись, то теоретически ip4 лишняя. Но поддержка Yandex указала что этого не достаточно и «правильнее» использовать ip4.

Если вы используете сервис «Яндекс 360 для Бизнеса», то рекомендованная запись для вас будет вида – v=spf1 redirect=_spf.yandex.net. В нее смело можно добавить IP-адрес нашего сервера – v=spf1 ip4:188.1.13.122 redirect=_spf.yandex.net

SPF указываем для каждого домена, размещенного на сервере.

Проверить SPF

host -t txt lenta.ru
lenta.ru descriptive text "v=spf1 ip4:81.19.78.96/27 redirect=spf.rambler.ru ~all"
lenta.ru descriptive text "yandex-verification: 5388a4342017162e"
lenta.ru descriptive text "mailru-verification: 794fe9047d69748b"

Отсюда видно, что разрешается отправлять почту диапазону IP-адресов 81.19.78.96/27 и адресам rambler.ru. Если какие-то другие отправляют почту, то не отбрасывать ее, а просто складывать в спам.

DKIM

DKIM – это электронная цифровая подпись вашего письма. DKIM дает возможность получателю подтвердить можно ли серверу отправителю отправлять почту.

Вы у себя на сервере должны сформировать открытый и закрытый ключ. В панели регистратора домена объявить открытый ключ для проверки. Далее настроить сервер Exim, чтобы он отправлял всю почту, подписывая своим закрытым ключом. Сервер-получатель, получая письмо сможет проверить ЭЦП, тем самым проверить правомерность отправленного письма.

Подробная инструкция по добавлению DKIM-записи для почтового сервера Exim описана здесь.

Можно создать одну DKIM запись на почтовом сервер и её указать в панели регистратора всем доменам. Если владельцы сайтов разные, то правильнее создать для каждого домена отдельные.

Проверить DKIM

host -t txt szmail._domainkey.sibzavodagro.ru
szmail._domainkey.sibzavodagro.ru descriptive text "v=DKIM1; k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDl39CZaQyEw/MxP9cWAvB7gZVaLqE3TisFfOemGydgvP0Bj8wnDKqinzvd4p9TtOBFqua4DgyvTdNBV//GbGSC/e1GPAZYbCW1Qj3+R8c81UgSh5i/Qxwh8VqBrtCEud4CfWup3iDpE7eEhlQKUnK5WizlWsF4pRcMzXv0OSXvNwIDAQAB"

В консоли видим открытый ключ вашего почтового сервера.

DMARC

DMARC – это рекомендации серверу получателя что делать с письмами, которые не прошли DKIM и SPF проверки.

Это не обязательный пункт, но очень важный. Без него 99% вашей исходящей почты попадет в почтовые ящики получателей.

По своей сути DMARС — это TXT-запись в панели регистратора.

Правильный DMARC

Для домена второго уровня — _dmarc. Для домена третьего уровня test.ваш_домен.ru_dmarc.test

Хорошая запись может выглядеть вот так или очень похожа на нее:

v=DMARC1; p=reject; pct=100; ruf=mailto:admin@ваш_домен.ru; fo=1

Возможные значения записи:

Тэг Назначение Варианты По умолчанию Пример Обязательность
v Версия протокола На данный момент это единственный вариант v=DMARC1 Да
p Политика домена

none: действий не требуется;

quarantine: сообщения в папку «спам», которые не прошили проверку;

reject: сообщения отклонялись, не прошедшие проверку.

p=quarantine Да
pct Процент сообщений, подлежащих фильтрации Может быть любое целое число в пределах 0...100. Нужно для плавного перехода к 100. 100 pct=80 Нет
ruf Адрес для отправки отчета о каждом случае Указываем email ruf=mailto:admin@ваш_домен.ru Нет
rua Адрес для отправки сводных отчетов о нескольких случаях Указываем email rua=mailto:admin@ваш_домен.ru Нет
ri Интервал между отправкой сводных отчетов в секундах Любое целое число больще 0. 86400 ri=3600 Нет
adkim Проверка DKIM

r — relaxed; Поддомены могут "прикрываться" DKIM основного домена.

s — strict; У домена строго должен быть валидный DKIM.

r adkim=s Нет
aspf Проверка SPF

r — relaxed; Поддомены могут "прикрываться" SPF основного домена.

s — strict; У домена строго должен быть валидный SPF.

r aspf=s Нет
fo Настройки отчетов об ошибках

0: отправлять отчёт, если все основные механизмы аутентификации не пройдены.

1: отправлять отчёт, если хотя бы один механизм аутентификации не пройден.

d: отправлять отчёт, если не пройдена проверка DKIM

s: отправлять отчёт, если не пройдена проверка SPF

0 fo=1 Нет
rf Формат для отчетов Пока это единственный формат afrf rf=afrf Нет

Стоит понимать, что DMARC – это просьба владельца домена к принимающей стороне. Носить строго рекомендательный характер.

Проверить DMARC

host -t txt _dmarc.adminway.ru
_dmarc.news.sibzavodagro.ru descriptive text "v=DMARC1; p=reject; pct=100; ruf=mailto:admin@adminway.ru; fo=1"

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

Чтобы проверить правильность всех настроек есть замечательный сервис — www.mail-tester.com. На него отправляем тестовое письмо, а он формирует отчет о всех настройках.

Чтобы отправить сообщение со своего сервера Exim, необходимо установить дополнительную библиотеку:

sudo apt install mailutils

А далее из консоли можно отправлять email-сообщения командой:

echo "Проверка связи" | mail -s "Тело письма должно содержать абзац текста, чтобы не сойти за спам!" название@домен.ru

Где название@домен.ru почтовый адрес mail-tester`а.

Теги:

Комментарии




В качестве аватарки используется сервис - gravatar.com



IT-событие
Создание AMD
Создание AMD