Используемый материал:
http://www.opennet.ru/docs/RUS/netflow_bsd/http://www.opennet.ru/base/net/traf_fprobe.txt.htmlNetflow предоставляет возможность анализа сетевого трафика на уровне сеансов, делая запись о каждой транзакции TCP/IP.
Удобство данного решения заключаеться в том, что данные полученные с помощью netflow легко обрабатываються и визуализируются. Я предпочел "загнать" из в базу данных. Уровеня их детализации достаточно для ведения статистики о проходящем трафике.
1. Установка сенсораСенсор - демон, который слушает сеть и фиксирует данные сеанса. Сенсор закреплен на интерфейсе и по умолчанию переводит его в promiscuous mode, соответственно для сбора всего проходящего через интерфейс трафика (ну в случае promiscuous не только через интерфейс
). Сенсор "преобразует" сеансы передачи в так называемые flows-ы (от англ. нити) которые в дальнейшем собираються на коллекторе.
В качестве сенсора может быть использовано следующее программное обеспечение:
softflowd - Netflow-сенсор для Linux и FreeBSD
fprobe - NetFlow-сенсор для Linux, базирующийся на libpcap
nProbe - Расширяемый NetFlow-сенсор под Linux/FreeBSD и Windows
Я предпочел поставить fprobe, который базируеться на libpcap для низкоуровневого захвата пакетов. Я использую Gentoo и дальнейшие действия связанные с установкой ПО будут именно для нее (я считаю, что с этим проблемм не возникнет).
Устанавливаем наш сенсор:
emerge -av fprobe
2. Установка коллектораКоллектор NetFlow предназначен для сбора данных, предоставляемых сенсором и сохранения их на диск для дальнейшего хранения и обработки.
В качестве Netflow-коллектора использовался flow-capture, входящий в состав пакета flow-tools. Для дальнейшей работы с базами данных нужно собрать flow-tools с поддержкой последней. Я использую MySQL, в Gentoo сборка выполняеться так:
USE='mysql' emerge -av flow-tools
3. Создание базы данных для дальнейшего хранения статистичесских данныхСоздаем базу данных netflows:
create database netflows
В созданной базе создаем таблицу raw:
CREATE TABLE `raw` (
`unix_secs` int(11) unsigned NOT NULL default '0',
`unix_nsecs` int(11) unsigned NOT NULL default '0',
`sysuptime` int(11) unsigned NOT NULL default '0',
`exaddr` varchar(45) NOT NULL default '0',
`dflows` int(11) unsigned NOT NULL default '0',
`dpkts` int(11) unsigned NOT NULL default '0',
`doctets` int(11) unsigned NOT NULL default '0',
`first` int(11) unsigned NOT NULL default '0',
`last` int(11) unsigned NOT NULL default '0',
`engine_type` tinyint(3) unsigned NOT NULL default '0',
`engine_id` tinyint(3) unsigned NOT NULL default '0',
`srcaddr` varchar(45) NOT NULL default '0',
`dstaddr` varchar(45) NOT NULL default '0',
`nexthop` varchar(45) NOT NULL default '0',
`input` smallint(5) unsigned NOT NULL default '0',
`output` smallint(5) unsigned NOT NULL default '0',
`srcport` smallint(5) unsigned NOT NULL default '0',
`dstport` smallint(5) unsigned NOT NULL default '0',
`prot` tinyint(3) unsigned NOT NULL default '0',
`tos` tinyint(3) unsigned NOT NULL default '0',
`tcp_flags` tinyint(3) unsigned NOT NULL default '0',
`src_mask` tinyint(3) unsigned NOT NULL default '0',
`dst_mask` tinyint(3) unsigned NOT NULL default '0'
) TYPE=MyISAM;
4. Подготовка к запускуСоздаем ротационный скрипт (в одну строчку), назовем его rotate.sh :
#!/bin/sh
/usr/bin/flow-export -f3 -mUNIX_SECS,DOCTETS,SRCADDR,DSTADDR,SRCPORT,DSTPORT -u "user:pass:host:3306:netflows:raw" < $1
где user - пользователь имеющий право на работу с базой данных, pass - пароль, host - адрес узла с сервером баз данных
Созданный скрипт помещаем в любой каталог. У меня пока лежит в /home/slam/src/
Создаем хранилище для данных полученных с коллектора:
mkdir /var/flows
5. Собственно запускЗапускаем сенсор:
/usr/sbin/fprobe -i eth0 127.0.0.1:8818
В данном случае -i eth0 -интерфейс на который мы прикрепляем сенсор, 127.0.0.1:8818 - адрес и порт коллектора.
Запускаем коллектор:
/usr/bin/flow-capture -p /var/run/flow-capture.pid -R /home/slam/src/rotate.sh -n 287 -N 3 -w /var/flows/ -S 10 0/0/8818
Параметр -S указывает размер интервала в минутах, в течение которого flow-capture будет записывать информацию о счетчиках пакетов в файл.
Параметром -R /home/admin/flows/rotate.sh - указывается путь до ротационного скрипта, -S указывает размер интервала в минутах, в течение которого flow-capture будет записывать информацию о счетчиках пакетов в файл, значение 0/0/8818 указывает коллектору слушать на всех локальных IP адресах, принимать данные с любых удаленных хостов, порт 8818. В случае, если вы опасаетесь принимать чужие данне, то жестко задайте адрес сенсора,
-N 3 - уровнь вложения для хранения данных потоков (глубина иерархии каталогов):
-3 YYYY/YYYY-MM/YYYY-MM-DD/flow-file
-2 YYYY-MM/YYYY-MM-DD/flow-file
-1 YYYY-MM-DD/flow-file
0 flow-file
1 YYYY/flow-file
2 YYYY/YYYY-MM/flow-file
3 YYYY/YYYY-MM/YYYY-MM-DD/flow-file
5. Проверка работоспособностиСмотрим содержимое таблицы raw базы netflows:
select srcaddr,dstaddr,doctets,SRCPORT,DSTport from raw;
Через 10 минут после запуска в таблице должны появиться первые записи.
Далее устанавливаем веб-интерфейс с сайта
http://phpal.sourceforge.net/allanbilling для просмотра статистики.
Так же рекомендую ознакомиться с CUFlow, он умеет вычислять самые активные сайты и строит "хит-парад" IP адресов, передавших большее количество трафика в течении определенного промежутка времени, а так же строить графики визиализирующие загрузку канала по периодам.
PS: критика принимаеться