Налаштування 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 рекомендується вивчити офіційну документацію.







