Сбор статистики по TCP/IP на базе NeTraMet

Матыцын Денис ( gdenis@aport.ru )

v 1.9, 12 июля 2002 года


Данный документ описывает схему сбора статистики по траффику TCP/IP на базе *nix и пакета NeTraMet. Описание весьма поверхностное ибо не призвано заменить документацию, а лишь помочь запустить и оценить комплекс. Я думаю, что мои решения подойдут почти в любом случае с минимальной правкой.

На данный момент документ неполон - любые комментарии и дополнения принимаются.


Оглавление

Введение

Преимущества NeTraMet

Недостатки NeTraMet

Описание комплекса NeTraMet

Структура сети

Пояснение к структуре сети

Конфигурация маршрутизаторов Cisco

Правила NeTraMet

Описание атрибутов

Атрибуты IP

Атрибуты предоставляемые NeTraMet

Компиляция правил

Быстрый запуск сборщика NeTraMet

Ключи запуска NeTraMet

Быстрый запуск сборщика NetFlowMet

Ключи запуска NetFlowMet

Быстрый запуск менеджера NeMaC

Ключи запуска NeMaC

Журнал сетевых потоков

Журнал работы NeMaC

Хранение журналов в БД

Журнал сетевых потоков

Журнал работы NeMaC

Заключение

Ссылки

Почитать

Загрузить

Предложения и дополнения

Благодарности

Условия распространения


Введение

Я столкнулся с проблемой подсчета траффика по IP адресам в своей сети. Причем, кроме количества необходимо было иметь статистику по типу траффика: ICMP, UDP, TCP и наконец по сервисам: SMTP, WWW, FTP... Также должна быть возможность подробного регистрирования траффика для, так сказать, проблемных ситуаций. Инструмент должен был быть универсальным и производительным (расчетная нагрузка 10 Gb в сутки). В результате долгих поисков был найден NeTraMet на котором сейчас все и работает. Проблемы с которыми я столкнулся:

  1. Весьма непростой для понимания конфигурационный файл.
  2. Неудовлетворительный обработчик журналов.
  3. Отсутствие HowTo на оную тему с описанием всего алгоритма сбора и обработки статистики.

На эти вопросы я и постараюсь ответить в этом HowTo и в следующем посвященном анализу журналов NeTraMet.

Преимущества NeTraMet

Недостатки NeTraMet

Кроме упомянутых проблем хочется отметить:

Описание комплекса NeTraMet

Комплекс состоит из:

Структура сети

Пояснение к структуре сети

  1. Адреса 63.43.x.x - реальные IP адреса. Все клиенты работают с реальными адресами - никакого НАТа, маскарада или прочего (себе проще).
  2. Адреса 10.0.0.0/24 - приватные адреса для внутрисетевого обмена. Доступ этих адресов через сервер MANAGER запрещен. Адреса клиентом выдаются по DHCP для уменьшения нагрузки на службу поддержки.
  3. GW - Шлюз доступа в Интернет.
  4. SP - Сервер сетевых приложений. На нем находится весь публичный сетевой софт (ДНС, новости, веб, сервер времени и пр). Каждый сервис на отдельном IP адресе для упрощения анализа статистики и вообще так кашерно (как говорит один мой приятель).
  5. METER - сервер-сборщик статистики с тремя сервисами: ntpd, sshd и NeTraMet.

Софт: Я использую на METER FreeBSD 4.5 по, так сказать, субъективным причинам. На нем установлен комплекс NeTraMet и запущен сборщик пакетов NeTraMet, программное обеспечение для удаленного управления OpenSSH и сервер точного времени xntp. Никаких других приложений на нем быть не должно, для исключения атак типа DoS или банального взлома. Сервер должен быть доступен по сети только с MANAGER. Остальные обращения должны блокироваться во избежания опять же взлома.

Железо: Зависит от нагрузки на сеть. Обязательно должна быть очень хороший сетевой адаптер - я использую адаптеры фирмы 3com серия 980. Памяти не менее 32 Мбайт, процессор Pentium. Диска может не быть вовсе и загружаться по сети, любая механика сильно снижает отказоустойчивость системы. Обязательно должны быть дополнительные вентиляторы на всем что греется. Рекомендации по опциям запуска NeTraMet даны ниже исходя из этих минимальных требований.

  1. MANAGER - Сервер управления доступом в Интернет. На нем должен быть NeMaC - менеджер сборщика пакетов. В моем случае на нем работают также:

Доступ из Интернет к серверу должен быть запрещен.

  1. Сетевое оборудование. Не экономьте. Коммутатор должен быть управляемый, например, 3com SuperStack II Switch 1100, Compex SXP1224WM-A или Allied Telesyn AT-3716XL.

Сетевые адаптеры одного типа, рекомендую:

  1. Клиенты:

Внимание! Чтобы NeTraMet собирал статистику нужно чтоб траффик попадал на его сетевую карту - именно поэтому в сети используется концентратор.

Конфигурация маршрутизаторов Cisco

На самом деле я не большой спец по оборудованию Cisco, так что читайте этот раздел с некоторым скептицизмом :-)

Заходим на Кису, переходим в режим конфигурирования:

c2620-co>enable
Password:
# conf term
Enter configuration commands, one per line. End with CNTL/Z.
! Включаем CEF, как сказано в доке это "усовершенствованная технология IP коммутации 3-го уровня"
c2620-co(config)# ip cef
c2620-co(config)# ip flow-cache feature-accelerate
! Количество потоков в кэше Киски
c2620-co(config)# ip flow-cache entries 10000
! Для необходимых интерфейсов включаем потоковую коммутацию
c2620-co(config)# interface FastEthernet0/0
c2620-co(config-if)# ip route-cache flow
c2620-co(config-if)#exit
c2620-co(config)# interface Serial0/0
c2620-co(config-if)# ip route-cache flow
c2620-co(config-if)#exit
! Интерфейс-источник с которого будут передаваться потоки на сборщик NetFlowMet
c2620-co(config)# ip flow-export source FastEthernet0/0
! Версия NetFlow, NetFlowMet понимает не выше пятой
c2620-co(config)# ip flow-export version 5
! Куда отсылать сетевые потоки - машина с запущенным NetFlowMet на порту 9996
c2620-co(config)# ip flow-export destination IP_ADDRESS_NETFLOWMET 9996
c2620-co(config)# exit
! Перезагружаем Киску
c2620-co# reload

Все, теперь Киса будет отсылать на машину с NetFlowMet статистику, проверяем с помощью tcpdump так ли это.

Правила NeTraMet

Итак, вот и они:


# short.3.srl is licensed under the GNU General Public License version 2.
# Copyright 2002 by Matytsin Denis AKA gdenis
# Версия 3.1 от 12 июля 2002 года
#
# Наши сети
define net = (63.43.3.0/27,63.43.4.0/24,10.0.0.0/27);
# Интересуемые серверные порты, не рекомендую задавать порты выше 1024
define srv = (53,161,20,21,22,23,69,80,110,25,143,443,119,139,123);
# IP по которым ведется полнейшая статистика. Например, проблемные клиенты.
define watch=(127.0.0.1/32);
# Интересует только IP. Остальное по боку.
IF SourcePeerType == IP SAVE ;
ELSE IGNORE;

# Инициализация служебных значений

# Тип получателя и отправителя - 1 - наш или 0 - нет
store DestClass := 0;
store SourceClass := 0;
# Тип порта получателя и отправителя - 1 - серверный или 0 - нет
store SourceKind := 0;
store DestKind := 0;
# Тип сетевого потока, 3 - внутренний, 1 - внешний, 9 - странный, 5 - отслеживаемый
store FlowKind := 0;

# Если порт источника серверный, то устанавливает SourceKind в 1
IF SourceTransAddress == srv {
store SourceKind := 1;
}
# Тоже самое для порта получателя
IF DestTransAddress == srv {
store DestKind := 1;
}
# Упорядочиваем сетевые потоки, если у источника серверный порт,
# то меняем местами источник и получателя
IF SourceKind == 1 && DestKind == 0 {
NOMATCH;
}
# Если адрес источника наш, то присваиваем SourceClass значение 1
IF SourcePeerAddress == net {
store SourceClass := 1;
}
# Тоже самое для получателя
IF DestPeerAddress == net {
store DestClass := 1;
}
# Опять упорядочиваем потоки. Если получатель наш и порты неизвестны,
# то меняем местами источник и получателя. Чтоб адрес из нашей сети стал источником.
IF SourceClass == 0 && DestClass == 1 && SourceKind == 0 && DestKind == 0 {
NOMATCH;
}
# Тоже самое для ситуации когда оба порта серверные.
IF SourceClass == 0 && DestClass == 1 && SourceKind == 1 && DestKind == 1 {
NOMATCH;
}

# Все приведено в должный порядок - начинаем обработку потока

# Если источник наш, а получатель чужой
IF SourceClass == 1 && DestClass == 0 {

# Сохраняем порты если они серверные для источника и получателя
IF SourceKind == 1 { SAVE SourceTransAddress; }
IF DestKind == 1 { SAVE DestTransAddress; }
# Сохраняем информацию о том что потом внешний
store FlowKind := 1;
# Сохраняем наш адрес с которого было установлено соединение
SAVE SourcePeerAddress;
# Сохраняем тип потока: UDP, TCP, ICMP
SAVE SourceTransType;
# Проверяем не нужно ли следить за адресом
IF SourcePeerAddress == watch {
# Если нужно следить сохраняем и получателя
# В некоторых случаях (мне неизвестных) нужно сохранить порт
# тогда нужно добавить сюда еще одну строку:
# SAVE DestTransAddress;
SAVE DestPeerAddress;
# Сохраняем информацию о том что потом отслеживаемый
store FlowKind := 5;
}
}
# Если источник чужой, а получатель наш, то ситуация полностью аналогична предыдущей
IF SourceClass == 0 && DestClass == 1 {

IF SourceKind == 1 { SAVE SourceTransAddress; }
IF DestKind == 1 { SAVE DestTransAddress; }

store FlowKind := 1;
SAVE DestPeerAddress;
SAVE SourceTransType;

IF DestPeerAddress == watch {
SAVE SourcePeerAddress;
store FlowKind := 5;
}
}
# Внутренний траффик - и источник и получатель наши
IF DestClass == 1 && SourceClass == 1 {

# Сохраняем порты если серверные
IF SourceKind == 1 { SAVE SourceTransAddress; }
IF DestKind == 1 { SAVE DestTransAddress; }
# Сохраняем и источник и получателя
SAVE SourcePeerAddress;
SAVE DestPeerAddress;
# Сохраняем тип потока: UDP, TCP, ICMP
SAVE SourceTransType;
store FlowKind := 3;
}
# Неопознанный траффик - на случай ошибки маршрутизаторов
IF DestClass == 0 && SourceClass == 0 {

# Сохраняем абсолютно все для разбирательства
SAVE SourcePeerAddress;
SAVE DestPeerAddress;
SAVE SourceTransAddress;
SAVE DestTransAddress;
SAVE SourceTransType;
# Определяем потом как неопознанный
store FlowKind := 9;
}
COUNT;
# Формат вывода в журнал. Расшифровка дана в "Описание атрибутов".
FORMAT
sourcepeeraddress destpeeraddress tooctets fromoctets topdus frompdus
sourcetransaddress desttransaddress sourcetranstype flowkind flowindex
firsttime lasttime flowruleset;
# Выводить статистику
STATISTICS;
# Версия netflow - 5
SET 5;


Тарбалл с реальными примерами

Описание атрибутов

Атрибуты IP:

SourcePeerType - тип траффика: IP или что-либо иное

SourcePeerAddress, DestPeerAddress - IP адрес источника сетевого потока. Источником считается тот IP с которого шел первый пакет зарегистрированный сборщиком NeTraMet. Это не всегда клиент :-)

SourceTransType - протокол IP: 1 = ICMP, 17 = UDP, 6 = TCP, 18 = OSPF ...

SourceTransAddress, DestTransAddress - для TCP и UDP траффика, эти поля содержат порты источника и получателя пакетов: 20 = FTP-DATA, 21 = FTP, 80 = WWW, 23 = TELNET, 119 = NNTP, 25 = SMTP, 123 = NTP, 53 = DOMAIN, 161 = SNMP ...

Фрагментированные пакеты обрабатываются несколько иначе, т.к. только первый пакет содержит полноценный заголовок, у остальных фрагментов SourceTransType и DestTransType = 0.

Для ICMP пакетов поле SourceTransAddress содержит тип ICMP, а DestTransAddress - код ICMP: 0 = echo reply, 5 = redirect, 3 = destination unreachable, 8 = echo request.

Атрибуты предоставляемые NeTraMet:

SourceInterface, DestInterface - интерфейсы cборщика NeTraMet. Первый - 1, второй - 2 и тд.

SourceClass, DestClass, FlowClass, SourceKind, DestKind, FlowKind - пользовательские атрибуты.

В моем случае:

SourceClass, DestClass:1 - IP из наших сетей, 0 - IP не входит в наши сети.

FlowKind: 1 - траффик из или в Интернет, 3 - внутренний траффик между нашими сетями, 5 - траффик из или в Интернет для отслеживаемых IP адресов или сетей, 9 - неопознанный траффик.

FlowIndex - индекс сетевого потока в сборщике пакетов NeTraMet.

FlowRuleSet - номер набора правил.

ToOctets, FromOctets - количество байт, "to" - от источника к получателю (source to destination), "from" - от получателя к источнику.

ToPDUs, FromPDUs - количество пакетов, "to" - от источника к получателю (source to destination), "from" - от получателя к источнику.

FirstTime - время регистрации первого случая сетевой активности в тиках от старта сборщика (тик - 1/1000 секунды).

LastTime - время последнего изменения счетчиков сетевого потока.

Внимание! Счетчики пакетов и траффика коммулятивные. Каждый раз когда приходит пакет для имеющегося потока счетчик траффика увеличиваются на размер пакета, увеличивается счетчик пакетов и изменяется аттрибут LastTime на текущее время от запуска сборщика.

Компиляция правил

Сохраняем приведенный выше конфиг в файл типа /root/ntm.sh/short.3.srl и компилируем:

# cd /root/ntm.sh/
# srl short.3.srl

Файл на выходе short.3.rules и есть правила для сборщика пакетов, этот файл указывается в опции "-r" при запуске NeMaC на MANAGER.

# ls
short.3.rules short.3.srl

Тарбалл с реальными примерами

Быстрый запуск сборщика NeTraMet

Для FreeBSD:

Сценарий запуска на METER.

# cat /usr/local/etc/rc.d/netramet.sh
/usr/local/bin/NeTraMet \
-i network_interface \
-l \
-m 614 \
-r password_for_read \
-w password_for_write_and_read \
-f 60000 \
-D > /dev/null 2>&1
echo " NeTraMet"

NeTraMet. Для Linux:

Сохраняем приведенную выше команду запуска NeTraMet в файл /root/ntm.sh/netramet.sh. Добавляем вызов этого сценарий в конец /etc/rc.d/rc.local, для автозапуска NeTraMet при старте системы:

/root/ntm.sh/netramet.sh

Тарбалл с реальными примерами

Ключи запуска NeTraMet

"-i network_interface" - сетевой интерфейс для сбора сетевых пакетов, может быть: eth0,eth2, xl0 или что-нибудь подобное :-)

"-l" - использовать размер пакета из заголовка, а не аппаратный размер, я так понимаю размер на уровне Ethernet.

"-m 614" - UDP порт на котором будет общаться NeTraMet c NeMaC.

"-r password_for_read" - пароль с правами чтения.

"-w password_for_write_and_read" - пароль на чтение-запись.

"-f 60000" - максимальное количество сетевых потоков в NeTraMet. Чем больше клиентов, траффика и степень детализации статистики тем больше сетевых потоков. Не ставьте слишком много, а то машина помрет от свопа.

Быстрый запуск сборщика NetFlowMet

Команда запуска NetFlowMet:

# cat /root/ntm.sh/netflowmet.sh
/usr/bin/NetFlowMet \
-i 9996 \
-m 9990 \
-w password_for_write_and_read \
-f 10000 \
-b 20000 \
-t 40000 \
-v 3000 \
-e 600 \
-D

Cохраняем команду запуска NetFlowMet в файл /root/ntm.sh/netflowmet.sh и если необходимо добавляем в конец /etc/rc.d/rc.local, для автозапуска сборщика NetFlowMet при старте системы:

/root/ntm.sh/netflowmet.sh

Тарбалл с реальными примерами

Ключи запуска NetFlowMet

"-i 9996" - порт для приёма потоков с Киски.

"-m 9990" - порт для подключения менеджера NeMaC.

"-w password_for_write_and_read" - пароль на чтение-запись.

"-f 10000" - захватывать памяти при запуске на 10000 потоков.

Далее идут непонятные для меня параметры:

"-b 20000" - цитирую инструкцию: "stream data blocks".

"-t 40000" - цитирую инструкцию: "IP streams".

"-v 3000" - цитирую инструкцию: "distributions".

"-e 600" - цитирую инструкцию: "distrib events".

"-D" - запустить как демон.

Быстрый запуск менеджера NeMaC

NeMaC. Запускаем на MANAGER. Сценарий запуска:

# cat /root/ntm.sh/nemac.short.sh
DATER=`date +%Y%m%d%H%M%S`
cd /var/ntm.log
/usr/bin/NeMaC \
-k 120 \
-F /var/ntm.log/$DATER.flows \
-a 300 \
-b /usr/share/NeTraMet/mibs/mib.txt \
-m 614 \
-c 900 \
-p \
-D \
-L /var/ntm.log/$DATER.nemac \
-r /root/ntm.sh/short.3.rules \
ip_adress_METER password_for_write_and_read

Добавляем вызов этого сценарий в конец /etc/rc.d/rc.local, для автозапуска NeMaC при старте системы:

/root/ntm.sh/nemac.short.sh

Каждую ночь я обнуляю весь комплекс для окончательной обработки журналов сценарием:

# cat /etc/cron.daily/ntm_starter.sh
/usr/bin/killall NeMaC
/bin/mv /var/ntm.log/* /var/ntm.log.toload
/root/ntm.sh/nemac.short.sh

Внимание! Во время переноса статистики траффик не собирается. Лучше делать в рамках одной файловой системы (пара секунд - ерунда).

Тарбалл с реальными примерами

Ключи запуска NeMaC

"-k 120" - каждые 120 секунда NeMaC будет проверять не перезагрузился ли NeTraMet. Загружает правила если NeTraMet перезапускался.

"-F /var/ntm.log/$DATER.flows" - суда писать статистику.

"-a 300" - непомню что за опция... Наверно зачем-то нужна :-)

"-b /usr/share/NeTraMet/mibs/mib.txt" - файл с MIB. Входит в поставку. Может быть /usr/local/usr/share/NeTraMet/mibs/mib.txt

"-m 614" - порт для управления сборщиками NeTraMet.

"-c 900" - забирать забирать статистику со сборщиков каждые 15 минут.

"-p" - после записи в файл статистики очередной порции данных закрывать его. Если файл не найден то начинается новый файл.

"-D" - запустить NeMaC как демон.

"-L /var/ntm.log/$DATER.nemac" - журнал работы NeMaC.

"-r /root/ntm.sh/short.3.rules" - файл c правилами.

"ip_adress_METER password_for_write_and_read" - без комментариев :-)

Журнал сетевых потоков

Что из себя представлет журнал? Текстовый файл с заголовками и данными по сетевым потокам. Пример:

Заголовок журнала

##NeTraMet v4.3: -c900 -r /root/ntm.sh/short.3.rules 63.43.3.2 xl0 60000 flows starting at 04:03:29 Thu 3 Jan 2002

Формат сетевых пакетов. Задается в правилах, директивой FORMAT. Значения этих отрибутов я уже описал в "Описание атрибутов".

#Format: sourcepeeraddress destpeeraddress tooctets fromoctets topdus frompdus sourcetransaddress desttransaddress sourcetranstype flowkind flowindex firsttime lasttime flowruleset

Время, дата, имя сборщика пакетов NeTraMet, потоки с 0 до 57907002.

#Time: 04:03:29 Thu 3 Jan 2002 63.43.3.2 Flows from 0 to 57907002

Еще заголовок :-)

#Ruleset: 12 5 /root/ntm.sh/short.3.rules NeMaC

Заголовок с статистикой загрузки сборщика пакетов, присутствует если в правилах есть команда STATISTICS.

aps = количество пакетов в секунду, среднее
apb = количество незавершенных пакетов, среднее
mps = количество пакетов в секунду, максимальное
mpb = количество незавершенных пакетов, максимальное
lsp = количество потерянных пакетов
avi = простой процессора, средний, в %
mni = использование процессора, минимальное, в %
fiu = использовано сетевых потоков
frc = сетевых потоков восстановлено
gci = интервал сбора мусора, в секундах
rpp = правил проверено на пакет
tpp = подсчетов на пакет
cpt = сравнений на подсчет
tts = выделенно счетных таблиц
tsu = использовано счетных таблиц

#Stats: aps=6 apb=0 mps=280 mpb=0 lsp=0 avi=99.9 mni=0.0 fiu=2 frc=64 gci=10 rpp=18.2 tpp=1.4 cpt=1.0 tts=32749 tsu=0

Метка конца дампа статистики.

#EndData: 63.43.3.2

Следующая порция. Время, дата, имя сборщика пакетов NeTraMet, потоки с 57907001 до 58006116.

#Time: 04:20:00 Thu 3 Jan 2002 63.43.3.2 Flows from 57907001 to 58006116

Заголовок с статистикой загрузки сборщика пакетов.

#Stats: aps=7 apb=0 mps=153 mpb=0 lsp=0 avi=99.9 mni=0.0 fiu=23 frc=0 gci=10 rpp=18.6 tpp=1.4 cpt=1.0 tts=32749 tsu=19

А вот и первый поток :-) Итак, 63.43.3.2 и 63.43.3.1 пообщались по UDP на нестандартных портах. С 63.43.3.2 на 63.43.3.1 отправлено 17401 байт, в 29 пакетах, получено 15680 байт в 28 пакетах. Порт источника не описан в "srv" в правилах и поэтому не сохранен, 0. Порт получателя тоже не описан в "srv" и тоже не сохранен, 0. 17 - использован протокол UDP. 3 - траффик внутренний. 4611 - индекс потока, время первой регистрации 57906966, время последнего изменения 58002914. Набор правил номер 12.

63.43.3.2 63.43.3.1 17401 15680 29 28 0 0 17 3 4611 57906966 58002914 12

Так, кому-то из Интернета понадобился наш сервер, по протоколу TCP, порты нестандартные.

0.0.0.0 63.43.4.43 167280 1729290 2788 2931 0 0 6 1 4612 57906977 58005341 12

Хост 63.43.4.34 довольно интенсивно использовал чужой ДНС (порт 53) по UDP.

63.43.4.34 0.0.0.0 33616 7958 491 82 0 53 17 1 4613 57907405 58005279 12

ICMP пакеты из Инетрнета на хост 63.43.4.34 и обратно. Не иначе хацкер :-)

0.0.0.0 63.43.4.34 14140 5430 202 57 0 0 1 1 4614 57907410 58003939 12
63.43.4.40 0.0.0.0 1314 0 9 0 25 0 6 1 4615 57907896 58001465 12
63.43.4.47 0.0.0.0 2952 2344 36 36 0 25 6 1 4616 57908368 58004368 12

Метка конца дампа статистики.

#EndData: 63.43.3.2

Еще порция данных. Их я уже объяснил. Посмотрим как изменились наши потоки.

#Time: 04:35:00 Thu 3 Jan 2002 63.43.3.2 Flows from 58006115 to 58096066
#Stats: aps=7 apb=0 mps=158 mpb=0 lsp=0 avi=99.9 mni=0.0 fiu=25 frc=0 gci=10 rpp=18.6 tpp=1.4 cpt=1.0 tts=32749 tsu=21

Обратите внимание что счетчики байт, пакетов изменились. 63.43.3.2 и 63.43.3.1 продолжают общаться :-)

63.43.3.2 63.43.3.1 22904 18554 41 40 0 0 17 3 4611 57906966 58090063 12

И так далее...

0.0.0.0 63.43.4.43 322506 3353898 5375 5688 0 0 6 1 4612 57906977 58095115 12
63.43.4.34 0.0.0.0 62106 15305 907 155 0 53 17 1 4613 57907405 58094657 12
0.0.0.0 63.43.4.34 25550 10117 365 106 0 0 1 1 4614 57907410 58094657 12
63.43.4.40 0.0.0.0 1752 0 12 0 25 0 6 1 4615 57907896 58037463 12

Метка конца дампа статистики.

#EndData: 63.43.3.2

Тарбалл с реальными примерами

Журнал работы NeMaC

Пример журнала работы меджера NeMaC.

Запуск NeMaC.

15:25:39 Tue 28 Aug 2001 -- Starting NeMaC: NeTraMet Manager & Controller v4.3

Загрузка правил в сборщик NeTraMet по адресу 63.43.3.2.

15:25:40 Tue 28 Aug 2001 -- loaded 9 rules from /root/ntm.sh/short.3.rules to meter 63.43.3.2

Сборщик не ответил.

12:37:25 Thu 30 Aug 2001 -- 63.43.3.2: No response
12:43:25 Thu 30 Aug 2001 -- 63.43.3.2: No response
12:49:25 Thu 30 Aug 2001 -- 63.43.3.2: No response

Сборщик начал отвечать, но менеджер NeMaC не обнаружил в сборщике своих правил.

12:55:00 Thu 30 Aug 2001 -- reader_util(Set Time,Current): Error in packet, reason = The value given has the wrong type or length.
12:55:00 Thu 30 Aug 2001 -- ... flowMIB.flowControl.flowReaderInfoTable.flowReaderInfoEntry.flowReaderLastTime.3
12:55:00 Thu 30 Aug 2001 -- meter_info(): Error in packet, reason = There is no such variable name in this MIB.
12:55:00 Thu 30 Aug 2001 -- ... flowMIB.flowControl.flowReaderInfoTable.flowReaderInfoEntry.flowReaderOwner.3

Менеджер NeMaC вынес диагноз - сборщик был перезапущен.

12:55:00 Thu 30 Aug 2001 -- 63.43.3.2: Meter has restarted

Повторно загружены правила в сборщик NeTraMet.

12:55:01 Thu 30 Aug 2001 -- loaded 9 rules from /root/ntm.sh/short.3.rules to meter 63.43.3.2

Иногда NeMaC ругается на маленький объем пакета с сетевыми потоками, все нормально сообщение - информационное.

04:21:14 Mon 15 Jul 2002 -- Only one 'package' flow in SNMP PDU (684 bytes) for meter 63.43.3.2!

Хранение журналов в БД

Я храню все данные полученные от комплекса в БД MySQL. Коротко опишу структуру хранения.

Журнал сетевых потоков

Статистика по траффику:

CREATE TABLE flows (
src int(10) unsigned default NULL,
dst int(10) unsigned default NULL,
tobytes int(10) unsigned default NULL,
frombytes int(10) unsigned default NULL,
topackets int(10) unsigned default NULL,
frompackets int(10) unsigned default NULL,
srcport smallint(5) unsigned default NULL,
dstport smallint(5) unsigned default NULL,
type smallint(5) unsigned default NULL,
flowkind smallint(5) unsigned default NULL,
dater datetime NOT NULL default "1972-01-01 00:00:01",
collector int(10) unsigned NOT NULL default "0",
flowindex int(10) unsigned NOT NULL default "0",
firsttime int(10) unsigned NOT NULL default "0",
lasttime int(10) unsigned NOT NULL default "0",
flowruleset int(10) unsigned NOT NULL default "0",
UNIQUE KEY utils_values (collector,flowindex,firsttime,lasttime,flowruleset),
KEY by_src (src),
KEY by_dst (dst),
KEY by_dater (dater)
) TYPE=MyISAM;

Где,
src - источник,
dst - получатель,
tobytes - отправлено байт источник,
frombytes - принято байт источником,
topackets - отправлено пакетов источник,
frompackets - принято пакетов источником,
srcport - порт источника,
dstport - порт получателя,
type - протокол,
flowkind - тип траффика,
dater - дата,
collector - IP сборщика NeTraMet,
flowindex - индекс сетевого потока,
firsttime - время создания потока,
lasttime - время последней модификации сетевого потока,
flowruleset - номер набора правил.

Статистика по загруженности сборщиков NeTraMet:

CREATE TABLE stats (
collector int(10) unsigned NOT NULL default "0",
dater datetime NOT NULL default "1972-01-01 00:00:01",
fromflow int(10) unsigned NOT NULL default "0",
toflow int(10) unsigned NOT NULL default "0",
aps smallint(5) unsigned NOT NULL default "0",
apb smallint(5) unsigned NOT NULL default "0",
mps smallint(5) unsigned NOT NULL default "0",
mpb smallint(5) unsigned NOT NULL default "0",
lsp smallint(5) unsigned NOT NULL default "0",
avi decimal(4,1) NOT NULL default "0.0",
mni decimal(4,1) NOT NULL default "0.0",
fiu smallint(5) unsigned NOT NULL default "0",
frc smallint(5) unsigned NOT NULL default "0",
gci smallint(5) unsigned NOT NULL default "0",
rpp decimal(4,1) NOT NULL default "0.0",
tpp decimal(4,1) NOT NULL default "0.0",
cpt decimal(4,1) NOT NULL default "0.0",
tts smallint(5) unsigned NOT NULL default "0",
tsu smallint(5) unsigned NOT NULL default "0",
UNIQUE KEY control_dupl (collector,dater,fromflow,toflow),
KEY collector (collector,dater,fromflow,toflow)
) TYPE=MyISAM;

Где, collector - IP адрес сборщика NeTraMet, dater - дата статистики. Назначение остальных полей можно посмотреть в разделе "Журнал сетевых потоков".

Журнал работы NeMaC

Все просто: dater - дата сообщения, msg - тело сообщения.

CREATE TABLE nemaclog (
dater datetime NOT NULL default "1972-01-01 00:00:01",
msg varchar(200) default NULL,
UNIQUE KEY dater (dater,msg),
KEY dater_2 (dater)
) TYPE=MyISAM;

Заключение

Пока все. Надеюсь, что будет время и стимул закончить описание и таки дописать до приемлимого для публикации качества обработчик-запихиватель-журналов-в-MySQL на Perl.

Есть громадная потребность в cgi-программисте для написания веб-интерфейса к базе данных. Мои наработки не выдерживают ни малейшей критики.

Ссылки

Домашняя страница HowTo

HowTo одним тарбаллом

Архив версий этого документа

Почитать

"REFERENCE MANUAL NeTraMet & NeMaC", Nevil Brownlee:
ftp://ftp.chg.ru/pub/networking/management/NeTraMet/ntm43.pdf

"Настройка Netramet для учёта трафика посредством netflow (cisco netflow)", Vlad Halilow <vlad@ccs.ru>:
http://www.opennet.ru/base/cisco/netr.txt.html

Вообще про TCP/IP:
http://www.citforum.ru/nets/tcp/

Загрузить

Домашний сайт:
http://www2.auckland.ac.nz/net/NeTraMet/

Порты для FreeBSD:
http://www.freebsd.org/cgi/ports.cgi

Linux:
http://freshmeat.net/projects/netramet/

Брать можно отсюда:
ftp://ftp.chg.ru/pub/networking/management/NeTraMet/

Предложения и дополнения

Буду рад и благодарен. Присылайте на gdenis@aport.ru

Благодарности

Information Technology Systems & Services, The University of Auckland

RTFM Working Group

Новиков Николай AKA TARANTUL - за то что навел на NeTraMet и разъяснил что в нем хорошего.

icct - за консультации по Perl.

Vitls - за то что поддерживает #lrn в RusNet и неоценимую помощь в написании оного HowTo.

Условия распространения

Данный документ публикуется на условия GNU General Public License версии 2 или любой более поздней по Вашему выбору.