Настройка Mail Relay для отправки уведомлений с серверов

Когда сервер не может доставить уведомления — алерты теряются, инциденты остаются незамеченными. Мы настраиваем mail relay, чтобы вся почта с ваших серверов уходила через надёжный SMTP-шлюз. Наша команда реализует проект под ключ — от диагностики до внедрения и последующей поддержки.
Часто задаваемые вопросы

Настройка Mail Relay для отправки уведомлений с серверов

Типичная ситуация: cron-задача упала ночью, Zabbix зафиксировал инцидент — а уведомление ушло в никуда, потому что сервер пытается отправить письмо напрямую через порт 25, который заблокирован провайдером или хостером. Приложение получает Connection refused или 554 5.7.1 Relay access denied, письмо теряется, инцидент не замечают. Мы сталкивались с этим десятки раз — поэтому разработали проверенный процесс настройки relay, гарантирующий доставку.

Mail relay решает это в одно действие — сервер отправляет почту на доверенный SMTP-шлюз, который уже знает, как доставить письмо дальше. В этой статье — конкретная конфигурация, типовые ошибки и кейсы для разных инфраструктур.

Почему прямая отправка не работает?

Большинство хостинг-провайдеров и облачных платформ блокируют порт 25 по умолчанию — это защита от спама. Даже если порт открыт, IP-адреса серверов часто попадают в blacklist. Кроме того, почтовые серверы (Exchange, Яндекс 360) требуют аутентификации и TLS. Без relay ваши алерты будут теряться.

Postfix как локальный relay: минимальная конфигурация

Для большинства серверов достаточно настроить Postfix в режиме satellite — он не принимает входящую почту, не хранит очередь долго, просто перенаправляет всё на upstream-relay.

# /etc/postfix/main.cf
myhostname = app01.internal.example.com
mydomain = internal.example.com
myorigin = $mydomain
relayhost = [smtp.sendgrid.net]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
inet_interfaces = loopback-only
mydestination = 

Файл с кредами:

# /etc/postfix/sasl_passwd [smtp.sendgrid.net]:587 apikey:SG.xxxxxxxxxxxx 

После создания — хэшируем и перезапускаем:

postmap /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
systemctl reload postfix

Вместо SendGrid подойдёт любой SMTP: Amazon SES (email-smtp.eu-west-1.amazonaws.com:587), Mailgun, корпоративный Exchange/Office 365 или собственный Postfix на выделенном сервере.

Сравнение популярных SMTP-релеев

Провайдер Порт Аутентификация Бесплатный лимит Цена после лимита
SendGrid 587/2525 API-ключ 100 писем/день от $19.95/мес
Amazon SES 587/2587 SMTP-ключ 62 000 писем/мес $0.10 за 1000 писем
Mailgun 587/465 SMTP-логин 5 000 писем/мес $35 за 50 000 писем
Внутренний relay 25 (trusted) IP-белый список Неограничен Только затраты на сервер

Когда нужен внутренний relay, а не внешний SaaS

В изолированных инфраструктурах — банки, госсектор, периметровые сети без выхода в интернет — внешние SMTP-провайдеры недоступны. Тогда поднимаем внутренний relay-сервер: один Postfix с открытым mynetworks для доверенных подсетей и настроенным smarthost до корпоративного почтового сервера.

# relay.internal — принимает от 10.0.0.0/8, пересылает на Exchange
mynetworks = 127.0.0.0/8, 10.0.0.0/8
relayhost = [mail.corp.example.com]:25
relay_domains =
smtpd_recipient_restrictions = permit_mynetworks, reject

Такой relay не требует аутентификации от внутренних серверов — они в mynetworks. Exchange принимает от relay по IP-based connector.

Как выбрать между внешним и внутренним relay?

Мы рекомендуем внешний relay для облачных инфраструктур — это дешевле и проще в обслуживании. Внутренний relay — для сред с высокими требованиями к безопасности и изоляции. У нас есть опыт настройки обоих вариантов: более 80 проектов, включая банки и госорганы.

Тестирование и диагностика

После настройки — сразу проверка:

# Отправить тестовое письмо
echo "Test relay $(hostname)" | mail -s "relay test" [email protected]
# Следить за очередью
mailq
postqueue -f # принудительная попытка доставки
# Логи в реальном времени
journalctl -u postfix -f

Частая ошибка — SASL authentication failed при правильном пароле. Причина обычно в том, что sasl_passwd.db не обновлён после правки текстового файла (postmap не запустили повторно) или в пароле есть спецсимволы, которые нужно экранировать.

Пример: разбор ошибки SASL authentication failedПри использовании пароля с символом `%` в SendGrid необходимо экранировать его в `sasl_passwd` как `%%`. Иначе Postfix интерпретирует `%` как подстановочный знак. После экранирования — повторно выполнить `postmap`.

Что входит в услугу

Настраиваем Postfix relay на каждом сервере или один централизованный relay-хост для всей инфраструктуры. Подключаем к выбранному upstream: SendGrid, SES, Mailgun, корпоративный SMTP. Настраиваем TLS, аутентификацию, ограничение по IP. Проверяем доставку от всех источников уведомлений: cron, Zabbix/Prometheus Alertmanager, приложения.

Срок — от нескольких часов на один сервер до 1-2 дней на инфраструктуру с десятками хостов и нестандартными ограничениями сети. Получите консультацию по вашему проекту — оценим сложность и подберём оптимальное решение под ключ.

Какой relay подходит для моей инфраструктуры?

Для небольших проектов (до 10 серверов) достаточно внешнего SMTP-провайдера — это не требует выделенного сервера и экономит время на обслуживание. Для крупных распределённых систем с десятками хостов и строгими требованиями к доступности лучше поднять внутренний relay — он даёт полный контроль над очередями и логами. Мы поможем определиться с выбором и настроим решение на любой платформе.

Для глубокого понимания механизмов работы Postfix рекомендуется изучить официальную документацию.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    815
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139