Отправка электронной почты по событию SYSLOGD

Передо мной встала задача: мне необходимо было знать, в какой момент выключают свет в нашей конторе, чтоб найти причину возникавшей проблемы с кое-каким оборудованием.

Итак, я подумал, что раз на борту есть sendmail и прочий софт, то можно сделать и на нем. В sendmail я не силен. Поковыряв сию программу отказался. Ставить почтовый клиент тоже не захотел. Так как на борту был установлен Perl (поставился во время установки Squid), то решил замутить программу на perl-е. Нашел простые примеры на просторах интернета. Вот один из них:

#!/usr/bin/perl
use Net::SMTP;
$smtp = Net::SMTP->new('mail.moidomen.ru',
Hello => '10.1.0.77',
Timeout => 40,
Debug => 0,);
$smtp->auth('mailaccount', password');
$smtp->mail('mailaccount@moidomen.ru');
$smtp->to('master@moyapochta.ru');
$smtp->data();
$smtp->datasend("From: mailaccount\@moidomen.ru\n");
$smtp->datasend("To: master\@moyapochta.ru\n");
$smtp->datasend("Subject: ALERT from apcupsd\n");
$smtp->datasend("\n");
$smtp->datasend("A simple test message\n");
$smtp->dataend();
$smtp->quit;

Ясно, что надо ввести свой логин пароль в скрипте, имя или адрес почтового сервера, заполнить другие поля.Все понятно интуитивно.

Но этот скрипт не заработал сразу. Сниффер показал, что проваливается аутентификация на SMTP сервере.

Внешний SMTP сервер поддерживал следующие виды аутентификации:

250-AUTH LOGIN CRAM-MD5 PLAIN

Путем изысканий и чтения README нашел, что нужен модуль SASL. Нашел его в портах:

/usr/ports/security/p5-Authen-SASL

Для экономии времени решил его поставить из пакетов:

# pkg_add –r p5-Authen-SASL

Все быстренько скачалось с сети и поставилось за секунды. Вообще рекомендую ставить «гигантский софт» именно из фряшных пакетов.

Попробовал свой скрипт – бинго, сработало.

Ok, дошел черед до конфига syslogd. Приведу пример для событий auth.

Пару слов о syslogd.

Syslogd – программа для журналирования сообщений системы. Эта программа читает и записывает сообщения в файлы, другие машины, файлы в зависимости от конфигурации. Файл конфигурации находится в /etc/syslogd.conf. В файле конфигурации описана обработка событий по следующим ключевым словам: auth, authpriv, console, cron, daemon, ftp, kern, lpr, mail, mark, news, ntp, security, syslog, user, uucp, loacl0 – local7.

#vi /etc/syslog.conf

Почитал manual для syslog.conf. Добавил в середине вот такую строку:

auth.*                         |exec /root/one.pl

В этой строке все сообщения аутентификации будут передаваться в пайп скрипту one.pl (auth – означает аутентификацию, * – означает все события.

События бывают:

  • emerg;
  • crit;
  • alert;
  • err;
  • warning;
  • notice;
  • info;
  • debug;

Из тех же манов чтоб заработал syslogd с новой конфигурацией надо ему послать сигнал HUP

#ps aux|grep syslog
#kill –s HUP <pid sislogd-a>

Логинимся на другой виртуальной консоли (нажать Alt+F2, ввести логин и пароль), проверяем результат. Результат должен прийти к вам на эл. почту. $SAPE$

Результат работы: мы получили инструмент для отправки каких-то важных событий через внешний (находящийся вне пределов нашей системы) почтовый сервер. Можно доработать скрипт под свои нужды. Об этом, думаю в следующей статье.

Интересно? Поделись с другом
Litl-Admin.ru

Comments:

Comments: 1
  1. толстопард

    > В sendmail я не силен. Поковыряв сию программу отказался.

    sendmail заплесневел и монстроподобен. для отправки уведомлений есть ssmtp — в конфиге правим одну строчку (указываем ближайший релей) и в путь.

    > Пару слов о syslogd.

    Есть syslogd-ng, который умеет гибкие правила и удалённый лог. Настраиваем один на всю(е) организацию(ии) неубиваемый сервер логов с бэкэндом в реплицированном mysql и горя не знаем.

    > Из тех же манов чтоб заработал syslogd с новой конфигурацией надо ему послать сигнал HUP

    Не только syslogd, в большинстве адекватных сервисов SIGHUP эквивалентен service * reload
    А если хочется именно килом, то можно
    kill -1 `pgrep syslogd`

Leave a Reply