Контора пишет (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