В Linux системах вы будете постоянно сталкиваться с необходимостью отправки почты системных пользователей внешнему получателю. Исторически для этих целей был предназначен Sendmail – старейший MTA – агент отправки почты.
В современных системах Sendmail обычно не используется и является ссылкой на другие почтовые агенты, например, Postfix.
Но реалии сегодняшнего дня таковы, что настройка собственного SMTP-сервера на служебных серверах не имеет никакого смысла. Требования к добросовестному отправителю почты сегодня весьма велики, и ваш отправитель скорее всего попадет в спам у всех публичных и непубличных почтовых сервисов.
Можно, конечно, настроить все правильно, но это достаточно затратно и неоправданно для рабочих серверов. Поэтому более универсальным решением будет использовать внешние почтовые службы, публичные или собственные.
Для этого нам нужно будет передать системную почту специальному почтовому клиенту (MUA), который, с одной стороны, будет имитировать стандартный Sendmail, а на самом деле работать в роли почтового клиента, отправляя почту через внешние сервера.
Одним из таких приложений является SSMTP, который прозрачно заменяет sendmail и позволяет отправлять системную почту через внешний почтовый сервер.
Установим его:
apt install ssmtp mailutils
Затем откроем файл /etc/ssmtp/ssmtp.conf и приступим к редактированию параметров, благо их немного.
Сначала укажем получателя для системной почты (все пользователи с идентификаторами < 1000):
root = admin@examlpe.com
Если вы не хотите выполнять перенаправление, то оставьте эту опцию пустой.
Разрешим изменять отправителя в поле From, для этого раскомментируйте и приведите к следующему виду опцию:
FromLineOverride=YES
Если этого не сделать, то система будет отправлять письма от имени root@hostname, которые будут отклоняться почтовым сервером.
В некоторых случаях вам потребуется правильно указать в опции hostname имя хоста, желательно FQDN, но в большинстве случаев все работает с автоматически подставленным туда значением.
Это были общие параметры, а теперь настроим работу с почтовыми службами.
В общем виде настройка выглядит так:
mailhub=smtp.example.com:587
AuthUser=my_account@example.com
AuthPass=mY_pa$$word_1
UseTLS=YES
UseSTARTTLS=YES
TLS_CA_File=/etc/pki/tls/certs/ca-bundle.crt
Настройки достаточно простые и не требуют подробных пояснений. В опции mailhub указываем адрес и порт почтового сервера, ниже идут учетные данные и параметры шифрования.
Теперь создадим алиасы, чтобы системные пользователи могли отправлять почту через ssmtp. Для этого откроем /etc/ssmtp/revaliases и внесем туда следующую строку:
root:my_account@example.com:smtp.example.com:587
Это означает что пользователю root соответствует аккаунт my_account@example.com на сервере smtp.example.com:587 и отправку почты следует производить через него.
Секций mailhub в конфигурационном файле может быть несколько, и разные пользователи могут отправлять почту через разные системные записи.
Для проверки выполните:
echo "Test" | mail -s "Test" admin@example.com
После чего вы должны получить на указанную почту тестовое письмо.
В случае ошибки полезно будет выполнить отладку с получением логов обмена с почтовым сервером, для этого немного изменим команду отправки почты:
echo "Test" | ssmtp -v -s "Test" admin@example.com
Теперь весь обмен с сервером как на ладони, что позволяет быстро найти и исправить возможные ошибки настройки.
