FlowView. Плагин который показывает погоду, но предназначенный для анализа NetFlow. Тем не менее он у меня установлен. Общую картину он создать может, поэтому начнём. Для настройки в первую очередь создаём директорию, куда будет падать flow. У меня всё льётся в /var/netflow/flows/completed. Создаём директорию:
mkdir -p /var/netflow/flows/completed/
Для того, что бы плагин заработал нужно установить библиотеку FlowTools:
apt-get install flow-tools
И вот тут у нас есть возможность ощутить всю корявость плагина. Часть скрипта которая отвечает за создание таблицы в БД имела тип MEMORY, что приводило к потере данных после рестарта MySQL или перезагрузке сервера.
CREATE TABLE plugin_flowview_dnscache (
ip varchar(32) NOT NULL default '',
host varchar(255) NOT NULL default '',
`time` int(20) NOT NULL default '0',
KEY ip (ip)
) TYPE=MEMORY;
CREATE TABLE plugin_flowview_devices (
id int(12) NOT NULL auto_increment,
name varchar(64) NOT NULL,
folder varchar(64) NOT NULL,
allowfrom varchar(32) NOT NULL default '0',
port int(12) NOT NULL,
nesting varchar(4) NOT NULL default '-1',
version varchar(12) NOT NULL default '5',
rotation int(12) NOT NULL default '1439',
expire int(3) NOT NULL default '7',
compression int(1) NOT NULL default '0',
PRIMARY KEY (id),
KEY folder (folder)
) ENGINE=MyISAM;
INSERT INTO plugin_flowview_devices (name, folder, port) VALUES ('Default', 'Router', 2055);
CREATE TABLE `plugin_flowview_queries` (
`id` int(12) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`device` varchar(32) NOT NULL,
`startdate` varchar(32) NOT NULL,
`starttime` varchar(32) NOT NULL,
`enddate` varchar(32) NOT NULL,
`endtime` varchar(32) NOT NULL,
`tosfields` varchar(32) NOT NULL,
`tcpflags` varchar(32) NOT NULL,
`protocols` varchar(8) NOT NULL,
`sourceip` varchar(255) NOT NULL,
`sourceport` varchar(255) NOT NULL,
`sourceinterface` varchar(64) NOT NULL,
`sourceas` varchar(64) NOT NULL,
`destip` varchar(255) NOT NULL,
`destport` varchar(255) NOT NULL,
`destinterface` varchar(64) NOT NULL,
`destas` varchar(64) NOT NULL,
`statistics` int(3) NOT NULL,
`printed` int(3) NOT NULL,
`includeif` int(2) NOT NULL,
`sortfield` int(2) NOT NULL,
`cutofflines` int(4) NOT NULL,
`cutoffoctets` varchar(8) NOT NULL,
`resolve` varchar(2) NOT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=MyISAM;
CREATE TABLE `plugin_flowview_schedules` (
`id` int(12) NOT NULL auto_increment,
`enabled` varchar(3) NOT NULL default 'on',
`sendinterval` int(20) NOT NULL,
`lastsent` int(20) NOT NULL,
`start` datetime NOT NULL,
`email` text NOT NULL,
`savedquery` int(12) NOT NULL,
PRIMARY KEY (`id`),
KEY `savedquery` (`savedquery`)
) ENGINE=MyISAM;
По большому счёту до установки плагина, нужно было изменить тип на ENGINE=MyISAM, но поскольку я этого не сделал, пришлось менять это уже в самой БД, через PHPmyAdmin.
Первый косяк удалён. Плывём дальше - Console -> Cacti Settings во вкладку Misc:
Тут меняем только Flows Directory и DNS Server. Обращу внимание на то, что ВСЕ параметры должны быть заполнены правильно. Без этого работать плагин не будет. Сам лично столкнулся с не прописанным DNS Server. Процесс flow-tools не запускался.
Следующий шаг - это копирование скрипта из директории с плагином в /etc/init.d/
cp /usr/share/cacti/site/plugins/flowview/flow-capture /etc/init.d/
Если Вы скачивали архив с плагином у меня, то исправлять в этом скрипте ничего не нужно. Если брали на сайте CACTI, то файл /usr/share/cacti/site/plugins/flowview/flow-capture (/etc/init.d/ flow-capture) нужно доработать. Выложу готовый вариант с исправлениями. Весь ошибочный код не удалён, а закомментирован:
<?php
/*
# description: Start Flow-Capture
# chkconfig: 2345 95 00
*/
$cacti_base = '/usr/share/cacti/site';
include_once($cacti_base . '/include/global.php');
$tools_path = read_config_option("path_flowtools");
if (isset($_SERVER['argv'][1])) {
switch (strtolower($_SERVER['argv'][1])) {
case 'start':
start();
break;
case 'stop':
stop();
break;
case 'restart':
restart();
break;
default:
echo "Usage: /etc/init.d/flow-capture {start|stop|restart}\n";
break;
}
}
function start() {
global $tools_path, $cacti_base;;
echo "NOTE: Starting Flow Tools\n";
$devices = db_fetch_assoc("SELECT * FROM plugin_flowview_devices");
if (!empty($devices)) {
$path = db_fetch_cell("SELECT value FROM `settings` WHERE name = 'path_flows_dir'");
if ($path == '')
break;
if (substr($path, -1) == '/') {
$path = substr($path, 0, -1);
}
foreach ($devices as $device) {
$port = $device['port'];
$folder = $device['folder'];
$nest = $device['nesting'];
$v = $device['version'];
$from = $device['allowfrom'];
$comp = $device['compression'];
$rotate = $device['rotation'];
$expire = $device['expire'] * ($rotate + 1);
if (!is_dir("$path/$folder")) {
echo "NOTE: Making directory '$path/$folder'\n";
mkdir("$path/$folder");
}
if (is_dir("$path/$folder")) {
# echo "NOTE: Launching flow-capture as '$tools_path/flow-capture -w $path/$folder 0/$from/$port -S5 -V$v -z $comp -n $rotate -e $expire -N $nest'\n";
# shell_exec($tools_path . "/flow-capture -w $path/$folder 0/$from/$port -S5 -V$v -z $comp -n $rotate -e $expire -N $nest");
echo "NOTE: Launching flow-capture as '$tools_path/flow-capture -S5 -V$v -z $comp -n $rotate -e $expire -N $nest -w $path/$folder 0/$from/$port'\n";
shell_exec($tools_path . "/flow-capture -S5 -V$v -z $comp -n $rotate -e $expire -N $nest -w $path/$folder 0/$from/$port ");
}
}
}else{
echo "WARNING: No flows configured\n";
}
}
function stop() {
global $tools_path, $cacti_base;;
echo "NOTE: Stopping Flow Tools\n";
$devices = db_fetch_assoc("SELECT * FROM plugin_flowview_devices");
if (!empty($devices)) {
# shell_exec('killall -9 ' . $tools_path . '/flow-capture');
shell_exec('killall -9 flow-capture');
}
}
function restart() {
stop();
start();
}
Дальше переходим к конфигурации самой библиотеки flow-tools:
nano /etc/flow-tools/flow-capture.conf
Для каждого устройства с которого снимается netflow нужно добавлять свою строку конфигурации.
Суть параметров в моём примере -w /var/netflow/flows/completed/zentyal -n 275 -N 3 0/192.168.50.1/2255
-w - куда пишем,
-n - количество ротаций файлов с записями о соединениях в сутки,
-N - структура директорий которая будет создаваться при записи файлов с соединениями. В моём случае YYYY/YYYY-MM/YYYY-MM-DD/flow-file.
Вроде бы всё... Идём в
Пишем имя устройства, директорию в /var/netflow/flows/completed/ в которой создастся папка с датой и flow-файлом, IP адрес устройства, порт на котором принимается netflow, формат вложенных папок с датами, уровень сжатия файлов, как часто создавать flow-файл и за какой период хранить flow-файлы. Сохраняем. Если Вы видите такую картину:
я про кавычки в которые взяты некоторые параметры, то удалить их можно в БД.
Как-то в процессе изучения установки этого плагина у меня получалось сделать так, что бы устройства создавались без кавычек, но я этого не запомнил. Если кто знает, напишите в коментариях. Осталось только запустить скрипт, который создаст соответствующие директории и начнёт принимать netflow.
/etc/init.d/flow-capture start
В идеале должны получить сообщение:
NOTE: Starting Flow Tools
NOTE: Launching flow-capture as '/usr/bin/flow-capture -S5 -V5 -z 0 -n 1439 -e 525600 -N -1 -w /var/netflow/flows/completed/zentyal 0/192.168.50.1/2255'
В этом случае можно смело идти в директорию в netflow и проверить наличие flow-файлов. Если файлы есть, то можно идти:
В этом разделе выбираем устройство, протоколы, адреса источников и назначения и др. параметры и нажимаем View. Результат: