Контора пишет (Logwatch, newsyslog и другие)

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

snake@snake [/etc]#cd /usr/ports/
snake@snake [ports]#make search name=logwatch
Port:   fwlogwatch-1.1_1
Path:   /usr/ports/security/fwlogwatch
Info:   A packet filter and firewall log analyzer
Maint:  michael@ranner.eu
B-deps: gettext-0.17_1 libiconv-1.13.1
R-deps: gettext-0.17_1 libiconv-1.13.1
WWW:    http://fwlogwatch.inside-security.de/

Port:   logwatch-7.3.6
Path:   /usr/ports/sysutils/logwatch
Info:   A log file analysis program
Maint:  trix@basement.net
B-deps:
R-deps: p5-MIME-Base64-3.08 perl-5.8.9_3
WWW:    http://www2.logwatch.org:81/

Первая утилита анализирует логи Cisco, Ipfilter и других фаерволов и IDS типа Snort, но про IPFW она похоже не знает, а потому толку от нее для меня немного. Вторая же утилита куда как интересней – это перловый скрипт, который анализирует логи и отсылает на почту админу суммарную информацию – эдакий куммулятивный лог-файл за день. Анализирует она не что попало, а лишь те сервисы, которые указаны в настройках. Более того, можно и самому писать модули для анализа нужных логов. В общем – вещь, как мне кажется, архиполезная.

Настройки лежат в /usr/local/etc/logwatch/defaults:

snake@snake [ports]#cd /usr/local/etc/logwatch/
snake@snake [logwatch]#ls
total 18
drwxr-xr-x   6 root  wheel   512  4 мар 11:06 .
drwxr-xr-x  29 root  wheel  1536  3 мар 14:46 ..
drwxr-xr-x   5 root  wheel   512  2 мар 16:31 defaults
drwxr-xr-x   2 root  wheel   512  1 мар 17:11 html
drwxr-xr-x   2 root  wheel   512  1 мар 17:11 logfiles
-rw-r--r--   1 root  wheel  4991  4 мар 11:06 logwatch.conf
drwxr-xr-x   2 root  wheel   512  1 мар 17:11 services

В папке defaults находятся умолчальные конфиги, которые никто не мешает поправить и переместить для удобства в соответствующую папку – наисвысший приоритет имеют опции, непосредственно передаваемые скрипту при запуске, затем – файлы и папок services и logfiles, а уж в последнюю очередь смотрится папка defaults.

Файл настроек снабжен подробными комментариями, но некоторые пояснения все-таки нужно сделать:

########################################################
# This was written and is maintained by:
#    Kirk Bauer 
#
# Please send all comments, suggestions, bug reports,
#    etc, to kirk@kaybee.org.
#
########################################################

# NOTE:
#   All these options are the defaults if you run logwatch with no
#   command-line arguments.  You can override all of these on the
#   command-line.

# You can put comments anywhere you want to.  They are effective for the
# rest of the line.

# this is in the format of  = .  Whitespace at the beginning
# and end of the lines is removed.  Whitespace before and after the = sign
# is removed.  Everything is case *insensitive*.

# Yes = True  = On  = 1
# No  = False = Off = 0

# Default Log Directory
# Папка с логами по умолчанию
LogDir = /var/log/

# Папка для временных файлов
TmpDir = /tmp/logwatch

# Кому будем отсылать уведомление. Можно указать локального
# пользователя, можно просто e-mail адрес
MailTo = root
# Здесь можно указать дополнительные адреса, на которые будут
# отсылаться уведомления
Mailto_host1 = snake@localhost

# Имя отправителя, от которого будем получать письма
MailFrom = snake

# Выводить ли отчет в консоль. Полезно при отладке и проверке
Print = No

# Можно сохранить отчет файл, на всякий случай
Save = /tmp/logwatch-mail

# Использовать ли архивы 
# (к примеру /var/log/messages.1 или /var/log/messages.1.gz)
# newsyslog позволяет производить ротацию логов и паковать старые 
# логи в архивы, допустим, раз в сутки. Нехило экономит место и 
# повышает наглядность.
#Archives = No

# Читать ли файлы .yesterday - тоже вид ротации логов
Range = yesterday

# Здесь все просто - уровень детализации отчетов
# Low = 0
# Med = 5
# High = 10
Detail = High


# Собирать ли информацию в всех сервисах, данные о которых
# лежат в папке services или только по определенному (например ftpd)
Service = All

# Можно выключить определенные сервисы
Service = "-zz-network"     # Prevents execution of zz-network service, which
                            # prints useful network configuration info.
Service = "-zz-sys"         # Prevents execution of zz-sys service, which
                            # prints useful system configuration info.
Service = "-eximstats"      # Prevents execution of eximstats service, which
                            # is a wrapper for the eximstats program.
# If you only cared about FTP messages, you could use these 2 lines
# instead of the above:
#Service = ftpd-messages   # Processes ftpd messages in /var/log/messages
#Service = ftpd-xferlog    # Processes ftpd messages in /var/log/xferlog
# Maybe you only wanted reports on PAM messages, then you would use:
#Service = pam_pwdb        # PAM_pwdb messages - usually quite a bit
#Service = pam             # General PAM messages... usually not many

# Аналогично, можно читать только определенные лог-файлы
#LogFile = messages
# например только /var/log/messages.

# Почтовая программа по умолчанию. Обычно используется
# sendmail или просто mail
mailer = "/usr/bin/mail"

#
# Собирать логи только с этого хоста. Имеет смысл, если на машине 
# хранятся не только ее собственные логи
#HostLimit = Yes

После чего в crontab добавляется строчка:

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

Которая будет запускать скрипт раз в сутки, и админу на мыло будет капать суточный отчет. Стоит отметить, что программа не анализирует изменения в файле, а только сам файл, и потому если логи не ротируются, то со временем отчет может разрастаться за счет старых записей. Один из методов борьбы с этим – настройка ротации логов с помощью newsyslog. Способ прост до безобразия – открываем /etc/newsyslog.conf и смотрим:

# comments by fr33man
# 24.11.2006

# лог-файл -- абсолютный путь к файлу, с которым будем работать.
# [владелец:группа] -- необязательный параметр, который указывает newsyslog'у
# кто должен являться владельцом данного лог файла
# права -- права, которые должны быть на файле
# кол-во -- максимальное количество заархивированных лог файлов.
# когда -- время, через которое архивировать лог-файл.
# флаги -- некоторые параметры, для лог-файлов:
# B - по умолчанию, newsyslog добавляет в новый лог-файл сообщение о том, что
# лог-файл был ротирован, но если лог-файл бинарный, то это сообщение испортит лог,
# с параметром B newsyslog не будет добавлятьт никаких сообщений в лог
# C - если лог-файл не существует, то его необходимо создать.
# G - если указан данный флаг, то в названии лог-файла можно 
# использовать стандартные шаблоны(например *)
# J - сжимать лог-файл, используя bzip2
# N - Не предупреждать никакой процесс, о ротации лог-файла
# W - если используете флаги Z или J, то newsyslog должен подождать, 
# пока заверщиться процесс архивации.
# Z - сжимать лог, использую gzip.
# logfilename          [owner:group]    mode count size when  flags [/pid_file] [sig_num]
/var/log/all.log                        600  3     *    @T00  J
/var/log/amd.log                        644  3     100  *     J
/var/log/auth.log                       600  3     100  *     JC
/var/log/console.log                    600  5     100  *     J
/var/log/cron                           600  3     100  *     JC
/var/log/daily.log                      640  3     *    @T00  JN
/var/log/debug.log                      600  3     100  *     JC
/var/log/kerberos.log                   600  3     100  *     J
/var/log/lpd-errs                       644  3     100  *     JC
/var/log/maillog                        640  5     *    @T00  JC
/var/log/messages                       644  5     100  *     JC
/var/log/monthly.log                    640  4     *    $M1D0 JN
/var/log/pflog                          600  3     100  *     JB    /var/run/pflogd.pid
/var/log/ppp.log        root:network    640  3     100  *     JC
/var/log/security                       600  4     100  *     JC
/var/log/sendmail.st                    640  4     *    168   B
/var/log/slip.log       root:network    640  3     100  *     JC
/var/log/weekly.log                     640  5     1    $W6D0 JN
/var/log/wtmp                           644  3     *    @01T05 B
/var/log/xferlog                        600  3     100  *     JC
/var/log/cvsup.log                      664  2    *    24    -
/var/log/cvsupd.log                     664  2    *    24    Z
/var/log/mpd.log                        644  5     100 24    JC
/var/log/stargazer.log                  644  10    100 24    JC
/var/log/ntp.log                        644  2     100 24    JC
/var/log/snmpd.log                      644  3     100 24    JC
/var/log/ups.log                        644  5     100 24    JC
/var/log/smartd.log                     644  5     100 24    JC

После чего запускаем newsyslog (первый раз его работа может занять продолжительно время) и смотрим на причесанные лог-файлы. Надеюсь теперь исчезнет проблема, при которой лог того же mpd за пару-тройку месяцев работы разрастался до неприличных размеров в несколько мегабайт:

snake@snake [logwatch]#ls /var/log
drwxr-xr-x  11 root   wheel      3072  4 мар 12:00 .
drwxr-xr-x  28 root   wheel       512 22 фев 06:41 ..
drwxr-xr-x   2 root   wheel       512 17 май  2009 ConsoleKit
-rw-r--r--   1 root   wheel        62  4 мар 12:16 alias.log
-rw-------   1 root   wheel     84044  4 мар 10:31 auth.log
-rw-------   1 root   wheel      8303 10 сен 19:00 auth.log.0.bz2
-rw-------   1 root   wheel     23230  4 мар 12:22 cron
-rw-------   1 root   wheel      5334  4 мар 05:00 cron.0.bz2
drwxr-xr-x   2 root   wheel       512 31 янв 12:56 cups
-rw-------   1 root   wheel     34729 21 фев 20:42 debug.log
-rw-------   1 root   wheel     34569  4 мар 03:05 dmesg.today
-rw-------   1 root   wheel     44774  3 мар 03:05 dmesg.yesterday
drwxr-xr-x   2 www    www         512 18 фев 16:42 httpd
-rw-------   1 root   wheel      3523  4 мар 03:05 ipfw.today
-rw-------   1 root   wheel      3519  3 мар 03:05 ipfw.yesterday
-rw-r--r--   1 root   wheel     28056  4 мар 10:30 lastlog
drwxr-xr-x   2 root   wheel       512  2 мар 16:10 logwatch
-rw-r--r--   1 root   wheel        67 12 апр  2009 lpd-errs
-rw-r-----   1 root   wheel     19952  4 мар 11:49 maillog
-rw-r-----   1 root   wheel      1111  4 мар 00:00 maillog.0.bz2
-rw-r-----   1 root   wheel      1494  3 мар 00:00 maillog.1.bz2
-rw-r--r--   1 root   wheel    195523  4 мар 12:23 messages
-rw-r--r--   1 root   wheel     10368  4 мар 12:00 messages.0.bz2
-rw-r--r--   1 root   wheel      8118  4 мар 11:00 messages.1.bz2
-rw-------   1 root   wheel       265 19 фев 03:04 mount.today
-rw-------   1 root   wheel       233 17 окт 03:04 mount.yesterday
-rw-r--r--   1 root   wheel     13020  4 мар 12:16 mpd.log
-rw-r--r--   1 root   wheel      2731  4 мар 03:00 mpd.log.0.bz2
-rw-r--r--   1 root   wheel      1786  3 мар 03:00 mpd.log.1.bz2
-rw-r--r--   1 root   wheel        60  4 мар 03:00 ntp.log
-rw-r--r--   1 root   wheel       119  4 мар 03:00 ntp.log.0.bz2
-rw-r-----   1 root   wheel     43188  4 мар 11:50 proftpd-error.log
drwxr-xr-x   3 root   wheel       512  4 мар 11:52 samba
-rw-r--r--   1 root   wheel     22550 17 апр  2009 samba.log
-rw-------   1 root   wheel     92434  4 мар 12:21 security
-rw-------   1 root   wheel      8388 27 фев 22:00 security.0.bz2
-rw-------   1 root   wheel      7238 26 фев 00:00 security.1.bz2
-rw-r-----   1 root   wheel       728  4 мар 11:09 sendmail.st
-rw-r-----   1 root   wheel       728 26 фев 03:05 sendmail.st.0
-rw-------   1 root   wheel      4711  1 фев 03:04 setuid.today
-rw-------   1 root   wheel      4802  6 ноя 03:04 setuid.yesterday
-rw-r-----   1 root   network      67 12 апр  2009 slip.log
-rw-------   1 root   wheel      5638 18 фев 11:58 userlog
-rw-r--r--   1 root   wheel      2816  4 мар 11:50 wtmp
-rw-r--r--   1 root   wheel     13332  1 мар 00:02 wtmp.0
-rw-r--r--   1 root   wheel     11264  1 фев 01:16 wtmp.1
-rw-r--r--   1 root   wheel      7788 31 дек 20:05 wtmp.2
-rw-r--r--   1 root   wheel     10692 30 ноя 23:07 wtmp.3
-rw-------   1 root   wheel     29429  3 мар 11:06 xferlog
-rw-------   1 root   wheel     25010 13 янв 18:00 xferlog.0.bz2

Leave a Reply