Каждый вебмастер, интернет-магазин или стартап рано или поздно сталкивается с критической проблемой: письма с сайта — подтверждения регистрации, чеки об оплате, ссылки для сброса пароля или сервисные уведомления — не доходят до адресатов или прямиком улетают в папку «Спам» на Mail.ru, Яндекс Почте и Gmail. Разработчик проверяет код отправки через mail() или PHPMailer: ошибок нет, функция возвращает true, но почтовые ящики клиентов остаются пустыми.
Причина в том, что современные почтовые сервисы ведут агрессивную войну со спамом и фишингом. В 2024–2026 годах почтовые провайдеры перешли на модель нулевого доверия: если у сервера нет корректной обратной DNS-записи (PTR), не настроена криптографическая подпись DKIM или отсутствует строгая политика DMARC, письмо либо немедленно отбрасывается еще на этапе SMTP-рукопожатия с кодом 550 5.7.1 Message rejected, либо без предупреждения маркируется как подозрительное.
В этом пошаговом руководстве мы разберем весь процесс настройки надежного, легковесного почтового узла на Ubuntu 24.04 LTS: от открытия портов и прописки PTR у хостера до конфигурации Postfix Send-Only, развертывания 2048-битного OpenDKIM и формирования идеальных записей SPF и DMARC для получения заветного балла 10/10 на Mail-Tester.
127.0.0.1. Это сэкономит оперативную память и гарантирует, что ваш сервер случайно не превратится в открытый спам-релей (Open Relay).1. Почему письма с нового VDS сразу летят в спам
Когда вы разворачиваете новый VDS у хостинг-провайдера, вам достается публичный IPv4-адрес. В 80% случаев этот IP-адрес ранее уже использовался другими арендаторами. Если предыдущий владелец занимался агрессивным парсингом, рассылками или его сервер был взломан ботнетом, адрес может находиться в десятках международных спам-баз (DNSBL).
Кроме репутации IP, современные спам-фильтры (Яндекс Спамооборона, Mail.ru Антиспам, Google Spam Filter) оценивают совокупность технических факторов:
| Фактор доверия | Зачем нужен почтовикам | Что происходит при отсутствии | Где настраивается |
|---|---|---|---|
| Обратная зона PTR (rDNS) | Связывает IP-адрес сервера с его официальным FQDN хостнеймом | Мгновенный реджект (550 Mail.ru / Gmail) | Панель хостинга VDS |
| Запись SPF (TXT) | Список доверенных IP, имеющих право отправлять почту от имени домена | Метка «Подозрительный отправитель», Спам | DNS редактор домена |
| Подпись DKIM (RSA) | Криптографическая гарантия, что тело и заголовки не подменены по пути | Письма не проходят валидацию подлинности | Сервер (OpenDKIM) + DNS |
| Политика DMARC (TXT) | Указывает почтовикам, что делать с письмами при сбое SPF/DKIM | Отказ от доставки по строгим правилам 2026 года | DNS редактор домена |
| Чистота IP в блэклистах | Отсутствие IP в базах Spamhaus, Barracuda, SORBS | Блокировка всех исходящих писем | Проверка через чекер SysKit |
Перед началом настройки обязательно проверьте IP-адрес вашего сервера в нашем онлайн-инструменте Проверка IP в спам-базах DNSBL. Если адрес заблокирован в Spamhaus ZEN или CBL, проще всего сразу запросить у хостера смену IPv4-адреса, пока на сервере нет боевых проектов.
2. Шаг 1: Проверка 25 порта и настройка обратной зоны PTR (Reverse DNS)
Два главных инфраструктурных требования для любого почтового узла — это доступность исходящего TCP-порта 25 и совпадение обратной DNS-записи PTR с FQDN именем сервера.
1. Проверка исходящего порта 25 (SMTP):
Большинство добросовестных провайдеров блокируют исходящие соединения по порту 25 на новых аккаунтах для предотвращения распространения спама вредоносными ботами. Проверьте доступность порта командой в терминале сервера:
# Проверяем исходящее соединение к почтовому шлюзу Яндекс Почты
nc -zv -w 5 mx.yandex.ru 25
# Или через telnet:
telnet mx.yandex.ru 25
Если в ответ выводится Connection to mx.yandex.ru 25 port [tcp/smtp] succeeded! — порт открыт. Если соединение висит с Connection timed out — порт заблокирован на аппаратном фаерволе хостинга. В этом случае напишите в техподдержку вашего провайдера: «Здравствуйте! Прошу открыть исходящий TCP порт 25 на сервере для отправки сервисных транзакционных писем с сайта (уведомления и регистрация клиентов)». Провайдеры уровня Selectel, Timeweb или Beget открывают порт в течение 10–20 минут после подтверждения личности владельца аккаунта.
2. Настройка имени хоста (FQDN) на сервере:
Имя сервера не должно быть бессмысленным набором символов вроде vds12345. Оно обязано быть полноценным поддоменом вашего основного домена, например mail.example.com:
# Задаем официальный FQDN хостнейм сервера
sudo hostnamectl set-hostname mail.example.com
# Проверяем корректность:
hostname -f
# Должно вернуть: mail.example.com
Отредактируйте файл /etc/hosts, добавив сопоставление вашего внешнего IP и домена:
127.0.0.1 localhost
198.51.100.4 mail.example.com mail
3. Прописка PTR-записи в личном кабинете хостинга:
В панели управления хостингом найдите раздел Сеть / IP-адреса или карточку вашего VDS. Найдите поле «Обратная зона (PTR / Reverse DNS)» и впишите туда точный FQDN: mail.example.com.
Для проверки распространения PTR-записи выполните команду:
dig -x 198.51.100.4 +short
# Ожидаемый ответ: mail.example.com.
3. Шаг 2: Установка и чистая настройка Postfix Send-Only
Для отправки транзакционных писем с сайта нам потребуется почтовый транспортный агент (MTA) Postfix. Мы настроим его в строгом режиме Send-Only: сервер будет принимать письма только от локальных процессов сайта (PHP, Node.js, Python), исключая прослушивание внешнего сетевого интерфейса.
# 1. Устанавливаем Postfix и утилиты проверки почты
sudo apt update
sudo apt install -y postfix mailutils libsasl2-modules
Во время установки появится диалоговое окно конфигуратора пакетов (debconf):
- General type of mail configuration: выберите
Internet Site. - System mail name: введите ваш основной домен (например,
example.com).
Создание безопасной конфигурации /etc/postfix/main.cf:
Создайте резервную копию исходного файла и запишите эталонную конфигурацию:
sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
sudo nano /etc/postfix/main.cf
Вставьте следующее содержимое (замените mail.example.com и example.com на ваши данные):
# Баннер почтового демона (скрываем точную версию в целях безопасности)
smtpd_banner = $myhostname ESMTP
biff = no
append_dot_mydomain = no
readme_directory = no
# Идентификация сервера и доменов
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost
# Релей и маршрутизация
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
# КРИТИЧЕСКИ ВАЖНО: Принимаем почту ТОЛЬКО от локальной системы
inet_interfaces = loopback-only
inet_protocols = ipv4
# Безопасность TLS при отправке на внешние почтовики (Яндекс, Mail.ru, Google)
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# Лимиты и предотвращение флуда
default_process_limit = 50
smtpd_client_connection_count_limit = 10
Проверьте синтаксис конфига и перезапустите службу:
# Проверка синтаксиса Postfix (ошибок быть не должно)
sudo postfix check
# Перезапуск сервиса
sudo systemctl restart postfix
sudo systemctl enable postfix
Убедитесь через команду sudo ss -tulpn | grep 25, что процесс master слушает строго адрес 127.0.0.1:25, но ни в коем случае не 0.0.0.0:25. Полную эталонную спецификацию директив смотрите в нашем pSEO-конфиге Конфигурация Postfix Send-Only для сайта.
4. Рекомендуемые VDS-провайдеры с чистыми IP и поддержкой PTR
Для стабильной доставки почты критически важны два параметра хостинга: возможность самостоятельного управления обратной зоной PTR в панели управления и чистые пулы IP-адресов без шлейфа спам-активности. Ниже представлены проверенные хостинг-провайдеры, полностью отвечающие этим требованиям:
Рекомендуемые VDS-провайдеры
Отказоустойчивые сервера с быстрыми NVMe и каналом до 1 Гбит/с
Selectel Cloud VPS
Tier III дата-центры в Москве и Санкт-Петербурге, чистые диапазоны IP-адресов без спам-истории. Мгновенная настройка PTR-записи в панели управления, быстрый гигабитный порт и NVMe диски.
Timeweb Cloud VDS
Позволяет прописать Reverse DNS (PTR) прямо в карточке сервера за 10 секунд. Мощные процессоры AMD EPYC до 5.0 GHz, гибкая настройка фаервола и быстрая техподдержка.
Beget VPS
Простое управление DNS-зонами и PTR в интуитивной панели. Быстрое открытие почтового порта по запросу, стабильный аптайм 99.98% и круглосуточный саппорт.
5. Шаг 3: Настройка цифровой подписи OpenDKIM (RSA 2048-bit)
Технология DKIM (DomainKeys Identified Mail) добавляет в заголовок каждого отправленного письма криптографическую подпись, созданную с помощью закрытого приватного ключа сервера. Почтовый сервер получателя (Яндекс или Gmail) берет открытый публичный ключ из вашей DNS-записи и проверяет целостность сообщения. Если подпись совпадает — получатель на 100% уверен, что письмо действительно отправлено с вашего сервера и не было изменено третьими лицами.
1. Установка OpenDKIM и вспомогательных утилит:
sudo apt install -y opendkim opendkim-tools
2. Конфигурация /etc/opendkim.conf:
Откройте файл конфигурации OpenDKIM и приведите его к следующему виду:
# Режим работы: подпись (s) и верификация (v)
Mode sv
Syslog yes
SyslogSuccess yes
LogWhy yes
# Каноникализация: расслабленный режим для заголовков и тела
Canonicalization relaxed/simple
# Доверенные хосты и ключи
UserID opendkim:opendkim
UMask 002
Socket inet:8891@localhost
# Карты маршрутизации ключей
KeyTable /etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table
ExternalIgnoreList refile:/etc/opendkim/trusted.hosts
InternalHosts refile:/etc/opendkim/trusted.hosts
3. Создание таблиц и каталогов ключей:
# Создаем рабочие каталоги
sudo mkdir -p /etc/opendkim/keys/example.com
sudo chown -R opendkim:opendkim /etc/opendkim
sudo chmod go-rw /etc/opendkim/keys
# 1. Файл доверенных хостов: /etc/opendkim/trusted.hosts
sudo tee /etc/opendkim/trusted.hosts <<EOF
127.0.0.1
localhost
*.example.com
EOF
# 2. Файл сопоставления отправителей: /etc/opendkim/signing.table
sudo tee /etc/opendkim/signing.table <<EOF
*@example.com mail._domainkey.example.com
EOF
# 3. Файл путей к ключам: /etc/opendkim/key.table
sudo tee /etc/opendkim/key.table <<EOF
mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private
EOF
4. Генерация криптографической пары ключей RSA 2048 бит:
Не используйте устаревшие 1024-битные ключи — с 2024 года они помечаются почтовиками как небезопасные. Генерируем современный 2048-битный ключ с селектором mail:
cd /etc/opendkim/keys/example.com
sudo opendkim-genkey -b 2048 -d example.com -s mail
sudo chown opendkim:opendkim mail.private
sudo chmod 600 mail.private
После генерации в папке появятся два файла: закрытый ключ mail.private и открытый ключ для DNS mail.txt. Выведите содержимое mail.txt на экран:
sudo cat /etc/opendkim/keys/example.com/mail.txt
Вы увидите строку вида:
mail._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0yP..." )
5. Интеграция OpenDKIM с Postfix:
Добавьте в конец файла /etc/postfix/main.cf параметры взаимодействия через сокет Milter:
# Интеграция Milter (OpenDKIM)
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
Перезапустите обе службы:
sudo systemctl restart opendkim postfix
sudo systemctl enable opendkim
Готовые шаблоны директив смотрите в нашем интерактивном генераторе Конфигурация OpenDKIM для Postfix.
6. Шаг 4: Эталонные DNS-записи SPF и политики DMARC
Теперь переходим в панель управления DNS вашего домена (Cloudflare, Beget, Timeweb, Selectel или Reg.ru) и добавляем три обязательные TXT-записи:
1. Запись DKIM (Публичный ключ):
Создайте запись типа TXT:
- Имя записи (Host):
mail._domainkey(илиmail._domainkey.example.com.) - Значение: скопируйте всю строку
v=DKIM1; k=rsa; p=ВАШ_ДЛИННЫЙ_КЛЮЧиз файлаmail.txt(убрав кавычки и переносы строк).
2. Запись SPF (Авторизованные отправители):
Запись SPF сообщает миру, каким серверам разрешено отправлять почту от имени вашего домена. Создайте запись TXT для корня домена (@):
v=spf1 ip4:198.51.100.4 ~all
Если на домене также подключена корпоративная почта от Яндекс 360 или VK WorkMail, объедините директивы в одну запись:
v=spf1 ip4:198.51.100.4 include:_spf.yandex.net ~all
v=spf1 ..., валидатор вернет ошибку PermError: Multiple SPF records, и письма немедленно отправятся в спам. Воспользуйтесь нашим Генератором SPF TXT-записей для сборки безошибочной строки.3. Политика DMARC:
Политика DMARC (Domain-based Message Authentication, Reporting, and Conformance) указывает почтовым системам, как поступать с письмами, не прошедшими проверку SPF или DKIM. Создайте запись типа TXT:
- Имя записи (Host):
_dmarc(или_dmarc.example.com.) - Значение (Рекомендуемый стандарт 2026 года):
v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com; pct=100; sp=quarantine; aspf=r; adkim=r
Параметр p=quarantine указывает почтовикам складывать подозрительные поддельные письма в спам, а на адрес rua=mailto:... ежедневно будут приходить XML-отчеты от Mail.ru и Google о статусе доставок. Сконфигурировать политику под ваш проект поможет наш Конструктор политики DMARC.
Проверьте публикацию всех созданных записей в глобальной сети через наш инструмент DNS Lookup и Резолвер SysKit.
7. Шаг 5: Заголовки писем (List-Unsubscribe, Precedence)
Даже при идеальной криптографической настройке DNS роботы спам-фильтров анализируют заголовки и тело самого сообщения. Отправка писем через стандартную функцию PHP mail('user@example.com', 'Subject', 'Message') без заголовков часто приводит к санкциям.
Обязательные технические заголовки для писем с сайта:
<?php
$to = 'client@mail.ru';
$subject = '=?UTF-8?B?' . base64_encode('Подтверждение заказа #1042') . '?=';
$message = '<html><body><p>Спасибо за покупку!</p></body></html>';
$headers = [
'MIME-Version: 1.0',
'Content-type: text/html; charset=utf-8',
'From: =?UTF-8?B?' . base64_encode('Магазин SysKit') . '?= <noreply@example.com>',
'Reply-To: support@example.com',
'X-Mailer: PHP/' . phpversion(),
// Служебные заголовки почтовой гигиены:
'Precedence: bulk',
'List-Unsubscribe: <https://example.com/unsubscribe?token=abc123xyz>',
'List-Unsubscribe-Post: List-Unsubscribe=One-Click'
];
// Параметр -f передает точный Envelope-From адрес демону Postfix:
mail($to, $subject, $message, implode("\r\n", $headers), '-f noreply@example.com');
?>
Почему это важно: Заголовок List-Unsubscribe с поддержкой One-Click является обязательным требованием почтовых сервисов. В интерфейсах Mail.ru и Gmail рядом с именем отправителя появляется аккуратная кнопка «Отписаться». Если пользователю надоест ваша рассылка, он нажмет «Отписаться», вместо того чтобы нажимать «Это спам!». Каждый клик по кнопке «Это спам» обрушивает общую репутацию вашего IP-адреса.
8. Шаг 6: Тестирование доставляемости (Mail-Tester 10/10)
Когда настройка завершена, наступает этап объективного аудита. Лучший инструмент для комплексной проверки — сервис Mail-Tester.com.
Порядок тестирования:
- Откройте сайт mail-tester.com. Сервис сгенерирует для вас уникальный временный адрес вида
test-xyz123@srv1.mail-tester.com. - Отправьте на этот адрес тестовое письмо с вашего сервера из командной строки Linux:
echo "Тестовое сообщение для проверки подписи DKIM и SPF с сервера VDS" | mail -s "Тест доставляемости" -a "From: noreply@example.com" test-xyz123@srv1.mail-tester.com - Подождите 10 секунд и нажмите кнопку «Проверить оценку» на сайте Mail-Tester.
Разбор идеального отчета (10/10):
- ✅ SPF: pass — IP-адрес сервера авторизован в TXT-записи домена.
- ✅ DKIM: pass — Цифровая подпись 2048 бит валидна и соответствует селектору
mail. - ✅ DMARC: pass — Политика успешно сопоставила заголовок From с подписью DKIM и SPF.
- ✅ Reverse DNS (PTR): pass — IP резолвится в
mail.example.com, а поддомен резолвится обратно в IP. - ✅ SpamAssassin: 0 штрафных баллов — В теле письма и заголовках нет признаков фишинга.
- ✅ Блэклисты: 0 — IP-адрес отсутствует во всех спам-базах (сверьте данные с нашим чекером DNSBL).
Также отправьте реальное письмо на тестовый ящик @yandex.ru и @mail.ru. Откройте входящее письмо, нажмите «Свойства письма» (или «Исходный код») и убедитесь в наличии заветных строк:
Authentication-Results: mx.yandex.ru;
dkim=pass header.i=@example.com;
spf=pass (mx.yandex.ru: domain of example.com designates 198.51.100.4 as permitted sender);
dmarc=pass action=none header.from=example.com;
9. Чек-лист сисадмина и типичные фатальные ошибки
✅ Чек-лист идеальной доставляемости:
- Исходящий TCP-порт 25 открыт хостинг-провайдером.
- Задано FQDN имя сервера
mail.domain.comи прописана запись PTR. - Postfix настроен в режиме Send-Only (
inet_interfaces = loopback-only). - Ключ OpenDKIM 2048 бит сгенерирован и связан через Milter.
- В DNS создана валидная запись
mail._domainkey. - Опубликована строгая SPF-запись без синтаксических ошибок.
- Настроена политика DMARC с адресом для входящих отчетов
rua=.... - Письма содержат обязательные заголовки
From,PrecedenceиList-Unsubscribe. - Оценка на Mail-Tester составляет 10 из 10 баллов.
⚠️ Ошибки, гарантированно ведущие в спам:
- Отправка от чужого домена: Отправка писем с
From: admin@gmail.comсо своего VDS моментально блокируется жесткой политикой DMARC Google (p=reject). Всегда используйте свой домен (например,noreply@yourdomain.com). - Случайный Open Relay: Если оставить
inet_interfaces = allбез авторизации, спам-боты быстро найдут открытый 25 порт и за пару часов разошлют через ваш сервер миллион писем, навсегда уничтожив репутацию IP. - Несоответствие Envelope-From и Header From: Если в теле письма указан
From: noreply@example.com, а MTA отправляет его какwww-data@mail.example.com, почтовики расценивают это как маскировку. Используйте флаг-f noreply@example.com. - Отсутствие A-записи для поддомена mail: Имя, указанное в PTR (
mail.example.com), обязано резолвиться обратно в этот же IP-адрес. Прямая и обратная зоны должны строго совпадать.
10. Резюме и вердикт
Обеспечение 100% доставляемости писем во «Входящие» — это строго детерминированная техническая процедура. В 2026 году почтовые сервисы больше не прощают небрежности: отсутствие PTR, кривые SPF или отсутствие DKIM-подписи автоматически отправляют транзакционную почту в спам.
Связка из легковесного Postfix Send-Only, надежной 2048-битной подписи OpenDKIM, корректных DNS-записей SPF/DMARC и чистого KVM-сервера с выделенным белым IP решает проблему спама раз и навсегда. Проверить состояние сетевых портов сервера можно через наш Сканер портов, валидировать DNS-записи — через DNS Lookup, а убедиться в отсутствии адреса в черных списках — через инструмент Проверка IP в спам-базах DNSBL.
Нужен надежный сервер с чистым IP под почту и сайты?
Разверните производительный облачный KVM VDS с легким управлением PTR-записью, защитой от атак и быстрым портом 1 Гбит/с на Selectel всего от 200 ₽ в месяц.