Тестируем мое творение.

Собственно все здесь: https://sourceforge.net/projects/netflow/

Программа умеет обрабатывать данные по IPv4 с сенсоров NetFlow v5 и v9. Плюс ко всему прикрутил веб-интерфейс. Скриншоты так же по ссылке.
Конечно есть, что еще делать, но программа уже сама по себе позволяет многое. А главное она показывает результаты.

Самая главная трудность заключалась в многопоточности, однако и это я преодолел.

Абсолютно весь проект сделан снуля. Конечно я позаимствовал кое что, но это можно больше отнести к best practice.

О всех возникших проблемах просьба сообщать в комментариях — буду исправлять.

NetFlow, Perl и Threads

Ну вот можно и поздравить меня с освоением нового горизонта. Кто-то может и усмехнется, что для него такие вещи семечки, однако этот кто-то вряд ли занимается чем то кроме своей специализации (в отличие от меня).

Задача: Создать многопоточное приложение, которое позволяет осуществлять обработку информации, полученной с большого количества сенсоров.

Главная проблема: Данные NetFlow передаются по UDP. Если пакет данных не был считан вовремя, он теряется. Все просто, когда у тебя 1-2 сенсора. В этом случае проблем никаких нет. Коллектор будет успевать перерабатывать данные. Тем более непосредственную переработку можно переложить на другую программу. Конечно потребуется создать вспомогательные таблицы, из которых можно сводить все в нужный вам вид. Но это не великое зло… Самое великое зло наступает в тот момент, когда вы хотите считать информацию с 10-20 нагруженных сенсоров.

Решение: Решение напрашивается самим собой — многопоточность. С одной стороны это действительно дремучий лес. Необходимо согласовать асинхронную обработку, распределить потоки данных и уследить за тем, что бы не пошла утечка памяти.
Лично я воспользовался нитями Perl (threads). Это механизм «легковесных» потоков. Сразу оговорюсь: Да, на самом деле эти потоки не легковесные. Приложение будет занимать порядочное место в памяти и кушать ресурсы по полной. Однако задачи сэкономить ресурсы не стоит. Наоборот, речь идет о полной утилизации ресурсов. То есть, что бы программа использовала ресурсы на полную катушку, удовлетворяя потребности в переработке данных.

Читать дальше →

Netflow-искания Часть 4.2 (Анализ данных)

Налепил я скрипт, который что-то где-то собирает и вот встает вопрос: что делать дальше? Ну собрал ты данные — молодец. Однако необходимо их как то представлять?
На самом деле тут должен явиться мега-супер спец по SQL. Но пока такового нет, я вам кое что покажу…

Задача: Отобразить данные, собраные с шайтан-машина Cisco router, шайтан-скриптом dreamhunter-a.

Читать дальше →

Netflow-искания Часть 4.1 (Netflow v9 collector script)

В общем похоже некий этап преодолен и теперь можно продемонстрировать первую версию моего коллектора. И да, я расположил свой скриптец на sourceforge. Это было по крайней мере мне интересно сделать.

Возможности:
  1. Работа с протоколами NetFlow 5 и 9 версии;
  2. Работа со всеми устройствами через один или несколько портов;
  3. Хранение данных в базе MySQL;
  4. Работа с различными типами сенсоров;
  5. Работа на различных ОС.

Системные требования:
  1. PIII и выше;
  2. 512MB RAM;
  3. наличие сетевого адаптера.

Требования к ПО:
  1. OS windows/*nix/MacOS (да, эта фигня должна работать на всем подряд, вопрос в прямоте ваших рук);
  2. MySQL 5.5 версии и выше;
  3. Perl 5.14 и выше.

Читать дальше →

Netflow-искания Часть 4 (Netflow v9 collector)

Предисловие:

Опасное это дело, Фродо, — выходить за порог: стоит ступить на дорогу и, если дашь волю ногам, неизвестно куда тебя занесёт.

Задача: Получить и обработать данные с сенсора netflow v9.

Подготовка
Запускаем уже полюбившийся скрипт и захватываем первый пакет, переданный от маршрутизатора:
#!/usr/bin/perl
use IO::Socket::INET;
$| = 1;
my ($socket,$received_data);
my ($peeraddress,$peerport);
$socket = new IO::Socket::INET (
LocalPort => '9999',
Proto => 'udp',
) or die "ERROR in Socket Creation : $!\n";
while(!$recieved_data)
{
$socket->recv($recieved_data,4096);
}

open (MYFILE, '>data.txt');
print MYFILE $recieved_data;
close (MYFILE);

$socket->close();

Читать дальше →

Netflow-искания Часть 3.1 (изобретаем анализатор)

Очередным доказательством того что своя на работе только кружка послужило стирание виртуалки с NetFlow анализатором. Причины по сути довольно смешные. Не смешная только возможность потерять данные. В связи с этим решил создать новый топик, где поделюсь своими исследованиями и сохраню методы решения задачи для себя.

Преамбула: Есть такая классная штука, как сервер видеонаблюдения. Еще есть не менее классная штука как сервер ВКС. И они очень любят кушать канал связи. 10 мегабит для них — воронка, в которую они пытаются просунуть свой арбуз. Одним весенним утром наш Мега-Босс захотел воспользоваться конференц-связью дабы отыметь своих подчиненных пусть не физически, но хоть так. И что характерно — отымел, но совсем не тех кого ожидали, а наш отдел. Качество связи было отвратительным.
Естественно сам факт совершенного насилия над нами был лишь следствием. Захотелось узнать истинные причины этого. Одной из задач стояло составление очень сложного отчета по трафику в разрезах по сервисам. То есть грубо говоря необходимо было поставить на мониторинг и детально разобрать трафик для выяснения причин плохого качества ВКС.

Задача: Сформировать сложный, но читабельный для всех отчет по трафику по заданным периодам в разрезе по различным сервисам/источникам данных.

Исходные данные: Сырые данные, собранные Flow-Tools.

Читать дальше →

Netflow-искания Часть 3 (изобретаем коллектор)

Итак поигрались с готовыми решениями — красота. Что дальше? Лично меня очень беспокоила информация о потерянных пакетах в логах:
# /var/log/flow-capture.log:
ftpdu_seq_check(): src_ip=xxx.xxx.xxx.xxx dst_ip=0.0.0.0 d_version=5 expecting=1531521097 received=1531521307 lost=210
ftpdu_seq_check(): src_ip=xxx.xxx.xxx.xxx dst_ip=102.0.0.0 d_version=5 expecting=1730244036 received=1730300526 lost=56490
ftpdu_seq_check(): src_ip=xxx.xxx.xxx.xxx dst_ip=99.111.117.110 d_version=5 expecting=1730207586 received=1730300556 lost=92970
ftpdu_seq_check(): src_ip=xxx.xxx.xxx.xxx dst_ip=102.0.0.0 d_version=5 expecting=1730300556 received=1730300586 lost=30

Плюс ко всему какие то нелепые dst_ip.

Что бы не мешать основному процессу, добавляю на сенсоре строчку для дублирования инфы на другой порт:
# conf t
# ip flow-export destination xxx.xxx.xxx.xxx 9997

Циска ругнется, что мы дублируем инфу, но послушно выполнит.

Читать дальше →

Netflow-искания Часть 2 (анализаторы)

Итак, если вы вдруг случайно настроили сенсоры, коллекторы и FlowTools, то естественно встанет вопрос с анализатором. Flow-Tools — очень хороший пакет программ. Но если вы работаете в более-менее приличной конторе, в которой есть больше одного IT работника, вам понадобится как то представлять (показывать) информацию своим коллегам и начальству для дальнейшего разбора полетов.

Читать дальше →

Netflow-искания Часть 1 (сенсоры и коллекторы)

Я думаю, что все согласятся с тем, что мониторинг сетевой активности является одной из приоритетных задач в процессе эксплуатации корпоративных сетей.
Все легко и просто, пока вы администрируете сеть небольшого офиса в городе N. Но что если ваша фирма пошла в гору и стала расширяться? Открытие нового филиала скорей всего повлечет начало отношений с провайдерами, организацию каналов связи и более сложные (назовем это так) манипуляции с сетью.
Нет желания описывать такие вещи, как маршрутизацию, ее необходимость и проблемы с ней связанные. Допустим вы непосредственно маршрутизацию победили. Но это не значит, что все у вас будет хорошо.

Читать дальше →