Ivanovo Linux Users Group - Not logged in
Forum Help Search Login
Previous Next Up Topic Администрирование / Работа с сетью / Сбор информации о проходящем трафике (netflow) (28409 hits)
- By slam Date 15.11.07 14:13 Edited 15.11.07 14:16
Используемый материал:
http://www.opennet.ru/docs/RUS/netflow_bsd/
http://www.opennet.ru/base/net/traf_fprobe.txt.html

Netflow предоставляет возможность анализа сетевого трафика на уровне сеансов, делая запись о каждой транзакции 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: критика принимаеться
Parent - By cutter Date 27.11.07 18:25

> Сенсор "преобразует" сеансы передачи в так называемые flows-ы (от англ. нити)


Я бы сказал "потоки" а не "нити" ,-)

А так - замечательно! Дает начальное представление о промышленном подсчете трафика ,-)
Parent - By slam Date 28.11.07 11:27
Принято )
Parent By nologin Date 29.10.08 07:16
Возник вопрос.
В Вашем примере flow-export раз в 10 мин кидает данные в базу mysql
А как он это делает (я то то не совсем понял):
1) затирает таблицу netflows.raw и снова кидает все записи
2) кидает только добавившуюся часть информации за последние 10 мин?
Зараннее спс за ответ
Parent By LOE (Site/forum admin) Date 28.11.07 21:21
Несколько лет работает старый-добрый nacctd
Данные - тоже в базу гонит. Без напрягов и нареканий.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By LOE (Site/forum admin) Date 28.11.07 21:26
В чем заключается _анализ_? По описанию - он данные в базу загоняет и все.
если всякие графики строит CUFlow

Кстати, он умеет записать один сеанс одной строкой в базу? (а не каждый пакет, которых в сеансе могут быть тысячи)
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By G0thic Date 30.11.07 16:46
Сбор сессии - дополнительная нагрузка, причем не прогнозируемая.
Когда кругозор человека сужается к минимуму, он называет это своей точкой зрения.
Parent By LOE (Site/forum admin) Date 30.11.07 19:21 Edited 30.11.07 19:24
Неужели?
Гораздо бОльшую нагрузку будет создавать запихивание 1000 записей в базу, нежели суммирование числа пакетов и байт по признакам и только потом - пихание одной записи в базу. Не забываем, в заголовке пакета есть признак того, что он (пакет) не первый в сессии, есть и закрывающие сессию пакеты.
Не говоря уже о размере базы для хранения всего этого.

Пример, очень грубо расчитываем:
10Мбайт=10485760 байт, 10485760/1500=6991 пакетов, а значит записей в базе
Или - _одна_
Разница есть?
"No! Try not! Do. Or do not. There is no try." -- Yoda
Previous Next Up Topic Администрирование / Работа с сетью / Сбор информации о проходящем трафике (netflow) (28409 hits)

Powered by mwForum 2.12.0 © 1999-2007 Markus Wichitill

Page created in 0.080s with 10 database queries.