Хочу поделиться парочкой полезных советов по настройке почтового сервера. Я расскажу, как автоматически изменять тему всех отправляемых сообщений через postfix, а так же подменять адрес отправителя. На днях в комментариях к одной статье про отправку почты, читатель показал простое и интересное решение, которое я решил проверить, дополнить и оформить в виде отдельной статьи.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Содержание:
Цели статьи
- Настроить автоматическое изменение темы сообщений, отправляемых через 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, то у меня есть очень подробная статья на эту тему.
Буду рад полезным замечаниям и дополнениям. Ваши комментарии иногда делают меня умнее :)
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Я пытаюсь отправить от почты 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:ПАРОЛЬ
По логу что-то с адресом отправителя не так.
Не знаю, чем подсказать. Настройка относительно проста и вся описана в заметке. Я так делал, у меня работало. Раз яндекс ошибку выдаёт, значит подмена отправителя по какой-то причине не происходит.
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 не трогать.
Спасибо за подсказку, на майл.ру проверил - работает