Настройка почтовых уведомлений системы мониторинга в CentOS

Возможность отправлять извещения по электронной почте очень важна в управлении сервером: это не только упрощает работу, но и позволяет своевременно узнать о сбое или атаке.

Данное руководство поможет настроить отправку извещений по электронной почте на виртуальном выделенном сервере CentOS и повысить его защиту.

Основные понятия электронной почты

Электронное письмо (или e-mail) – это передача сообщения в электронном виде. Этот процесс не обязательно происходит онлайн. Передавать электронные письма можно в пределах одной локальной сети или даже машины. Для этого используются встроенные инструменты. Для передачи электронного письма в интернете используется множество компонентов, среди которых и агенты передачи сообщений.

Агенты передачи сообщений

Агент передачи сообщений (message transfer agent, или MTA) – это приложение, которое осуществляет доставку пользователю вне зависимости от его местонахождения (он может находиться в той же сети или же в удалённой системе). Обычно MTA поставляются по умолчанию вместе с различными дистрибутивами Linux и используются в качестве клиентов для обмена сообщениями между хостами (как правило, с помощью протокола SMTP).

Почтовые клиенты

Почтовый клиент – это приложение, с помощью которого пользователи или другие приложения могут обмениваться электронной почтой. Они зависят от MTA. Популярными клиентами являются Microsoft Outlook, Mozilla Thunderbird или онлайн-клиент Gmail.

Протокол SMTP

Для взаимодействия хостов и обмена сообщениями между ними используется протокол. По сути это «общий язык», позволяющий хостам понимать друг друга. Одним из самых популярных протоколов является SMTP.

Отправка сообщений с помощью Heirloom mailx

К сожалению, настроить по-настоящему надёжную систему достаточно тяжело. Описанная в этом руководстве архитектура способна охватить только одну сторону сложной природы обмена электронными письмами

В данном руководстве используется Heirloom mailx, почтовый агент от Berkeley Mail. Он предлагает дополнительную поддержку некоторых протоколов, среди которых IMAP, POP3 и SMTP.

Примечание: На форумах и сайтах вы можете встретить похожее приложение под названием nail. Эти приложения действительно очень похожи. Чтобы выполнить любую команду nail в mailx, нужно просто заменить в команде nail на mail или mailx. Также можно создать символьную ссылку на приложение mailx.

Установка mailx

Для начала нужно обновить систему.

Примечание: В среде производства рекомендуется пропустить обновление системы, так как это повлияет на работу приложений.

$ yum -y update

Чтобы установить mailx, используйте команду:

$ yum install -y mailx

Теперь можно отправлять сообщения с помощью команды mail или mailx.

Что такое символьные ссылки и как их создавать

Символьная ссылка (symlink) – это файл, который содержит ссылку на другой существующий в системе файл.

Некоторые сценарии и приложения могут использовать для отправки сообщения команду email вместо mailx. В таком случае нужно создать символьную ссылку на mailx.

Например, чтобы вместо команды mail выполнялась команда mailx, нужно ввести.

$ ln -s /bin/mailx /bin/email

Настройка ретрансляции SMTP-сервера

Некоторые сообщения, отправленные согласно инструкциям данного руководства, могут оказаться в папке спама. Если вам нужны только уведомления приложений, такой проблемы не возникнет. Однако если вы хотите ускорить доставку входящей почты, вы можете ретранслировать свои сообщения через внешние серверы SMTP (т.е. серверы ваших почтовых провайдеров или коммерческие сервисы электронной почты).

Чтобы настроить SMTP-сервер для использования mailx, отредактируйте файл /etc/mail.rc, в котором хранятся настройки приложений.

$ nano /etc/mail.rc

Ниже вы найдёте пример настроек SMTP, которые нужно отредактировать. Укажите своего провайдера. Строки, которые начинаются с символа #, закомментированы, то есть не работают.

# set smtp=smtp://smtp.server.tld:port_number
set smtp=smtp://smtp.example.com:543
# tell mailx that it needs to authorise
set smtp-auth=login
# set the user for SMTP
# set smtp-auth-user=user@domain.tld
set smtp-auth-user=user.name@example.com
# set the password for authorisation
set smtp-auth-password=enter-password-here-1234

Примечание: Не забудьте отредактировать код, указав ваши данные.

Чтобы закрыть и сохранить файл, нажмите CTRL+X и Y.

Примечание: Также вы можете использовать сервер Gmail или профессиональные серверы, например MANDRILL. С помощью таких серверов можно бесплатно отправлять большое количество электронных писем.

Отправка электронных писем с помощью команд mail и mailx

С почтовой системой Sendmail можно взаимодействовать напрямую, однако использование приложения mailx упрощает работу и предлагает ряд полезных дополнительных опций.

Вот краткий список доступных опций Heirloom mailx:

  • -a файл: позволяет прикреплять выбранный файл к письму.
  • -b адрес: отправляет скрытые копии письма (bcc) на все адреса, перечисленные через запятую.
  • -c адрес: рассылает копии писем всем пользователям, состоящим в списке.
  • -q файл: отправляет содержимое заданного файла в виде сообщения.
  • -r from адрес: задаёт адрес отправителя.
  • -s тема: устанавливает тему сообщения.

Примечание: Полный список опций можно найти в официальной документации.

Чтобы отправить сообщение, используйте:

echo "Your message" | mail -s "Message Subject" email@address

Чтобы отправить сообщение с вложением:

echo "Message" | mail -s "Subject" -a /loc/to/attachment.txt email@address

Прочитать тело сообщения из файла можно с помощью команды:

echo | mail -s "Subject" -r from@address -q /loc/to/body.txt email@address

Примечание: Если у вас не настроен внешний сервер SMTP, все ваши сообщения, скорее всего, будут отмечены как спам. Чтобы избежать этого, перенаправьте их во входящие сообщения вручную.

Полную документацию Heirloom mailx можно найти здесь.

Настройка сообщений системы мониторинга, предупреждений и уведомлений безопасности

Рассмотрим несколько примеров сообщений, которые может отправлять сервер.

Мониторинг портов и сокетов

Более подробную информацию о мониторинге портов и сокетов можно найти в этой статье. Просто создайте в Linux Socket Monitor задачу, которая будет запускать команду mailx, чтобы сообщить о новом открытом порте/сокете.

Мониторинг с помощью сценариев Bash

В случае особой необходимости (например для мониторинга использования памяти, дискового пространства, авторизации и т.п.) можно использовать один из тысячи доступных сценариев bash.

Сценарии bash (сценарии оболочки) – это небольшие приложения, предназначенные для выполнения быстрых задач. Их просто создавать, потому их часто используют в своей работе системные администраторы.

Выбрав сценарий для выполнения необходимой задачи, создайте пустой файл и сохраните в нём исполняемый код сценария.

Например, вам нужно получать уведомления в случае если дисковое пространство подходит к концу.

Для этого найдите в интернете сценарий от Linux Jornal. Перейдите по ссылке и вы получите доступ к коду.

Создайте новый файл:

$ nano monitor_disk_space.sh

Скопируйте и вставьте в него сценарий:

#!/bin/bash
CURRENT=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=90
if [ "$CURRENT" -gt "$THRESHOLD" ] ; then
mail -s 'Disk Space Alert' mailid@domainname.com << EOF
Your root partition remaining free space is critically low. Used: $CURRENT%
EOF
fi

Примечание: Замените mailid@domainname.com своим адресом.

Чтобы закрыть и сохранить файл, нажмите CTRL+X и Y.

Теперь у вас есть сценарий monitor_disk_space.sh. Сделайте этот файл исполняемым.

$ chmod +x monitor_disk_space.sh

Запустите этот файл:

./monitor_disk_space.sh

Затем настройте планировщик cron для автоматического регулярного запуска сценария.

Примечание: Больше о работе с cron можно узнать в этой статье.

Попробуйте создать ещё один сценарий. К примеру, можно отслеживать использование дискового пространства и отправлять сообщения, если пространства осталось мало. Такой сценарий можно найти здесь.

Создайте пустой файл:

$ nano monitor_space_usage.sh

Скопируйте и вставьте следующий код:

#!/bin/bash
LIMIT='80'
#Here we declare variable LIMIT with max of used spave
DIR='/var'
#Here we declare variable DIR with name of directory
MAILTO='monitor@gmail.com'
#Here we declare variable MAILTO with email address
SUBJECT="$DIR disk usage"
#Here we declare variable SUBJECT with subject of email
MAILX='mailx'
#Here we declare variable MAILX with mailx command that will send email
which $MAILX > /dev/null 2>&1
#Here we check if mailx command exist
if ! [ $? -eq 0 ] #We check exit status of previous command if exit status not 0 this mean that mailx is not installed on system
then
echo "Please install $MAILX"
#Here we warn user that mailx not installed
exit 1
#Here we will exit from script
fi
cd $DIR
#To check real used size, we need to navigate to folder
USED=`df . | awk '{print $5}' | sed -ne 2p | cut -d"%" -f1`
#This line will get used space of partition where we currently, this will use df command, and get used space in %, and after cut % from value.
if [ $USED -gt $LIMIT ] #If used space is bigger than LIMIT
then
du -sh ${DIR}/* | $MAILX -s "$SUBJECT" "$MAILTO"
#This will print space usage by each directory inside directory $DIR, and after MAILX will send email with SUBJECT to MAILTO
fi

Отредактируйте код согласно вашим требованиям и сохраните его (CTRL+X и Y).

Чтобы сделать файл исполняемым, запустите команду:

$ chmod +x monitor_space_usage.sh

Tags: , , ,

Добавить комментарий