Настройка 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

Related Posts

Работа с файлами дисков виртуальных машин qcow2 (копирование, сжатие, конвертация и т.п.)

Так-как файлы виртуальных машин формата qcow2 это не совсем обычные файлы, а так называемые sparced-файлы (разряженные), то и подход при работе с ними несколько отличается. Если вы создали виртуальную машину…

План создания удостоверяющего центра (УЦ) PKI на базе Red OS

Так как в планах проекта числится развертывание удостоверяющего центра (УЦ) PKI на базе Red OS, то я заранее решил набросать план действий как будем это разорачивать и какие инструменты использовать.…

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

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

You Missed

Работа с файлами дисков виртуальных машин qcow2 (копирование, сжатие, конвертация и т.п.)

Работа с файлами дисков виртуальных машин qcow2 (копирование, сжатие, конвертация и т.п.)

План создания удостоверяющего центра (УЦ) PKI на базе Red OS

План создания удостоверяющего центра (УЦ) PKI на базе Red OS

Терминальный сервер в Linux на базе xrdp

Терминальный сервер в Linux на базе xrdp

Использование pg_probackup для резервного копирования баз данных Postgresql (локально)

Использование pg_probackup для резервного копирования баз данных Postgresql (локально)

Ввод рабочей станции РЕД ОС в IPA-домен

Ввод рабочей станции РЕД ОС в IPA-домен

WEB-интерфейс для удаленного администрирования Centos/РЕД ОС

WEB-интерфейс для удаленного администрирования Centos/РЕД ОС