Настройка Postfix MTA для отправки оповещений через сторонний почтовый ящик

Оцените статью

Рассмотрим стандартную ситуацию настройки Postfix MTA для отправки почты из приложений и скриптов которые не поддерживают авторизацию на удаленном сервере и мы должны использовать стандартную команду mail.

Проверяем отправку электронной почты с использованием авторизации на удаленном сервере

$ echo "Test" | swaks --to chernousov@interlan.xyz --from events@domain.ru --server smtp.timeweb.ru:465 --tls-on-connect --auth PLAIN --auth-user events@domain.ru --auth-password xxxxPassworDxxxx

Небольшая шпаргалка по использованию утилиты Swaks

Swaks — мощный инструмент командной строки для тестирования и отладки SMTP‑серверов. Позволяет детально контролировать отправку писем, включая заголовки, вложения и аутентификацию.

Базовая установка

  • Linux (Debian/Ubuntu):
    sudo apt install swaks
  • Linux (RHEL/CentOS/Fedora):
    sudo dnf install swaks # или sudo yum install swaks
  • macOS (через Homebrew):
    brew install swaks
  • Из исходников (Perl):
    Требуется Perl и модуль IO::Socket::SSL (для TLS).

Синтаксис и основные опции

Общий вид команды:

swaks [опции] --to <получатель> --from <отправитель>

Ключевые опции:

  • --to <email> — адрес получателя.
  • --from <email> — адрес отправителя.
  • --server <host> — SMTP‑сервер (по умолчанию: localhost:25).
  • --port <num> — порт SMTP (25, 465, 587 и др.).
  • --auth — включить аутентификацию.
  • --auth-user <user> — логин для SMTP‑аутентификации.
  • --auth-password <pass> — пароль для SMTP‑аутентификации.
  • --tls — включить TLS/SSL (STARTTLS).
  • --ssl — использовать SSL (порт 465).
  • --header "Name: Value" — добавить пользовательский заголовок.
  • --body <текст> — тело письма.
  • --attach <файл> — прикрепить файл.
  • --suppress-data — не отправлять тело письма (только заголовки).
  • --quit — завершить сеанс после отправки.
  • --verbose — подробный вывод (отладка).
  • --dump-headers — показать полученные SMTP‑заголовки.

Примеры использования

  1. Простая отправка письма
    swaks --to user@example.com --from me@example.com --server mail.example.com
  2. С TLS и аутентификацией
    swaks --to user@example.com --from me@example.com \ --server mail.example.com --port 587 \ --tls --auth --auth-user myuser --auth-password mypass
  3. С SSL (порт 465)
    swaks --to user@example.com --from me@example.com \ --server mail.example.com --port 465 --ssl \ --auth --auth-user myuser --auth-password mypass
  4. С пользовательскими заголовками
    swaks --to user@example.com --from me@example.com \ --header "X-Custom-Header: Test" \ --header "Subject: Test Email"
  5. С телом письма
    swaks --to user@example.com --from me@example.com \ --body "Это тестовое письмо."
  6. С вложением
    swaks --to user@example.com --from me@example.com \ --attach /path/to/file.txt
  7. Подробный вывод (отладка)
    swaks --to user@example.com --from me@example.com --verbose

Настройка Postfix MTA для отправки сообщений через внешний адрес

Минимальный файл /etc/postfix/main.cf подходящий для наших нужд:

relayhost = [smtp.timeweb.ru]:465

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_wrappermode = yes
smtp_use_tls = yes

smtp_generic_maps = hash:/etc/postfix/generic

myhostname = domain.domain.ru
mydomain = domain.ru
myorigin = $mydomain
inet_interfaces = loopback-only
mydestination = localhost.$mydomain, localhost

compatibility_level = 3.9
inet_protocols = all
mynetworks_style = host
mynetworks = 127.0.0.0/8
mailbox_size_limit = 51200000
mailbox_command =
alias_maps = $alias_database, nis:mail.aliases
alias_database = hash:/etc/aliases
biff = no
recipient_delimiter =
cyrus_sasl_config_path = /etc/postfix/sasl

Файл /etc/postfix/generic:

root     events@marop.ru

Файл /etc/postfix/sasl_passwd:

[smtp.timeweb.ru]:465    events@domain.ru:Ev2cODzn6ZcXWl4M

Файлы с hash данными должны быть преобразованы в db формат:

 # chmod 600 /etc/postfix/sasl_passwd
 # postmap /etc/postfix/sasl_passwd

Проверка работы:

Отправьте тестовое письмо:

echo "Test email body" | mail -s "Test Subject" recipient@example.com

Проверьте логи:

sudo tail -f /var/log/mail.log

Отправьте тестовое письмо:

echo "Test email body" | mail -s "Test Subject" recipient@example.com

Проверьте логи:

sudo tail -f /var/log/mail.log

 Примеры для популярных сервисов

Gmail:

relayhost = [smtp.gmail.com]:587
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

В sasl_passwd:

[smtp.gmail.com]:587    your-gmail@gmail.com:your-app-password

Yandex:

relayhost = [smtp.yandex.ru]:587

В sasl_passwd:

[smtp.yandex.ru]:587    your-login@yandex.ru:your-password

Mail.ru:

relayhost = [smtp.mail.ru]:587

В sasl_passwd:

[smtp.mail.ru]:587    your-login@mail.ru:your-password

Краткое описание параметров получившегося конфигурационного файла

Краткое описание параметров конфигурационного файла Postfix

  1. relayhost = [smtp.timeweb.ru]:465
    Указывает SMTP‑сервер (smtp.timeweb.ru), через который Postfix будет пересылать исходящую почту. Порт 465 обычно используется для SMTP с SSL/TLS (SMTPS).
  2. smtp_sasl_auth_enable = yes
    Включает аутентификацию по протоколу SASL (Simple Authentication and Security Layer) при отправке почты через relay‑хост.
  3. smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
    Задаёт путь к файлу (/etc/postfix/sasl_passwd), где хранятся учётные данные (логин/пароль) для аутентификации на relay‑хосте. Формат hash: означает, что файл должен быть преобразован в хеш‑таблицу командой postmap.
  4. smtp_sasl_security_options = noanonymous
    Запрещает анонимную аутентификацию через SASL — требуются явные учётные данные.
  5. smtp_tls_security_level = encrypt
    Обязательное использование шифрования (TLS) для всех SMTP‑соединений. Без TLS отправка почты будет заблокирована.
  6. smtp_tls_wrappermode = yes
    Включает «обёрточный» режим TLS (SMTPS), когда шифрование устанавливается сразу при подключении (на порту 465), а не через команду STARTTLS.
  7. smtp_use_tls = yes
    Разрешает использование TLS для SMTP‑соединений (актуально для портов с STARTTLS, например, 587).
  8. smtp_generic_maps = hash:/etc/postfix/generic
    Указывает на файл (/etc/postfix/generic), где заданы правила перезаписи адресов отправителя (например, замена локальных адресов на публичные). Формат hash: требует предварительной обработки через postmap.
  9. myhostname = domain.domain.ru
    Имя хоста сервера Postfix, которое будет использоваться в SMTP‑диалогах (например, в команде HELO/EHLO).
  10. mydomain = domain.ru
    Доменное имя, связанное с сервером. Используется в автоматических подстановках (например, в myorigin).
  11. myorigin = $mydomain
    Домен, который добавляется к локальным адресам отправителя (например, useruser@domain.ru).
  12. inet_interfaces = loopback-only
    Postfix будет слушать SMTP‑соединения только на loopback‑интерфейсе (127.0.0.1), исключая внешние интерфейсы.
  13. mydestination = localhost.$mydomain, localhost
    Список доменов, для которых Postfix считает себя конечным пунктом доставки почты. Письма на эти домены будут приниматься локально.
  14. compatibility_level = 3.9
    Указывает уровень совместимости с определённой версией Postfix (в данном случае 3.9). Влияет на поведение некоторых параметров.
  15. inet_protocols = all
    Postfix будет использовать как IPv4, так и IPv6 для сетевых соединений.
  16. mynetworks_style = host
    Определяет, какие сети считаются «доверенными» (например, для ретрансляции почты). Значение host означает только локальный хост (127.0.0.1).
  17. mynetworks = 127.0.0.0/8
    Явный список доверенных сетей (в данном случае — только локальные адреса 127.x.x.x).
  18. mailbox_size_limit = 51200000
    Максимальный размер почтового ящика в байтах (51.2 МБ). Превышение лимита блокирует доставку писем.
  19. mailbox_command =
    Команда для доставки почты в почтовый ящик. Пустое значение означает использование встроенной доставки Postfix.
  20. alias_maps = $alias_database, nis:mail.aliases
    Источники для разрешения алиасов (псевдонимов почтовых адресов). Включает локальную базу ($alias_database) и NIS‑сервис (nis:mail.aliases).
  21. alias_database = hash:/etc/aliases
    Путь к файлу алиасов (/etc/aliases), который должен быть преобразован в хеш‑таблицу через postmap.
  22. biff = no
    Отключает уведомление пользователей о новой почте через протокол Biff (устаревшая функция).
  23. recipient_delimiter =
    Символ‑разделитель для расширенных адресов (например, user+tag@domain.ru). Пустое значение отключает эту функцию.
  24. cyrus_sasl_config_path = /etc/postfix/sasl
    Указывает путь к конфигурации SASL (/etc/postfix/sasl), если используется библиотека Cyrus SASL.

Тестирование настроек DKIM/DMAP/SPF

Для тестирования параметров можно использовать сервис https://www.mail-tester.com

https://www.mail-tester.com

Похожие записи

Настройка взаимодействия RED ADM и Windows Active Directory

Сегодня проведем несколько экспериментов по настройке взаимодействия RED ADM и Windows Active Directory. Есть несколько способов настройки доверия для упрощения миграции с решений Microsoft на Российское ПО и сегодня их…

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Так как на севере делать абсолютно нечего, то я продолжаю заниматься саморазвитием 🙂 На этой неделе вспоминаю и углубляю свои знания в Docker. Лучший способ запомнить тему, это вести конспект…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Настройка взаимодействия RED ADM и Windows Active Directory

Настройка взаимодействия RED ADM и Windows Active Directory

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Подробная инструкция по написанию YAML‑файлов для Docker Compose

Установка основного контроллера домена на базе REDADM

Установка основного контроллера домена на базе REDADM

zVirt работа с шаблонами виртуальных машин

zVirt работа с шаблонами виртуальных машин

Подробная инструкция по работе с томами (volumes) в Docker

Подробная инструкция по работе с томами (volumes) в Docker

Сетевые возможности Docker

Сетевые возможности Docker