Контора пишет (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 <kirk@kaybee.org> # # 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 <name> = <value>. 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