Установка и настройка анализатора логов logwatch

Ноябрь 2nd, 2012

Установка и настройка logwatch

Logwatch – это анализатор логов для UNIX-систем. Принцип его работы таков: выбираются нужные сервисы, парсятся их логи по нужным параметрам, формируется отчёт и отправляется на почту. Большими плюсами сего продукта являются простота в конфигурировании и (если можно так сказать) его модульность. Программа написана на Perl, поэтому любой, кто хотя бы немного знаком с этим языком программирования, сможет написать свой модуль для каких-то нужных ему сервисов (этим как раз мы в дальнейшем и займёмся).

Всё нижеперечисленное тестировалось в FreeBSD 7.1 и FreeBSD 8.1

Итак, устанавливаем logwatch:

# cd /usr/ports/sysutils/logwatch
# make install clean

Установка займёт меньше минуты. Структура logwatch такова:

/usr/local/etc/logwatch/defaults – здесь лежат файлы конфигурации logwatch.conf и ignore.conf

/usr/local/etc/logwatch/defaults/services – файлы конфигурации сервисов, которые будут мониторится. Здесь мы указываем параметры, по которым будут парситься логи.

/usr/local/etc/logwatch/defaults/logfiles – файлы конфигурации логов демонов, здесь указываем соответствие между файлами логов в /var/log и сервисами.

/usr/local/libexec/logwatch/defaults/services/ - собственно скрипты, которые парсят логи.

 

Для начала пишем конфиг для logwatch. В /usr/local/etc/logwatch/defaults лежит дефолтный конфиг, с подробными комментариями, что и для чего нужно, рекомендую почитать.

Создаём файл-конфиг и открываем для редактирования:

# touch /usr/local/etc/logwatch/defaults/logwatch.conf
# mcedit /usr/local/etc/logwatch/defaults/logwatch.conf

Привожу свой logwatch.conf:

# директория, где хранятся файлы логов
LogDir = /var/log
# директория для хранения временных файлов
TmpDir = /tmp
# адрес, куда будут уходить отчёты
MailTo = name@domen.ru
# от кого уходит письмо
MailFrom = Logwatch
# выводить ли на stdout отчёт перед отправкой, имеет смысл включить только во время отладки
Print = No
# за какой период парсить логи, можно вписать yesterday, today или all
Range = yesterday
# детализация отчёта
Detail = Low
# список сервисов, которые будут в отчёте. Сервиса mpd изначально нет, соответствующий  #модуль мы напишем чуть позже
Service = mpd
Service = secure
Service = arpwatch
Service = postfix
Service = sshd
# через чего отправлять почту, оставляем по дефолту
mailer = "sendmail -t"

В принципе, с настройкой logwatch на этом можно закончить. Пробуем запустить скрипт:

# /usr/local/sbin/logwatch.pl

Должно вывалиться сообщение о неизвестном модуле mpd. Само собой, ведь он ещё не написан. Поэтому пока что закомментим строчку Service=mpd и попробуем запустить скрипт ещё раз. На почту должен свалиться отчёт.

Теперь приступим к редактированию сервисов. Для начала, поправим сервис postfix. В пришедшем отчёте можно увидеть, что из логов постфикса свалилось много лишнего, а хватило бы просто статистики. Родной скрипт не даёт больших возможностей по отсеву ненужного мусора, поэтому скачаем стороннюю разработку

# fetch http://aarnet.dl.sourceforge.net/project/logreporters/postfix-logwatch/release/1.39.05/postfix-logwatch-1.39.05.tgz

Из архива копируем два файла:

# cp –p postfix-logwatch.conf /usr/local/etc/logwatch/defaults/services/postfix.conf
# cp –p postfix-logwatch /usr/local/libexec/logwatch/defaults/services/postfix

В последнем скрипте правим первую строчку, убираем ключ “ –T ”.

Настройки я оставил дефолтными, меня всё устроило.

Теперь в отчёте, в секции postfix, только статистика.

Пишем недостающий модуль для mpd

Осталось написать свой модуль, который будет парсить логи vpn-демона.

Нам потребуется создать 3 файла, первый:

# touch /usr/local/etc/logwatch/defaults/services/mpd.conf

Пишем туда следующее:

Title = "MPD5"
LogFile = mpd

Далее создаём файл-конфиг логов для нашего нового сервиса:

# touch /usr/local/etc/logwatch/defaults/logfiles/mpd.conf

Вписываем туда следующее:

# файлы-логи демона
LogFile = mpd.log
Archive = mpd.log.*
# эти две строчки необходимы для корректного отсева по дате (вчера/сегодня/всегда)
*OnlyHost
*ApplyStdDate

Ну и самое интересное, пишем непосредственно скрипт сервиса mpd:

# touch /usr/local/libexec/logwatch/defaults/services/mpd
# mcedit /usr/local/libexec/logwatch/defaults/services/mpd

Ниже сам скрипт:

#!/usr/bin/perl

use strict;
use Logwatch ':all';

my %UsersAuth = ();
my %UsersFail = ();
my $success=0;
my $fail=0;
my $tmpUser;

while (defined(my $ThisLine = <STDIN>))  {
   chomp($ThisLine);
   if ( my ($User) = ($ThisLine =~ m/RADIUS: Authenticating user (\S+)/) )
    {
     $tmpUser=$User;
    }
     elsif ($ThisLine =~ m/AUTH: RADIUS returned: authenticated/)
      {
        $success++;
        $UsersAuth{$tmpUser}++;
      }
       elsif ($ThisLine =~ m/AUTH: RADIUS returned: failed/)
       {
         $fail++;
         $UsersFail{$tmpUser}++;
       }
}

############# printing #########

if (keys %UsersAuth) {
  print "VPN succes authentications: $success times\n\n";
   foreach my $User(keys %UsersAuth)
   {
    print " $User : $UsersAuth{$User} times\n";
   }
 print "\n";
}

if (keys %UsersFail) {
   print "Failed authentications: $fail times\n\n";
    foreach my $User(keys %UsersFail)
    {
     print " $User : $UsersFail{$User} times\n"
    }
   print "\n";
}

exit(0);

Функционал здесь не очень большой, но полезный, скрипт выдаст в отчёт успешные коннекты к pptp-серверу и имена пользователей, а также все неудачные попытки коннекта и соответствующие им имена пользователей.

Раскомментируем в logwatch.conf строчку Service = mpd и пробуем запустить скрипт:

# /usr/local/sbin/logwatch.pl

Теперь в пришедшем отчёте должна быть статистика по mpd.

Осталось поправить /etc/crontab:

30      0       *       *       *       root     /usr/local/sbin/logwatch.pl

Теперь каждый день в 0:30 на почту будет сваливаться отчёт за предыдущий день, в котором будет статистика по:

pptp-серверу;

MTA;

новым хостам в локальной сети;

подробная статистика по sshd, кто-когда-откуда заходил на сервер по ssh, логинился в root и т.д;


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