Я обычно использую в этой роли Postfix, потому что хорошо его знаю, плюс он позволяет в случае необходимости делать расширенные настройки, которые иногда нужны. Например, заменять заголовки, использовать разные сервера для отправки, блокировать отправку по разным направлениям, разрешая только одно и т.д.
Если Postfix не установлен, то надо поставить:
# apt install postfixСохраняем на всякий случай стандартную конфигурацию и заменяем своей:
# cp main.cf main.cf.origСодержимое
main.cf:relayhost = mail.zeroxzed.ru:465smtp_sasl_auth_enable = yessmtp_sasl_security_options =smtp_tls_CAfile = /etc/ssl/certs/Entrust_Root_Certification_Authority.pemsmtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cachesmtp_tls_session_cache_timeout = 3600ssmtp_tls_wrappermode = yessmtp_tls_security_level = encryptsmtp_sasl_password_maps = hash:/etc/postfix/sasl_passwdsmtp_generic_maps = hash:/etc/postfix/genericЗдесь достаточно поменять адрес сервера и порт
mail.zeroxzed.ru:465 на свои. Создаём файл sasl_passwd, где будут храниться данные для аутентификации. Формат такой:mail.zeroxzed.ru servers@zeroxzed.ru:password123◽️mail.zeroxzed.ru - имя почтового сервера, такое же как в параметре relayhost
◽️servers@zeroxzed.ru:password123 - почтовый ящик и пароль от него
Файл generic имеет следующий формат:
root servers@zeroxzed.ruЗдесь мы указываем, что в письмах отправителя root меняем на servers@zeroxzed.ru. Это нужно для того, чтобы не было проблем с доставкой. Если у вас имя сервера имеет вид srv.local, то без этой замены отправитель будет root@srv.local. С таким отправителем вашу почту большинство серверов не примут, ответив что-то в духе: "Sender address rejected: Domain not found". А почтовая служба Яндекса в обязательном порядке требует, чтобы имя пользователя для аутентификации совпадало с адресом отправителя, иначе письмо не будет отправлено.
Вы можете для каждого сервера делать отдельный почтовый ящик, либо использовать один и тот же. Я обычно использую один и тот же, чтобы не плодить лишние сущности. Но с разными ящиками более гибкие настройки могут быть. Я различаю сервера по имени сервера в теме письма, а отправитель везде один.
Формируем на основе текстовых файлов локальные базы данных, с которыми будет работать Postfix, и перезапускаем его:
# postmap /etc/postfix/generic /etc/postfix/sasl_passwd# systemctl restart postfixПроверяем отправку:
# echo "Test body message." | mail -s "$(hostname)" zeroxzed@gmail.comПисьмо нормально улетело в Gmail. В теме письма - имя сервера, в отправителе - root <servers@zeroxzed.ru>.
Теперь сделаем так, чтобы локальная почта, адресованная пользователю root, отправлялась куда-то на внешний ящик. Для этого добавляем в
/etc/aliases:root: root@zeroxzed.ruИ обновляем базу алиасов:
newaliasesПроверяем:
# echo "Test body message." | mail -s "$(hostname)" rootВ ящик root@zeroxzed.ru должно прийти письмо от root <servers@zeroxzed.ru>.
Теперь все системные уведомления для root будут отправляться в этот ящик. Проверим на каком-нибудь задании crontab с ошибкой. Для этого создадим такое ошибочное задание на выполнение несуществующей команды:
# crontab -eДобавляем задачу:
* * * * * /usr/bin/command-not-foundСохраняем и ждём минуту. Получаем на почту ошибку выполнения задания cron. Тема письма будет примерно такая: "Cron <root@srv-web01> /usr/bin/command-not-found". По имени сервера srv-web01 можно сделать правило фильтрации.
С такими настройками, к примеру, кроны с rsync и ключами
-v или --progress шлют вывод rsync на почту. Удобно бегло посмотреть, что там куда копируется, или увидеть ошибки, если есть.❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX
#linux
