Давно хотел освятить эту тему. Прошло достаточно времени, чтобы можно было описать не только процедуру сбора, но те подводные камни, с которыми мне пришлось столкнуться. Конечно не все удалось решить с помощью поисковика, но что-то пришло с опытом, а что-то методом проб и ошибок.
Для чего нужен сбор логов
Для выполнения стандартов и рекомендаций, таких как СТО БР(6.4.4), 382П(2.9.2), PCI DSS (10.5) и т.д.
Задачи, которые можно решить:
- нет необходимости просматривать логи на разных информационных системах, каждый раз проходя процедуру авторизации;
- резервный источник журналов событий, когда оригинал журнала системы вышел из строя или не доступен
- построение системы корреляции событий, когда имеется возможность анализировать события из разных систем в единицу времени или по событию
Что такое SIEM - Управление событиями ИБ (Security Information and Event Management – SIEM). Система обеспечения информационной безопасности предприятия может включать в себя множество компонентов, это и антивирусные продукты, и сетевые системы предотвращения вторжений, межсетевые экраны, системы контроля доступа к внешним устройствам и портам, системы предотвращения утечек конфиденциальной информации, впрочем и операционная система тоже содержит в себе не один встроенный механизм обеспечения ИБ. Это не полный список средств ИБ, множество разнообразных программно аппаратных комплексов, находятся в постоянной активности "событие - действие - реакция"... И работают в полной, или частичной изоляции друг от друга. Увы, но такая система не дает возможности оценить ситуацию в целом - это не самая эффективная система.
Вернемся к журналированию. Syslog-ng очень гибкая система, которая позволяет построить протоколирование работы программ, ОС как удобно администратору.
Можно определить какие события будут сохраняться в отдельном файле, а какие будут пересылаться на удаленный сервер, а какие и вовсе не будут протоколироваться.
Установку syslog-ng я пропущу, процедура очень простая. А к настройке необходимо отнестись более тщательно.
Правила
source
Данное правило описывает источник. Синтаксис этого правила таков:
source <identifier> { source-driver(params); source-driver(params); ... };
- internal()- это логи самого syslog-ng
- file() это специальный файл (устройство, спецфайлы), примеры: /proc/kmsg, /dev/kmsg. обычный
файл вроде my.log использовать нельзя, для этого лучше использовать,
что нибудь вроде tail -f my.log | logger -p local4.info
- unix-stream() для AF_UNIX socket'ов (сокеты в файловом пространстве имён) различие между ними в том, что dgram применяется в BSD и использует семантику SOCK_DGRAM
- program()для специальных программ и чтения сообщений
- tcp(), tcp6() для прослушивания определенных портов для входящих сообщений используя BSD syslog протокол поверх IPv4/IPv6
Пример
source s_src { unix-dgram("/dev/log"); internal();
file("/proc/kmsg" program_override("kernel"));};
filter
Фильтры описываются так:
filter <identifier> { <filter_type>("<filter_expression>"); };
- facility(текст) - такой вариант grep, если встречается строка, она выбирается фильтром, допускается вложенность
- level(приоритет) - выборка по приоритетам (emerg/warning/debug и т.д.)
- program(имя) - grep по имени программы, которая шлёт логи (пример: sshd)
- host(имя_хоста) - grep по имени хоста
- match(regexp) - регулярное выражение
- filter - т.е. вложенность фильтров в фильтры
- netmask(ip/mask) - grep по ip или маске
- message (текст) - grep по тексту сообщения
Например,
filter f_some_ignore { message("MARK --") or message("(CRON) info (No MTA installed, discarding output)")};
Название фильтра f_some_ignore
Поиск сообщений, где встречается текст "MARK --" или (CRON) info (No MTA installed, discarding output)"
Стоит также обратить внимание, что допускаются операторы сравнения Числовой оператор Строковой оператор Описание
== eq Равно
!= ne Не Равно
> gt Больше
< lt Меньше
>= ge Больше или равно
=< le Меньше или равно
Или логические операторы
and, or, not
Что позволяет сделать фильтр с индивидуальными условиями и вложениями!
destination
Пункт назначения. Описывается как и прочие правила:
destination <identifier> { destination-driver(params); destination-driver(params); ... };
Например,
destination messages { file("/var/log/foo.log"); };
запись в файл в /var/log/foo.log
или
destination remote {udp("remote.site.com" port(514));};
запись на удаленный хост remote.site.com по протоколу udp и порту 514
переменных destination можно определить сколько необходимо!
не стоит забывать, что также можно определить доступ к файлу лога
destination d_logs {
file( "/var/log/syslog-ng/logs.txt"
owner("root")
group("root")
perm(0777)); };
log
Самое главное правило.
По синтаксису:
log { source(s1); source(s2); ...
filter(f1); filter(f2); ...
destination(d1); destination(d2); ...
flags(flag1[, flag2...]); };
Например,
log { source(s_src); filter(f_some_ignore); destination(messages); };
Из источника s_src, сообщения, которые соответствуют фильтру f_some_ignore запишутся в файл messages
в качестве флага я использовал только flags(final), т.е. дальнейшая запись прекращается.
Это необходимо, когда определенные события не будут писаться. И можно определить, когда необходимо писать локально, а на удаленный сервер отправлять не нужно.
log { source(s_src); filter(f_some_ignore); flags(final); };
в данном примере, сообщения из источника s_src, которые соответствуют фильтру f_some_ignore не будут записываться
Организация сервера сбора логов
Для организации необходимо:
на клиентах настроить отправку сообщений на удаленный сервер
на сервере настроить прием сообщений
Настройка на клиентах:
destination remote {udp("remote.site.com" port(514));};
log { source(s_src); filter(f_some_ignore); destination(remote); };
Настройка на сервере:
source from_all { udp (ip("remote.site.com") port(514)); };
destination to_all { file ( "/var/log/HOSTS/$HOST/log" perm(0640) dir_perm(0755) create_dirs(yes)); };
log { source(from_all); destination(to_all); };
допускается использовать макросы
Даты, времени, день недели, месяц, день и т.д.
К сожалению, для некоторых могу сказать, что нет документации на русском языке.
Но на английском она доступна на сайте разработчика www.balabit.com
Она очень подробная, и с примерами.