Получаем логи Linux сервера по почте

mail_log

После настройки нового сервера, очень хорошей идеей является ежедневный просмотр логов, с целью выявления проблем, и контроля работы сервера.

Это просто замечательно, но вчитываться в километры однотипного вывода ища в них проблему, не наш метод! Мы же будем получать сообщение о проблеме, вместе с куском «проблемного» лога на почту.

Задача такая: автоматический анализ всех логов сервера, и в случае нахождения чего то не типичного, отправка «проблемного» куска этого лога на почту.

В начале нам нужен SMTP сервер, дабы мы могли отправлять почту с сервера, поднимать полноценный почтовик и даже просто использовать для целей отправки тяжеловесный exim мы не будем, вместо него поставим легковесный ssmtp который будет отсылать почту через зарегистрированную где то почтовую почтовую учетку (это может быть учетка на любом публичном сервисе, или учетка в вашем корпоративном или личном домене, это не имеет значения).

Ставим ssmtp:

aptitude install ssmtp

Правим конфиги приводя их к такому виду (для примера я использую настройку для яндекс почты):

nano /etc/ssmtp/ssmtp.conf
# Указываем smtp-сервер, через который будем отправлять письма.
mailhub=smtp.yandex.ru

# Используем шифрованное соединение (если есть необходимость или желание).
#UseTLS=Yes
#UseSTARTTLS=YES

# Указываем имя пользователя на smtp-сервере (от какого пользователя шлем почту).
AuthUser=server@yandex.ru

# Указываем пароль от smtp-аккаунта:
AuthPass=password123

# Hostname нашего сервера.
# Для отправки почты через учетную запись, этот параметр по сути не нужен, можно вписать имя сервера, и оно отразится в заголовке письма, можно вообще стереть этот параметр.
hostname=server_name

# Запрещаем скриптам "решать", с какого ящика они отправляют письмо (параметр FromLineOverride=YES).
# Поле From: будет выставляться самим smtp переписывая параметры вводимые скриптами (если запретить, то половина скриптов ничего отправить не сможет).
# Если разрешить (FromLineOverride=NO), скрипты смогут переписывать поле From: и будут работать.

FromLineOverride=NO

# указываем ящик, куда будет отправляться вся локальная почта предназначенная пользователям с uid < 1000.
# В том числе, root (письма от крона), www-data и так далее (кому шлем почту, т.е. ваш личный ящик)

root=admin@yandex.ru

Правим второй конфиг:

nano /etc/ssmtp/revaliases
# В данном конфиге явно указывается, почта от какого пользователя и с какого ящика может уходить.
# Данная настройка позволяет защитить сервер от возможности слать через него спам с пользовательских учеток.
root:server@yandex.ru:smtp.yandex.ru

Момент получения всей почты через учетку root спорный конечно, можно в конфигах настроить отправку почты с юзерской учетной записи, но мне, вопреки всем рекомендациям, нравится делать это от root. Особой проблемы в безопасности я тут не вижу.

Я вообще не люблю делать какие то настройки с привязкой к обычному пользователю, ибо как то на одной из работ, я столкнулся с сервером, который в ходу уже 8 лет. Там было около 10 пользовательских учеток накопленных за все время, и под каждой были настроены какие то сервисы. Это было ужасно.

Есть еще один момент по ssmpt, не всем он нужен, но мне был нужен.

Этот алиасы.

Система шлет все письма root, в конфигах выше мы определили, что root у нас получает почту на адрес admin@yandex.ru, но у меня случилась необходимость слать сообщения с сервера не на один ящик, а на несколько. Как пример из жизни, это необходимость получать почту мне, и админам в регионах, где физически находятся настраиваемые мною сервера. Сделать что то правя /etc/aliases не получится, ибо ssmtp его не обрабатывает и команда newaliases нас сильно обламывает. В своих скриптах конечно можно настроить хоть 10 ящиков, но не все программы и демоны поддерживают изменения ящика с root на что то еще.

Но выход есть!

Это отправка через стандартный bsd-mailx который сидит под симлинком mail.

Для начала надо обязательно проверить куда ведет у вас mail, набираем:

whereis mail

и видим следующее: mail: /usr/bin/mail /etc/mail.rc /usr/share/man/man1/mail.1.gz

Тут нас интересуют 2 вещи, куда ведет /usr/bin/mail (а это на 100% симлинк, но вот куда, это надо выяснить и переделать его на bsd-mailx который стандартно находится тут /usr/bin/bsd-mailx).

Второй момент, это файл /etc/mail.rc в него как раз и вносятся изменения.

nano /etc/mail.rc

В него надо добавить все ящики, на которых хотим получать почту посланную на root. Выглядит это так:

alias root root<admin2@yandex.ru>
alias root root<admin3@yandex.ru>

и так далее.

В данный список нет смысла добавлять ящик настроенный на получение почты в конфигах ssmtp у нас это admin@yandex.ru (иначе сообщения на этот ящик будут задваиваться), надо указывать только ящик второго, третьего и т.д. людей.

Проверяем отправку писем:

echo test text | mail root

Если все хорошо, и почта прошла (в том числе на указанные в /etc/mail.rc дополнительные ящики), ставим пакет logcheck который как раз и занимается просмотром логов и отправкой интересных мест на почту.

aptitude install logcheck

После установки можно ничего не настраивать, но если сильно хочется, в конфиге /etc/logcheck/logcheck.conf можно выбрать один из готовых режимов работы (из коробки стоит режим server), или можно сделать на базе одного из режимов свой, просто добавляя или убирая файлы исключений из нужной папки.

Принцип работы logcheck очень прост, он обходит все логи (указанные в файле /etc/logcheck/logcheck.logfiles) и парсит их по заведомо созданным регулярным выражениям, что не подпадает ни под одно из выражений, является не типичным признаком жизнедеятельности демона или программы и именно этот кусок отправляется на почту.

Лично я оставляю режим server и не мучаюсь. Хорошей идеей будет включение режима paranoid и добавление ненужных по вашему исключений, но как показали опыты на мне, я туда перетянул почти все ВСЕ исключения и наделал еще штук 5 своих, для самописных скриптов.

Отрабатывает logcheck при перезагрузке и затем раз в час, если кому то этого мало, можно отредактировать крон записи /etc/cron.d/logcheck

Для тех у кого стоит proxmox надо добавить еще одно исключение создав его вручную. Это исключение на rrdcached. Может rrdcached ставится еще с каким то софтом, я не в курсе, я встречал его только в составе proxmox.

В общем, если оставляем по умолчанию настройку server, в соответствующей папке /etc/logcheck/ignore.d.server надо будет создать исключение для rrdcached:

touch /etc/logcheck/ignore.d.server/rrdcached

И добавить в него данную строчку:

^\w{3} [ :[:digit:]]{11} [._[:alnum:]-]+ rrdcached\[[0-9]+\]: *

Перезапускать ничего не надо, фильтр сработает при следующем запуске logcheck и полностью исключит вывод rrdcached (в нем вообще ничего интересного нет, и быть не может, желающие могут убедиться в этому погуглив).

Больше ничего особо интересного в настройка logcheck нет, ибо он очень прост, хотя как и все годные nix приложения позволяет многое изменить как в конфигах, так и правя исключения. Кому надо, тот разберется сам, сложного ничего там нет.

На этом настройка закончена и можно со спокойной душой заниматься своими делами, ну а если что, сервер нас предупредит. К стати, использование logcheck позволяет тем, кто не особо разбирается в логах, понять, что из них просто информация, а что заслуживает внимания.

P.S. Помимо этих настроек, я еще люблю следить за ssh брутфорсом моих серверов, специально не ставя авторизацию по сертификатам, но используя fail2ban и свой скрипт по созданию рейтинга злоумышленников, который к стати тоже, можно и нужно отправлять на почту, просто добавив к конвейеру:

| mail -s "Заголовок письма" root

Такой подход позволяет сделать какие то оценки «интересности» сервера, что иногда бывает очень полезно.

Смотрите так же:

Получаем логи Linux сервера по почте: 14 комментариев

  1. Спасибо за статью, все работает!
    У меня другой вопрос: а что если сервер тупо выключится по питанию или отвалится сеть, скпипт то отработает раз в час, но почта не придет. Я буду думать, что мой сервер нормально работает, а на самом деле он недоступен… Как быть?

  2. После установки ssmtp не реагирует на команду mail
    mail: command not found ssmtp debian

    #whereis mail
    пустой

      1. Спасибо заработало.
        Ещё пару вопросов:
        yandex ругается на недоставленные сообщения: «Diagnostic-Code: smtp; 504 5.5.2 : Recipient address rejected: need fully-qualified address»

        в /var/log/mail.log нет записей про отправку 8BITMIME@server.

        Письмо о ошибке приходит вместе с письмом ProxMox о бэкапе витальных машин по расписанию.

        как проверить работу logcheck?
        он почему то ничего не шлёт.

        1. /etc/cron.d/logcheck

          Надо изменить частоту обновления, по умолчанию логи обрабатываются каждую вторую минуту часа. Меняем например на обработку раз в 5 минут */5 * * * *

          После этого можно убрать из папки с обработчиками обработчик ssh, просто переместить в другое место и попробовать пару раз авторизоваться. После этого должны прийти на почту логи. Или как вариант, можно поперезагружать сервер, при перезагрузке об этом приходит сообщение.

          Но скорее всего не работает из за не изменения адресата отправки, надо поменять.

          Что за проблема с 8BITMIME@server я не в курсе, не сталкивался, на всех серверах которые делала я, подобного не наблюдалось. Но вообще, у mutt было что то подобное в конфигах, но про что это и что я не знаю.

  3. Подскажите, допустим у меня почтовый сервер на базе postfix. Я хочу чтоб письма приходящие на test@domen.ru (domen.ru зона которую обслуживает мой почтовый сервер) дублировались ещё vasil@domen.ru и nadia@domen.ru. Насколько я понял для этого достаточно внести изменения в файл /etc/mail.rc
    alias test test
    alias test test
    Так? Кстати файл /etc/mail.rc непуст, а содержит
    set ask askcc append dot save crt
    ignore Received Message-Id Resent-Message-Id Status Mail-From Return-Path Via Delivered-To
    Что это означает?

    1. Постфикс, это полноценный почтовый сервер, он поддерживает алиасы в полном объеме. Он может быть по разному настроен, с sql, или нет, могут быть разные конфигурации. Но по умолчанию он берет алиасы из /etc/aliases
      Т.е. надо добавить туда нужные алиасы, и сделать newaliases.

      А вообще, пройдитесь поиском по main.cf и посмотрите упоминание alias, найдете свои настройки и будет понятно, где править.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.