Как изменить тему письма и адрес отправителя через postfix

Хочу поделиться парочкой полезных советов по настройке почтового сервера. Я расскажу, как автоматически изменять тему всех отправляемых сообщений через postfix, а так же подменять адрес отправителя. На днях в комментариях к одной статье про отправку почты, читатель показал простое и интересное решение, которое я решил проверить, дополнить и оформить в виде отдельной статьи.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Цели статьи

  1. Настроить автоматическое изменение темы сообщений, отправляемых через postfix. На конкретном примере я покажу, как ко всем сообщениям добавлять в тему имя сервера.
  2. Настроить автоматическую замену адреса отправителя. В моем примере я буду заменять локальный адрес отправителя root на адрес пользователя для отправки почты через внешний сервер яндекса - smtp.yandex.ru.

Введение

Данная статья будет написана по мотивам другого материала - отправка почты через консоль с авторизацией. В целом, там представлено законченное решение, но в некоторых случаях требуется дополнительная настройка.

В комментариях читатель захотел использовать один и тот же почтовый ящик для отправки оповещений с нескольких серверов. Для удобной сортировки в ящике получателя нужно было как-то разделить письма по серверам. Когда отправитель один, других надежных признаков для сортировки не найти.

Я сходу предложил решение по автоматическому изменению темы сообщения через postfix, так как предполагал, что он это умеет и не ошибся. Читатель вернулся и подсказал, как это легко и быстро настроить. Я проверил решение, оно реально рабочее, поэтому решил оформить в виде отдельной статьи. Думаю, это будет полезно остальным.

Замена адреса отправителя может быть полезна в разных ситуациях. Я ее буду использовать конкретно для решения проблемы с отправкой писем через почтовые сервера Яндекса. Для успешной отправки письма, Яндекс требует, чтобы адрес отправителя в письме совпадал с адресом для авторизации на сервере. Если это не будет сделано, то вы получите ошибку во время отправки - Sender address rejected: not owned by auth user.

May  8 15:13:14 prox-centos7 postfix/smtp[6297]: D84A51807123: to=<zeroxzed@gmail.com>, relay=smtp.yandex.ru[93.158.134.38]:587, delay=0.17, delays=0.02/0.01/0.13/0.01, dsn=5.7.1, status=bounced (host smtp.yandex.ru[93.158.134.38] said: 553 5.7.1 Sender address rejected: not owned by auth user. (in reply to MAIL FROM command))

Происходит это потому, что отправка системных сообщений идет от локального пользователя root. Имя отправителя в письме будет примерно такое - root@prox-centos7.loc. В данном случае prox-centos7.loc это локальное имя сервера. Я его заменю на учетную запись яндекса.

Замена адреса отправителя в postfix

Начнем с подмены отправителя, чтобы можно было сразу тестировать отправку. Для этого добавляем в конфиг postfix /etc/postfix/main.cf следующий параметр.

smtp_generic_maps = hash:/etc/postfix/generic

Там же у меня есть такие параметры:

myhostname = prox-centos7
mydomain = prox-centos7.loc
mydestination = $myhostname

Файл generic у вас уже должен быть. Если нет, то создайте его. Далее добавляем в него одну строку.

root@prox-centos7.loc root@serveradmin.ru
root@prox-centos7.loc Локальный пользователь сервера.
root@serveradmin.ru Пользователь сервера yandex. В данном случае домен serveradmin.ru привязан к почте яндекса.

Перезапускаем postfix и проверяем отправку.

Автоматическая замена отправителя в postfix

В логе отправитель локальный, но тем не менее, яндекс успешно отправил письмо, ошибки не было.

Автоматическая замена темы писем в postfix

Переходим к замене темы письма. Для этого добавляем в конфиг postfix /etc/postfix/main.cf следующий параметр.

header_checks = pcre:/etc/postfix/rewrite_subject

Создаем файл rewrite_subject следующего содержания:

/^Subject: (.*)$/ REPLACE Subject: (prox-centos7) $1

Это регулярное выражение, которое меняет заголовок письма, начинающийся с Subject. Оно добавляет в начало темы имя сервера в скобках - (prox-centos7). Вы можете добавлять что-то свое. Для тех, кто вообще не разбирается в регулярках, поясню, что в данном случае $1 это исходное содержание темы.

Перезапускаем postfix и проверяем, отправив через консоль письмо.

# df -h | mail -s "Disk usage" zeroxzed@gmail.com

Автоматическая замена темы сообщения

Проверяем ящик и видим там письмо.

Измененная тема через postfix

Теперь вы можете настраивать отправку системных писем с разных серверов, используя один и тот же ящик, просто автоматически меняя тему всех почтовых сообщений сервера.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Я рекомендую собирать системные сообщения с разных серверов тем или иным способом. Там часто бывает критически важная информация, которая не будет лишней, даже если у вас хорошо настроена система мониторинга, например zabbix.

Если вас интересует настройка полноценного почтового сервера postfix, то у меня есть очень подробная статья на эту тему.

Буду рад полезным замечаниям и дополнениям. Ваши комментарии иногда делают меня умнее :)

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

16 комментариев

  1. Владимир

    Я пытаюсь отправить от почты yandex на mail.ru:

    df -h | mail -s "Disk usage" vovanez92@mail.ru

    Я уже столько всего пережил с попыткой настроить эту почту. Не получается. Часиков 5 бьюсь. Пишет:

    [root@webserver ~]# tail -n 10 /var/log/maillog
    Apr 2 17:31:25 webserver postfix/pickup[1569]: F3631A067: uid=0 from=
    Apr 2 17:31:25 webserver postfix/cleanup[1575]: F3631A067: message-id=
    Apr 2 17:31:26 webserver postfix/qmgr[1570]: F3631A067: from=, size=942, nrcpt=1 (queue active)
    Apr 2 17:31:27 webserver postfix/smtp[1572]: F3631A067: to=, relay=smtp.yandex.ru[77.88.21.158]:25, delay=1.6, delays=0.11/0/1.3/0.11, dsn=5.7.1, status=bounced (host smtp.yandex.ru[77.88.21.158] said: 553 5.7.1 Sender address rejected: not owned by auth user. 1680420687-QVGFkuWDf0U0-BZ8ljBdq (in reply to MAIL FROM command))
    Apr 2 17:31:27 webserver postfix/cleanup[1575]: BD23CA069: message-id=
    Apr 2 17:31:27 webserver postfix/qmgr[1570]: BD23CA069: from=, size=2862, nrcpt=1 (queue active)
    Apr 2 17:31:27 webserver postfix/bounce[1574]: F3631A067: sender non-delivery notification: BD23CA069
    Apr 2 17:31:27 webserver postfix/qmgr[1570]: F3631A067: removed
    Apr 2 17:31:29 webserver postfix/smtp[1576]: BD23CA069: to=, relay=smtp.yandex.ru[77.88.21.158]:25, delay=1.4, delays=0.07/0/1.3/0.11, dsn=5.7.1, status=bounced (host smtp.yandex.ru[77.88.21.158] said: 553 5.7.1 Sender address rejected: not owned by auth user. 1680420689-SVGZTJXDXGk0-xt6sOrHs (in reply to MAIL FROM command))
    Apr 2 17:31:29 webserver postfix/qmgr[1570]: BD23CA069: removed
    [root@webserver ~]#

    Я и команду "postmap /etc/postfix/generic" выполнил.

    И 25 порт применил вместо 465 в конфигах (на сайте каком-то написали что posfix не работает c SSL.
    И ipv6 отключил.

    И в main.cf писал:
    вместо "inet_protocols = all" писал "inet_protocols = ipv4"
    вместо "inet_interfaces = localhost" писал "inet_interfaces = 127.0.0.1"
    и добавлял "smtp_tls_wrappermode = yes"

    В mcedit /etc/sysconfig/network-scripts/ifcfg-eth0 я закомментировал все IPV6 параметры.

    В /etc/hosts закомментировал строку "::1 localhost localhost.localdomain localhost6 localhost6.localdomain6"

    Смотрю конфиг nano /etc/postfix/generic, у меня в конце "root@webserver root@service-control-2022@yandex.ru" - и что-то мне в нём не нравится, но не могу понять что не так.

    И пароль для приложений в yandex я включил на всякий случай, прописал его в nano /etc/postfix/sasl_passwd:
    smtp.yandex.ru:25 service-control-2022@yandex.ru:ПАРОЛЬ

    По логу что-то с адресом отправителя не так.

    • Не знаю, чем подсказать. Настройка относительно проста и вся описана в заметке. Я так делал, у меня работало. Раз яндекс ошибку выдаёт, значит подмена отправителя по какой-то причине не происходит.

  2. smtp_generic_maps - только для подмены адресов ЛОКАЛЬНЫХ отправителей
    Для остального и по ситуации - это canonical_maps, sender_canonical_maps, recipient_canonical_maps

  3. Добрый вечер!
    После настройки и при проверке отправки письма вылетает такая ошибка ? Что не так сделал ?
    send-mail: fatal: /etc/postfix/main.cf, line 43: missing '=' after attribute name: root@cnt6 igoronik@yandex.ru

  4. Никита

    Спасибо за статью Владимир. Единственное дополнение. После изменения в файле /etc/postfix/generic необходимо выполнить команду
    postmap /etc/postfix/generic , иначе будут ошибка и предупреждение:
    error: open database /etc/postfix/generic.db
    warning: hash:/etc/postfix/generic is unavailable. open database /etc/postfix/generic.db: No such file or directory

  5. Сергей

    В CentOS 8 директива header_checks = pcre:/etc/postfix/rewrite_subject
    не работает.
    Теперь она выглядит так:
    header_checks = regexp:/etc/postfix/rewrite_subject

  6. Сергей

    А как изменить отправителя? Сейчас все время отправка от root.

  7. Полезно, спасибо!

    А для тех случаев, когда нет возможности настроить сервер, можно использовать lifehack с Gmail-ом: добавлять +something к local part. Например: писмьа для user+server1@gmail.com и user+server2@gmail.com будут доставлены пользователю user@gmail.com, который их сможет сортировать по полю To. Особенно полезно для отслеживания сервисов, которые сливают вашу инфу. Типа user+facebook@gmail.com, user+twitter@gmail.com ... Если видим спам приходящий на user+facebook@gmail.com, то очевидно, что это через facebook. Можно блокировать, итд.

    Говорят, что это работает и с некоторыми другими почтовыми сервисами. Кстати, вот и мысль для следующей статьи - как настроить почтовик (postfix/exim), чтоб у вас точно также работало на входящую почту. :)

    • Прикольная штука. Я не знал про этот функционал, спасибо. Для сбора тех же логов с разных серверов подойдет. Можно вообще postfix не трогать.

    • Дмитрий

      Спасибо за подсказку, на майл.ру проверил - работает

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

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

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar