Отправка почты с нескольких сайтов через 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 самостоятельно отправлять почту.
- 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-адресов и отправка исходящей почты для разных сайтов будет осуществляться с разных адресов, то указываем все записи через пробел. Этот случай и представлен на скрине ниже.
Вообще у Вас может быть 3 возможных варианта:
- Один сайт и один IP-адрес – указываем доменное имя сайта и в дальнейшем мы нашему IP-адресу пропишем в качестве PTR доменное имя сайта.
- Много сайтов и один IP-адрес – указываем доменное имя которое стоит в PTR-записи у IP-адреса. В этом случае в PTR нужно внести доменное имя основного сайта. Если нет возможности изменить PTR, то письма 100% будут попадать в спам.
- Много сайтов и много IP-адресов – указываем через пробел все домены. Далее всем используемым IP-адресам пропишем соответствующие домены, от которых они будут отправлять почту. Вариант самый предпочтительный, так как каждый домен будет отправлять почту со своего адреса.
Шаг 3
Оставляем только 127.0.0.1. Отправлять исходящую почту Exim`ом мы планируем только с этого севера.
Шаг 4
Оставляем пустым, так как не используем локальные домены.
Шаг 5
Оставляем пустым, так как не будем использовать пересылку на smarthost
Шаг 6
Оставляем пустым, так как не будем использовать пересылку на smarthost
Шаг 7
Отвечаем No.
На сервере постоянное подключение к Интернету и «минимизировать» DNS-запросы нам не нужно.
Шаг 8
Выбираем mbox format in /var/mail.
- mbox format in /var/mail — храним всю почту от всех пользователей в одном месте /var/mail/.
- Maildir format in home directory — почта хранится в домашних директориях пользователей.
Так как отправлять почту будет только один локальный пользователь – www-data
, то первый вариант предпочтителен. Web-сервер работает от имени пользователя www-data.
Шаг 9
Отвечаем No.
Так как у нас Exim используется для отправки исходящей почты сайтов, нам не нужно разделять конфигурационный файл на несколько мелкий. Это бывает удобно для администрирования почтового сервера компании, где много почтовых ящиков, обслуживаемых доменов, ACL-листов и разных дополнительных правил.
Шаг 10
Этого пункта может и не быть.
Указываем почту для системного аккаунта. Чаще всего на эту почту будут приходить ошибки сервера.
Доп. настройка 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:
@ — это домен второго уровня. Если нужно добавить для домена третьего уровня, скажем 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
. Для домена третьего уровня 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`а.
Теги: exim