MRTG + Snort

Павел Закляков

"Системный администратор" №5(18), май 2004

«Лучше один раз увидеть, чем сто раз услышать» гласит пословица. Многие вещи мы лучше понимаем, представляем и запоминаем, если видели их собственными глазами. При этом не всякое нами увиденное воспринимается одинаково хорошо. Очень сильно на процесс восприятия влияет наглядность. В этой статье будет рассмотрен именно такой вариант отображения данных об интенсивности атак, регистрируемых с помощью Snort. В качестве средства отображения используется MRTG.

Предполагается, что имеется СОА Snort, данные с одного или нескольких сенсоров которой заносятся в БД инцидентов. Необходимо организовать визуальное отображение среднего уровня атак в зависимости от времени. Для отображения удобнее всего использовать штатное средство большинства Linux-систем - MRTG (The Multi Router Traffic Grapher) [1,2 стр. 52-53, 3 стр. 316, 4 стр. 208-216]. Предполагается, что MRTG у вас уже установлен. Рассмотрим его настройку. Конфигурационный файл MRTG обычно называется mrtg.cfg и находится в директории /etc/mrtg.

Предполагается, что имеется СОА Snort, данные с одного или нескольких сенсоров которой заносятся в БД инцидентов. Необходимо организовать визуальное отображение среднего уровня атак в зависимости от времени. Для отображения удобнее всего использовать штатное средство большинства Linux-систем - MRTG (The Multi Router Traffic Grapher) [1,2 стр. 52-53, 3 стр. 316, 4 стр. 208-216]. Предполагается, что MRTG у вас уже установлен. Рассмотрим его настройку. Конфигурационный файл MRTG обычно называется mrtg.cfg и находится в директории /etc/mrtg. Нам необходимо отредактировать или создать заново этот файл, добавив туда следующие строки:

mrtg.cfg
# Рабочая директория mrtg, где создаются поддиректории
# для отчётов, обычно она уже указана WorkDir:
/var/www/html/mrtg
# Выбор языка - вносит в заголовок html-строку
# с CONTENT="text/html; charset=koi8-r" и локализует
# html-файлы создаваемых отчётов
Language: russian
# Внешний файл, который будет являться источником данных
# для mrtg, записывается в обратных кавычках
Target[snort]:'/etc/mrtg/snort_stat.pl'
#Максимальное число атак в единицу времени
# Значения выше игнорируются, нужно больше для наглядности
MaxBytes[snort]: 2000
AbsMax[snort]: 2000
# Заголовок окна браузера, тег в html<br /> Title[snort]: Статистика атак (данные Snort)<br /> # Заголовок страницы с графиками<br /> PageTop[snort]: <Н1>Статистика атак (данные Snort)<br /> # Поддиректория в WorkDir, где будут создаваться отчёты<br /> Directory[snort]: snort<br /> # Размер графиков по ширине в точках<br /> XSize[snort] : 600<br /> # Размер графиков по высоте в точках<br /> YSize[snort] : 160<br /> # Подпись графиков по оси ординат<br /> YLegend[snort]: Attacks per minute<br /> # Подпись легенды, пояснение, что именно за график<br /> # нарисован таким-то цветом.(Необходимо, чтобы не<br /> # запутаться, когда графиков несколько)<br /> Legend1[snort]: Число атак в минуту<br /> # Убрать лишнюю информацию<br /> LegendI[snort]:   LegendO[snort]:<br /> # Задать направление рисования графиков и что значения,<br /> # выдаваемые программой, указанной в Target, являются<br /> #абсолютными<br /> Options[snort]: absolute, growright<br /> # Подпись единиц измерения атак<br /> ShortLegend[snort]: атак/мин

После того как внесена правка в конфигурационный файл mrtg.cfg, необходимо создать файл, на который мы сделали ссылку в поле Target[snort]: /etc/mrtg/snort_stat.pl. Этот файл будет запускаться по запросу mrtg, и он должен подключаться к БД snort и подсчитывать число атак, например за последние 5 минут, после чего выдавать это значение в требуемом mrtg формате. Реализовать данную идею возможно с помощью следующего SQL-запроса:

SELECT count(timestamp) FROM event

WHERE unix_timestamp(now())-unix_timestamp(timestamp)<300

который фактически является основным ядром нижеследующего perl-скрипта, который лишь осуществляет автоматизацию процесса подключения и работы с БД и выводит результат в нужном формате.

Перед созданием скрипта убедимся, что данный запрос работает правильно, подключившись к БД из консоли

от имени пользователя snort. Выполним подключение командой:

# mysql -u snort -p

введя после соответствующий пароль, если он был задан. Далее выберем БД snort командой:

mysql> USE snort;

и выполним вышеописанный SQL-запрос. В результате на экране у вас может быть примерно следующее:

Если БД с инцидентами у вас достаточно большая, то запрос может выполняться несколько десятков секунд.

Убедившись, что число строк в таблице event, время которых лежит в интервале последних 300 секунд, считается правильно, создадим файл snort_stat.pl в директории /etc/mrtg, который будет выполнять все проделанные нами действия в автоматическом режиме. Подробнее о создании подобных скриптов можно прочитать в [7, 8].