Версія 1 (бета)
Ведення системного журналу подій з допомогою syslog-ng
За мотивами:
- man 8 syslog-ng
- man 5 syslog-ng.conf
- /etc/syslog-ng/syslog-ng.conf з дистрибутиву Debian.
Вступ
Записувач системних журналів syslog-ng є на даний момент найпотужнішим журналювальником подій в UNIX (серед інших: metalog, syslogd). syslog-ng — писар журналів повідомлень нового покоління, який здатний писати системні повідомлення в файли журналів, на термінал UNIX, на інші комп'ютери через мережу та користувачам, відповідно до налаштувань. syslog-ng має надзвичайно широкі можливості, дозволяє вести журнали повідомлень з бездискових станцій та є дуже гнучким, але з-за цього дещо складніший для опанування та налаштування. Сподіваюсь, ця стаття допоможе Вам зробити досконалу систему запису подій у мережі. Слід не забувати, що система журналізації подій є предметом атаки #1 у будь-якій мережі, і поки зловмисник її не зламає, або знищить інших дій він не робитиме. Тому бажано в мережі для ведення журналів подій виділяти спеціалізований комп'ютер з жорсткою політикою безпеки.
syslog-ng читає файл з налаштуваннями /etc/syslog-ng/syslog-ng.conf
при завантаженні
або коли він отримує сигнал HUP. При зчитуванні файлу налаштувань всі
журнали закриваються і належним чином відкриваються знов.
Звичайно повідомлення до syslog-ng посилаються через локальний домен Юнікс^uds
(/dev/log
), або на порт 514 UDP (TCP) чи будь-який інший syslog/udp
(або
syslog/tcp
), вказаний у /etc/services
. Повідомлення від ядра отримуються з
/dev/klog
.
Повідомлення, що посилаються до syslog-ng мусять бути одне на стрічку з префіксом
коду пріоритету взятому в <>
. Визначення значень пріоритетів можна знайти в
/usr/include/sys/syslog.h
.
syslog-ng може посилати повідомлення до іншого демона syslog-ng, і коли це робить — виставляє пріоритет у префіксі повідомлення.
Встановлення syslog-ng
Встановлюємо syslog-ng з http://www.balabit.com/products/syslog_ng/. У Gentoo виконуємо:
# emerge app-admin/syslog-ng
Налаштування /etc/syslog-ng/syslog-ng.conf
Маршрутизація повідомлень в syslog-ng здійснюється в три етапи: визначення джерел повідомлень, фільтрація повідомлень, визначення місця запису (пересилання) повідомлень.
Детальний опис структури та опцій syslog-ng.conf можна знайти в syslog-ng.conf(5)
Хороший приклад /etc/syslog-ng/syslog-ng.conf
# Syslog-ng configuration file, compatible with default Debian syslogd
# installation. Originally written by anonymous (I can't find his name)
# Revised, and rewrited by me (SZALAY Attila <sasa@debian.org>)
# Copyright 2005 Gentoo Foundation
# 20060211 rewrited by hse@ukr.net
# First, set some global options.
options { sync (0);
time_reopen (10);
sync (0);
log_fifo_size (1000);
long_hostnames (off);
use_dns (no);
use_fqdn (no);
create_dirs (yes);
dir_owner("root"); dir_group("adm"); dir_perm(0640);
owner("root"); group("adm"); perm(0640);
keep_hostname (yes);
stats(86400);
};
#################################################################################
# Sources
#################################################################################
# This is the default behavior of sysklogd package
# Logs may come from unix stream, but not from another machine.
#
source src { unix-stream("/dev/log");
internal();
};
source dhcp { unix-stream("/chroot/dhcp/dev/log"); };
source kern { file("/proc/kmsg"); };
# If you wish to get logs from remote machine you should uncomment this.
#
#source net { tcp(ip(10.0.0.10) port(514) authentication(on) encrypt(on)); };
#source net { udp(ip(10.0.0.10) port(514)); };
#################################################################################
# Destinations
#################################################################################
# First some standard logfile
#
destination auth { file("/var/log/security/auth.log"); };
destination cron { file("/var/log/cron/cron.log"); };
destination daemon { file("/var/log/daemon/daemon.log"); };
destination dhcp { file("/var/log/dhcp/dhcp.log"); };
destination tftp { file("/var/log/tftp/tftp.log"); };
destination kern { file("/var/log/kernel/kernel.log"); };
destination cups { file("/var/log/cups/cups.log"); };
destination syslog { file("/var/log/syslog/syslog.log"); };
destination user { file("/var/log/user/user.log"); };
destination uucp { file("/var/log/uucp/uucp.log"); };
destination avc { file("/var/log/security/avc.log"); };
destination audit { file("/var/log/security/audit.log"); };
destination pax { file("/var/log/security/pax.log"); };
destination grsec { file("/var/log/security/grsec.log"); };
destination firewall { file("/var/log/security/firewall.log"); };
# This files are the log come from the mail subsystem.
#
destination mail { file("/var/log/mail/mail.log"); };
destination mailinfo { file("/var/log/mail/mail_info.log"); };
destination mailwarn { file("/var/log/mail/mail_warn.log"); };
destination mailerr { file("/var/log/mail/mail_err.log"); };
# Logging for INN news system
#
destination newscrit { file("/var/log/news/news_crit.log"); };
destination newserr { file("/var/log/news/news_err.log"); };
destination newsnotice { file("/var/log/news/news_notice.log"); };
# Some `catch-all' logfiles.
#
destination debug { file("/var/log/debug"); };
destination error { file("/var/log/error"); };
destination messages { file("/var/log/messages"); };
# monitoring logs
#
destination nagios { file("/var/log/monitoring/nagios.log"); };
destination monitoring { file("/var/log/monitoring/monitoring.log"); };
# Debian only
destination ppp { file("/var/log/ppp/ppp.log"); };
# The root's console.
#
destination console { usertty("root"); };
# Virtual console.
#destination console_all { file("/dev/vc/12"); };
# By default messages are logged to tty12...
destination console_all { file("/dev/tty12"); };
#destination console_all { file("/dev/console"); };
# The named pipe /dev/xconsole is for the `xconsole' utility. To use it,
# you must invoke `xconsole' with the `-file' option:
#
# $ xconsole -file /dev/xconsole [...]
#
destination xconsole { pipe("/dev/xconsole"); };
# Send the messages to an other host
#
#destination net { tcp(ip(10.0.0.10) port(514) authentication(on) encrypt(on) log_fifo_size(1000)); };
#destination net { udp("10.0.0.10" port(514)); };
########################################################################
# Filters
########################################################################
# Here's come the filter options. With this rules, we can set which
# message go where.
filter dbg { level(debug); };
filter info { level(info); };
filter notice { level(notice); };
filter warn { level(warn); };
filter err { level(err); };
filter crit { level(crit); };
filter emergency { level(emerg); };
filter debug { level(debug) and not facility(auth, authpriv, news, mail); };
filter error { level(err .. emerg) ; };
filter monitoring { facility(auth, authpriv) and not filter(debug) and match ("START: df pid=") or match ("START: network pid=") or match ("START: sensors pid=") or match ("START: sys pid="); };
filter auth { facility(auth, authpriv) and not filter(debug) and not filter(monitoring); };
filter cron { facility(cron) and not filter(debug); };
filter daemon { facility(daemon) and not filter(debug); };
filter dhcp { facility(daemon) and not filter(debug); };
filter tftp { facility(daemon) and not filter(debug) and match (" tftp "); };
filter cups { facility(lpr) and not filter(debug); };
filter local { facility(local0, local1, local3, local4, local5, local6, local7) andnot filter(debug); };
filter mail { facility(mail) and not filter(debug); };
filter news { facility(news) and not filter(debug); };
filter syslog { facility(syslog) and not filter(debug); };
filter nagios { facility(user) and match("nagios:") and not filter(debug); };
filter user { facility(user) and not filter(debug) and not filter(nagios); };
filter uucp { facility(uucp) and not filter(debug); };
filter cnews { level(notice, err, crit) and facility(news); };
filter avc { match(".*avc: .*"); };
filter audit { match("^audit.*") and not match(".*avc: .*"); };
filter pax { match("^PAX:.*"); };
filter grsec { match("^grsec:.*"); };
filter firewall { facility(kern) and match ("iptables"); };
filter kern { facility(kern) and not filter(firewall) and not filter(avc) and not filter(audit) and not filter(pax) and not filter(grsec); };
filter cother { level(debug, info, notice, warn) or facility(daemon, mail); };
filter failed { match("failed"); };
filter denied { match("denied"); };
filter ppp { facility(local2) and not filter(debug); };
filter console { level(warn .. emerg); };
filter messages { level(info..warn) and not facility(auth, authpriv, mail, news); };
######################################################################
# Log paths
######################################################################
log { source(src); filter(auth); destination(auth); };
log { source(src); filter(cron); destination(cron); };
log { source(src); filter(cups); destination(cups); };
log { source(src); filter(daemon); destination(daemon); };
log { source(src); filter(tftp); destination(tftp); };
log { source(dhcp); destination(dhcp); };
log { source(kern); filter(firewall); destination(firewall); };
log { source(kern); filter(pax); destination(pax); };
log { source(kern); filter(grsec); destination(grsec); };
log { source(kern); filter(audit); destination(audit); };
log { source(kern); filter(avc); destination(avc); };
log { source(kern); filter(kern); destination(kern); };
log { source(src); filter(syslog); destination(syslog); };
log { source(src); filter(user); destination(user); };
log { source(src); filter(uucp); destination(uucp); };
#log { source(src); filter(mail); destination(mail); };
log { source(src); filter(mail); filter(info); destination(mailinfo); };
log { source(src); filter(mail); filter(warn); destination(mailwarn); };
log { source(src); filter(mail); filter(err); destination(mailerr); };
log { source(src); filter(news); filter(crit); destination(newscrit); };
log { source(src); filter(news); filter(err); destination(newserr); };
log { source(src); filter(news); filter(notice); destination(newsnotice); };
log { source(src); filter(nagios); destination(nagios); };
log { source(src); filter(monitoring); destination(monitoring); };
log { source(src); filter(ppp); destination(ppp); };
log { source(src); filter(local); destination(messages); };
log { source(src); filter(debug); destination(debug); };
log { source(src); filter(error); destination(error); };
#log { source(src); filter(cnews); destination(console_all); };
#log { source(src); filter(cother); destination(console_all); };
#log { source(src); filter(console); destination(console_all); destination(xconsole); };
log { source(src); filter(crit); destination(console); };
log { source(src); filter(emergency); destination(console); };
# All messages from all sources send to console:
log { source(src); source(dhcp); source(kern); destination(console_all); };
# For network loging all
#log { source(src); destination(net); };
Опції завантаження в /etc/conf.d/syslog-ng
-C , --chroot= : При старті змінює кореневу файлову систему на вказану директорію (обмеження безпеки).
-d, --debug : Вмикає відлагоджувальний режим. Виводить різні повідомлення на aid і припиняє вивід, коли стає сервісом.
-y, --yydebug : Вмикає відлагоджувальні повідомлення yacc, доступна тільки коли syslog-ng збиравсь з опцією --enable-debug.
-F, --foreground : Не переходить на задній план.
-f , --cfgfile=
: Використовує вказаний файл замість типового файлу з налаштуваннями
/etc/syslog-ng/syslog-ng.conf
.
-g , --group= : Змінює при старті робочу групу процесу.
-p , --pidfile=
: Записує номер свого процесу (PID) у вказаний файл. Зазвичай це
/var/run/syslog-ng.pid
.
-s, --syntax-only
: Тільки перевіряє синтаксис файлу налаштувань, корисно разом з -f
.
-u , --user= : Змінює при старті робочого користувача.
-v, --verbose
: Вмикає багатослівний режим, і не стає сервісом. Друкує менше повідомлень у
порівнянні з -d
.
-V, --version : Виводить номер версії.
Запуск syslog-ng
Для завантаження виконуємо:
# /etc/init.d/syslog-ng
Для автоматичного завантаження при включенні компа у Gentoo виконуємо:
# rc-update -a syslog-ng default
Можливі проблеми та їх подолання
Свої власні логи syslog-ng, з налаштуванням приведеним вище, пише в:
/var/log/syslog/syslog.log
От вони в даному випадку і допоможуть.
Література
Обов'язково організуйте систему ротації журналів: logrotate(8)
PS. Жити потрібно так, щоб потім було цікаво і не соромно читати логи! :-)
--Svyat 23:47, 29 серп 2005 (EEST)
Переклад за значенням терміну — сокет, що доступний лише локально,
з файлової системи.
<http://linux.org.ua/archive/linux@linux.org.ua/msg02944.html>
_isbear_