Если вам нужно самостоятельно отправлять почту со своего домена без использования сторонних SMTP-сервисов, можно арендовать Linux VPS. В качестве почтового сервера (MTA) обычно используют Postfix или Exim.
Перед покупкой VPS обязательно напишите в поддержку хостинга и спросите: «Открыт ли у вас исходящий 25 порт SMTP?». Многие хостеры закрывают его по умолчанию, чтобы защититься от спамеров. Если порт закрыт, отправка почты напрямую на почтовые серверы может быть невозможна.
1. Подготовка: настройки сети и DNS
Чтобы почта корректно доставлялась, нужно настроить несколько базовых параметров DNS вашего домена:
Имя хоста (Hostname). Задайте серверу имя в системе, например
mail.yourdomain.com.A-запись. Направьте поддомен
mail.yourdomain.comна IP-адрес вашей VPS.MX-запись. Укажите, какой сервер принимает почту для домена. Запись выглядит так:
@ MX 10 mail.yourdomain.com.PTR-запись (Reverse DNS). Связывает IP-адрес сервера обратно с его именем. Она настраивается в панели хостинга VPS, а не у регистратора домена.
PTR-запись важна для доставки почты. Многие почтовые серверы проверяют обратную DNS-запись IP-адреса, а её отсутствие или несоответствие может привести к отклонению писем или попаданию в спам.
Рекомендуется согласовать прямую и обратную DNS-записи:
1.2.3.4 → mail.yourdomain.com mail.yourdomain.com → 1.2.3.4
2. Настройка SPF
SPF — это запись в DNS, которая указывает, каким серверам разрешено отправлять почту от имени вашего домена.
Создайте TXT-запись:
Тип записи: TXT
Хост/Имя:
@(или пустое поле, в зависимости от DNS-панели)Значение:
v=spf1 ip4:1.2.3.4 ~allВместо
1.2.3.4подставьте IP-адрес своего сервера.
Что значит ~all
~all означает SoftFail: сообщения с IP-адресов, не перечисленных в SPF, не проходят проверку с мягким результатом. Принимающий сервер самостоятельно решает, как обработать такое письмо.
После проверки конфигурации можно использовать -all, если все легитимные источники отправки перечислены в SPF.
3. Генерация ключей DKIM через OpenSSL
DKIM — это цифровая подпись, которая помогает проверять подлинность отправителя и целостность письма. Сервер подписывает письмо приватным ключом, а получатель проверяет подпись с помощью публичного ключа из DNS.
Для генерации пары ключей зайдите на сервер по SSH и выполните следующие команды.
1. Создаём приватный ключ длиной 2048 бит
openssl genrsa -out dkim.private 2048
2. Генерируем публичный ключ
openssl rsa -in dkim.private -pubout -out dkim.public
3. Выводим публичный ключ на экран
cat dkim.public
В терминале появится текст примерно такого вида:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A...
-----END PUBLIC KEY-----
Для DNS-записи нужно взять только Base64-содержимое ключа между заголовками и объединить его в одну строку без пробелов и переносов.
Затем создайте TXT-запись dkim._domainkey (где dkim — имя вашего селектора).
Тип записи: TXT
Хост/Имя:
dkim._domainkeyЗначение:
v=DKIM1; k=rsa; p=ТУТ_ВАШ_СКОПИРОВАННЫЙ_КЛЮЧ
Если DNS-провайдер поддерживает разбиение длинных TXT-записей на несколько строк, используйте эту возможность для ключей, которые не помещаются в одну строку.
4. Подключение DKIM к почтовому серверу
Вариант А: если у вас Exim
В конфигурационном файле Exim (точный путь зависит от дистрибутива и способа установки) найдите транспорт, который отвечает за отправку почты наружу. Обычно он называется remote_smtp.
Пример конфигурации:
remote_smtp:
driver = smtp
dkim_domain = yourdomain.com
dkim_selector = dkim
dkim_private_key = /etc/exim/dkim.private
dkim_canon = relaxed
Выдайте права на чтение файла приватного ключа пользователю, от имени которого работает Exim. Имя пользователя зависит от дистрибутива. Например, в некоторых системах это exim, а в Debian может использоваться Debian-exim.
Пример для системы с пользователем exim:
chown exim:exim /etc/exim/dkim.private
chmod 600 /etc/exim/dkim.private
Перезапустите сервис:
systemctl restart exim4
# или
systemctl restart exim
Проверьте, что используемый пользователь Exim действительно имеет доступ к приватному ключу.
Вариант Б: если у вас Postfix
Postfix использует внешнюю утилиту OpenDKIM для добавления DKIM-подписей.
1. Установите пакеты
apt install opendkim opendkim-tools
2. Настройте OpenDKIM
Откройте конфигурационный файл /etc/opendkim.conf и добавьте или настройте следующие параметры:
Syslog yes
RequiredHeaders yes
Mode sv
SubDomains no
Socket inet:8891@localhost
KeyTable /etc/opendkim/KeyTable
SigningTable /etc/opendkim/SigningTable
ExternalIgnoreList /etc/opendkim/TrustedHosts
InternalHosts /etc/opendkim/TrustedHosts
3. Подключите OpenDKIM к Postfix
В конец основного конфига Postfix /etc/postfix/main.cf добавьте:
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
4. Настройте таблицы OpenDKIM
В этом примере используется один домен и один ключ DKIM. Имя ключа в KeyTable — mail._domainkey.yourdomain.com.
/etc/opendkim/KeyTable
Этот файл связывает имя ключа с доменом, селектором и путём к приватному ключу:
mail._domainkey.yourdomain.com yourdomain.com:mail:/etc/opendkim/keys/dkim.private
Здесь:
mail._domainkey.yourdomain.com— имя ключа в таблице.yourdomain.com— домен, который попадёт в DKIM-подпись (d=).mail— селектор (s=)./etc/opendkim/keys/dkim.private— путь к приватному ключу.
/etc/opendkim/SigningTable
Этот файл связывает домен отправителя с именем ключа из KeyTable:
yourdomain.com mail._domainkey.yourdomain.com
Если необходимо использовать шаблон для адресов отправителей домена, можно указать:
*@yourdomain.com mail._domainkey.yourdomain.com
Для wildcard-варианта необходимо настроить соответствующий тип таблицы refile: в директиве SigningTable. В данной инструкции используется простой вариант сопоставления по домену без refile.
/etc/opendkim/TrustedHosts
Внесите localhost и IP-адрес своего сервера:
127.0.0.1
localhost
1.2.3.4
5. Перенесите приватный ключ и перезапустите службы
Создайте каталог для ключей:
mkdir -p /etc/opendkim/keys/
Переместите приватный ключ:
mv dkim.private /etc/opendkim/keys/
Назначьте владельца и права:
chown -R opendkim:opendkim /etc/opendkim/
chmod 600 /etc/opendkim/keys/dkim.private
Перезапустите службы:
systemctl restart opendkim postfix
Проверьте статус:
systemctl status opendkim
systemctl status postfix
При необходимости изучите журнал OpenDKIM:
journalctl -u opendkim -n 50 --no-pager
5. Настройка DMARC
DMARC — это механизм, который позволяет домену сообщить принимающим почтовым серверам, как обрабатывать сообщения, не прошедшие необходимые проверки SPF и DKIM с учётом соответствия домена в поле From.
Создайте TXT-запись:
Тип записи: TXT
Хост/Имя:
_dmarcЗначение для начала:
v=DMARC1; p=none; rua=mailto:admin@yourdomain.com
Что это значит
p=none— режим мониторинга. Домен просит не применять специальное действие к сообщениям, не прошедшим DMARC. Можно наблюдать за результатами проверок и собирать отчёты.rua=mailto:...— адрес, на который почтовые сервисы могут отправлять агрегированные отчёты о проверках.p=quarantine— просит принимающий сервер обрабатывать сообщения, не прошедшие DMARC, как подозрительные, например помещать их в спам.p=reject— просит отклонять сообщения, не прошедшие DMARC. Реальное действие определяется принимающим сервером.
После проверки и исправления конфигурации можно изменить политику с p=none на p=quarantine или p=reject.
6. Как проверить DNS-записи через терминал
Проверить, что настройки обновились в DNS, можно из консоли с помощью утилит dig или nslookup.
Проверка SPF
dig yourdomain.com TXT +short
Или:
nslookup -type=TXT yourdomain.com
Проверка DKIM
Запрос выполняется по имени вашего селектора:
dig mail._domainkey.yourdomain.com TXT +short
Или:
nslookup -type=TXT mail._domainkey.yourdomain.com
Проверка DMARC
dig _dmarc.yourdomain.com TXT +short
Или:
nslookup -type=TXT _dmarc.yourdomain.com
Проверка PTR (обратной записи)
dig -x 1.2.3.4 +short
Или:
nslookup 1.2.3.4
Проверка hostname
hostname -f
Убедитесь, что имя согласовано с A- и PTR-записями.
Рекомендуемая схема:
Hostname: mail.yourdomain.com
A: mail.yourdomain.com → 1.2.3.4
PTR: 1.2.3.4 → mail.yourdomain.com
Имя хоста, используемое сервером, и обратная DNS-запись должны быть настроены согласованно.