Хочу поделиться парочкой полезных советов по настройке почтового сервера. Я расскажу, как автоматически изменять тему всех отправляемых сообщений через postfix, а так же подменять адрес отправителя. На днях в комментариях к одной статье про отправку почты, читатель показал простое и интересное решение, которое я решил проверить, дополнить и оформить в виде отдельной статьи.
Содержание:
Цели статьи
- Настроить автоматическое изменение темы сообщений, отправляемых через postfix. На конкретном примере я покажу, как ко всем сообщениям добавлять в тему имя сервера.
- Настроить автоматическую замену адреса отправителя. В моем примере я буду заменять локальный адрес отправителя 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 /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
Проверяем ящик и видим там письмо.
Теперь вы можете настраивать отправку системных писем с разных серверов, используя один и тот же ящик, просто автоматически меняя тему всех почтовых сообщений сервера.
Заключение
Я рекомендую собирать системные сообщения с разных серверов тем или иным способом. Там часто бывает критически важная информация, которая не будет лишней, даже если у вас хорошо настроена система мониторинга, например zabbix.
Если вас интересует настройка полноценного почтового сервера postfix, то у меня есть очень подробная статья на эту тему.
Буду рад полезным замечаниям и дополнениям. Ваши комментарии иногда делают меня умнее :)
smtp_generic_maps - только для подмены адресов ЛОКАЛЬНЫХ отправителей
Для остального и по ситуации - это canonical_maps, sender_canonical_maps, recipient_canonical_maps
Добрый вечер!
После настройки и при проверке отправки письма вылетает такая ошибка ? Что не так сделал ?
send-mail: fatal: /etc/postfix/main.cf, line 43: missing '=' after attribute name: root@cnt6 igoronik@yandex.ru
Спасибо за статью Владимир. Единственное дополнение. После изменения в файле /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
Автор, внеси пожалуйста эту необходимую информацию в статью!
В CentOS 8 директива header_checks = pcre:/etc/postfix/rewrite_subject
не работает.
Теперь она выглядит так:
header_checks = regexp:/etc/postfix/rewrite_subject
Спасибо
А как изменить отправителя? Сейчас все время отправка от root.
Статья же именно об этом :) Читайте внимательно.
Сделал все как написано все равно от root.
Скорее всего вопрос был, как изменить имя отправителя. Т.к. у меня тоже имя root, хотя почтовый адрес правильный.
Полезно, спасибо!
А для тех случаев, когда нет возможности настроить сервер, можно использовать 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 не трогать.
Спасибо за подсказку, на майл.ру проверил - работает