07/09/2020
На вопрос нужно или нет отправлять почту с работающих серверов — для меня ответ всегда был положительным. Здесь конечно же идет речь не об отправке различного рода спама в Интернете, а об использовании электронных писем с различными оповещениями из IT систем на серверах. С помощью электронной почты всегда можно было доставлять нужные сообщения администраторам и программистам, уведомляя их о тех или иных событиях в работе IT систем. Да, сейчас есть ряд альтернативных способов доставки сообщений о происшествиях в программном обеспечении и оборудовании. Это, например, SMS или мессенджер Telegram. Такие способы, как правило, используются в системах мониторинга, позволяя оперативно сообщать о критических инцидентах. Однако, с моей точки зрения, использование электронной почты актуально и полезно и сегодня. Функции сортировки электронных писем позволяют эффективно анализировать тренды и выявлять проблемы в работе IT систем.
Для того, чтобы наш сервер стал способным отправлять почтовые сообщения, мы должны установить и настроить на нем MTA агент. MTA — Mail Transfer Agent (Агент передачи электронной почты). Программное обеспечение, выполняющее функцию MTA, занимается пересылкой электронных писем по протоколу SMTP. На основе него строятся серьезные почтовые сервера, которые способны обслуживать тысячи и миллионы пользователей. Нам в общем случае такой функционал избыточен. Наиболее популярные MTA в операционной системе Linux — Postfix, Sendmail, Qmail, Exim. Я предпочитаю работать с Linux системами на серверах, поэтому затрагивать тему использования MTA на платформах Windows не буду. Мне хотелось бы показать как быстро установить и настроить пакет Exim4, для целей доставки почтовых уведомлений с конкретного сервера. Его компактность, надежность и наличие всего необходимого просто идеально подходят для этой цели.
Настройка
Ниже проводим манипуляции на операционной системе на базе Ubuntu Linux 18.04 Bionic Beaver. Для начала установим пакет Exim4.
# sudo apt-get install exim4
Когда пакет будет установлен, нам нужно будет его настроить таким образом, чтобы можно было отправлять почтовые уведомления от локальных систем внешним пользователям. При этом MTA должен слушать TCP порт только на localhost интерфейсе, чтобы исключить возможность удаленного взлома и отправки спам сообщений. Настройка производится с помощью следующей команды.
# sudo dpkg-reconfigure exim4-config
В результате выполнения данной команды, необходимо выбрать ответы на основные вопросы в настройке Exim. На основании этих ответов будет сгенерирован конфигурационный файл, который и будет задействован в процессе работы Exim4. В самом начале конфигурации мы обязательно выбираем тип MTA агента — internet site; mail is sent and received directly using SMTP. Это показано на скриншоте ниже.
Дальше в следующем экране работы программы настраиваем домен, который будет использоваться для отправки почтовых сообщений. Как пример, для сервера, на котором расположен веб сайт www.andreyus.com, мы указываем соотвественно домен — www.andreyus.com.
В следующем окне конфигурации нам нужно настроить адреса, на которых будет работать SMTP демон. Для безопасности в общем случае я крайне рекомендую указывать только IP адрес localhost интерфейса — 127.0.0.1. Указывать IP адреса реальных сетевых карт стоит только в случае, если данный хост будет выполнять роль почтового сервера в сети.
Дальше мы указываем домены для которых почтовый агент будет принимать почту. В базовом случае — это тот же домен, от которого почта будет отправляться. Продолжив пример с сервером www.andreyus.com, мы так же указываем этот домен в этом пункте.
Далее в настройках доменов, для которых почтовый агент будет осуществлять релей (пересылку через себя), так же отмечаем только наш домен, который был везде указан до этого. В данном примере это www.andreyus.com.
После этого нужно указать хосты, для которых разрешена пересылка почты через наш сервер. С учетом того, что в данном случае мы настраиваем отсылку только локальных оповещений, то таких хостов не будет. Оставляем данную настройку пустой, как показано ниже на скриншоте.
Дальше будет несколько настроек по организационной части самого почтового агента, которые можно оставить по умолчанию. Их приводить тут не буду. Думаю, что каждый сможет в них разобраться сам без труда. После успешного завершения работы запущенной программы, мы получим функционирующий MTA на сервере, с помощью которого можно отправлять сообщения в Интернет.
Так, чтобы отправлять сообщения электронной почты из шела можно воспользоваться командой sendmail. Например, в следующем виде.
# echo "Subject: test email message" | sendmail -v support@andreyus.com
Резюме
Возможность отправлять почтовые уведомления с сервера важная функция, которая должна присутствовать на всех продакшен серверах. С помощью этого можно организовать доставку электронных сообщений со скриптов PHP в веб приложениях, со скриптов в шеле и кроне, а также с прочих приложений в системе. Удобство данного способа оповещения сложно недооценить. Использование Exim4 и небольшие манипуляции со стороны администратора легко позволяют обеспечить данный функционал на любом сервере Linux.