20.06.11 @ 17:23 Lystopad Olexandr wrote:

Нужно с re0 интерфейса снимать netflow статистику и как-то удобно ее
просматривать. Хотелось бы что-бы был удобный интерфейс, чтобы можно
было быстро найти что-то по дате, по порту, по хостам (src, dst).
БД без разницы, готов поставить любую.

Порекомендуйте связку или тулзу, а-то их много, не хочу на чужие
грабли наступать. ;)

Четыре месяца назад делал небольшую подборку коллекторов, умеющих IPv6. Фрагмент обзора:

* flow-tools

Классический всем известный пакет, наличествует язык для запросов и формирования отчетов, имеется симпатичная веб-морда FlowViewer (http://ensight.eos.nasa.gov/FlowViewer/). Но совершенно не умеет IPv6. Включен для иллюстрации наличия средств генерации отчетов вместо SQL для задач обработки трафика.
Пример генерирования отчета по агрегированным парам адресов:

stat-report srcdst_haggr
    type ip-source/destination-address
    output
        format ascii
        sort +octets
        fields +first,+octets,-packets,-duration,-flows

stat-definition srcdst_haggr
    report srcdst_haggr

Соответствующий SQL-запрос выглядел бы примерно как:

SELECT time, src_ip, dst_ip, SUM(octets) FROM flows_table GROUP BY src_ip, dst_ip;

При необходимости выборочной обработки некоторых адресов (WHERE в SQL) можно указывать фильтры в синтаксисе, похожем на Cisco ACL:

filter-primitive test-address
  type ip-address
  permit 109.123.146.1
  permit 109.123.146.247
  default deny

* nfdump, http://nfdump.sourceforge.net/

Умеет IPv6 - NetFlow v9.
Демон сам ротейтит бинарные файлы данных. Умеет язык запросов а-ля tcpdump, в т.ч. кейворды pps и bps, может пригодиться в реалтайме. Умеет custom формат вывода. Умеет агрегировать/сортировать вывод по разным полям, причем возможна по, например, подсетям. Умеет вывод top N записей статистики. Поддерживает конвертацию из flow-tools. Можно писать данные снова в бинарные файлы (но сырые, без агрегации), можно отправлять их по сети из сохраненных файлов в виде Netflow v5/v9 на другой коллектор. Пример команды агрегации для выбранных адресов (частичный аналог приводившегося выше примера для flow-tools) из каталогов с марта по май:

$ nfdump –R . -M /traf/nfcapd/2011/03:04:05 -A srcip,dstip 'tcp and port 80 and (ip 109.123.146.1 or ip 109.123.146.247)'

* nfsen, http://nfsen.sourceforge.net/

Вебморда к nfdump. Использует RRD. Написана на Perl и PHP. В основном рисует графики, но умеет выводить и flows в синтаксисе nfdump, в том числе с агрегацией. Интерфейс приятный и понятный (по крайней мере для админа), фильтры можно сохранять. Можно создавать каналы и профили, и тоже сохранять. Профиль собирает данные по определенному фильтру, может быть продолжительным, экспиря старые данные. Поддерживает алерты по условиям, можно детектить DoS, в принципе. Поддерживает написание плагинов.

* SiLK, ports/security/silktools http://tools.netsa.cert.org/silk/

Предназначен для безопасников, написано, что умеет быстро запрашивать большие исторические наборы данных. Заявлен Netflow v9 и IPFIX, но IPv6 поддерживается не во всех командах комплекта. Его rwtotal не умеет полные адреса, только 1/2/3 октета (и не умеет IPv6). Размер бинарной записи максимум 52 байт для IPv4 и 88 байт для IPv6, в репозитории оно хранит общие данные в заголовке, так что минимальный размер 22 байта (для web-трафика 20 байт, за счет 2 бит на порт, из 80/443/8080). Счетчики пакетов/байт 32-битные. В действительности, хранится среднее число байт на запись, а формат использует минимальное число бит, так что для целей биллинга не очень подходит: возможна потеря точности. Можно метить каждый IP-адрес (бинарные карты), но только для IPv4 (зато заранее подготовленная карта сильно ускоряет выборку по многим адресам). Хранится в файлах и выбирается из них по времени в утилитах по границе часа (с целью уменьшения внутри одной записи поля времени до 12 бит, секунды с границы часа) – документация, увы, не освещает вопрос пригодности для realtime-биллинга. IPv6 поддерживается лишь в:
 * rwfilter - выборка [по критерию] flows из data store для других утилит
 * rwcat – объединение нескольких бинарных файлов в новый выходной
 * rwappend – дописывание нескольких бинарных файлов к уже существующему
 * rwsort – сортировка для использования в других утилитах
 * rwuniq – печать агрегатных значений [с порогами] для указанных ключей
* rwgroup – тегирование/сумма flows, имеющих одинаковые / не более дельты поля * rwcount – сумма всех flows для каждого N-секундного интервала (а-ля mrtg) * rwstats – сортировка агрегатных значений и вывод N top / bottom / порог / % всех
 * rwnetmask – агрегация в CIDR-блоки
 * rwcut – печать указанных полей из бинарных записей
 * rwtuc – конверсия из текстового формата в бинарный
Из rwsort | rwgroup --summarize можно сделать а-ля Map/Reduce. Для IPv4 в пакете вкусностей много больше, к сожалению. Может читать Netflow v5 из файла с размером, кратным 1464 (заголовок + 30 flows, даже если использованы не все из них).
Пример использования:

$ rwfilter --start-date=2010/02/19:00 --end-date=2010/02/28:23 --proto=6
  --dcidr=10.1.1.2,10.1.1.4,10.1.1.6,10.1.1.8,10.1.1.10,10.2.1.0/24
  | rwstats --fields=sip,dip --values=byte --threshold=100000000

 INPUT: 549092 Records for 107136 Bins and 3410300252 Total Bytes
 OUTPUT: Top 5 Bins by Bytes (threshold 100000000)
         sIP|            dIP|       Bytes|    %Bytes|   cumul_%|
    10.1.1.1|       10.1.1.2|   307478707|  9.016177|  9.016177|
    10.1.1.3|       10.1.1.4|   172164463|  5.048367| 14.064544|
    10.1.1.5|       10.1.1.6|   142059589|  4.165604| 18.230147|
    10.1.1.7|       10.1.1.8|   119388394|  3.500818| 21.730965|
    10.1.1.9|      10.1.1.10|   108268824|  3.174759| 24.905725|

Статья с конференции UseNix, посвященная использованию комплекта, доступна на http://www.usenix.org/event/lisa04/tech/full_papers/gates/gates_html/ Кроме того, поддерживается расширение фильтрации динамическими библиотеками: например, администратор может написать плагин для запросов на паттерны активности, которые нельзя делать стандартными средствами. Скажем, одним из признаком эксплуатации уязвимости переполнения буфера является случай, когда источник сначала связался с сервером S на порту P, а затем наблюдалось соединение от источника к серверу S, но на порту R.

* flowd, ports/net-mgmt/flowd http://www.mindrot.org/flowd.html

Маленький, быстрый и надежный коллектор. Поддерживает IPv6/Netflow v9. Сделан в духе unix way – делает только одну вещь, принимает и пишет на диск (не умеет даже сам ротейтить). Умеет выборочное сохранение (фильтрация а-ля правила файрвола; не все поля из Netflow). В комплекте идут интерфейсы на Perl и Python для парсинга бинарного формата сохраненных записей, а также пример скрипта для сохранения в SQL-базу. Умеет слушать multicast. По отзывам, достаточно надежен/безглючен (неудивительно, при маленьком размере ломаться нечему).

* pmacct, ports/net-mgmt/pmacct http://www.pmacct.net/
  Набор демонов, заточенный на агрегацию и хранение данных в SQL (сейчас
поддерживаются mysql/postgresql/sqlite) - авторы придерживаются мнения, что хранящих в файлах средств уже и так полно. Умеет Netflow v9/IPFIX/sFlow. Для 64-битных счетчиков нужна опция при компиляции. Умеет цепляться по BGP для сбора ASn, AS-PATH и т.д. и агрегации по ним. Умеет предагрегировать до SQL
  по пороговым значениям.
  Существут веб-морда http://www.aptivate.org/pmgraph (написанная на Java),
  умеет довольно мало.

* http://www.switch.ch/network/projects/completed/TF-NGN/floma/software.html
  Подборка линков на кучу софта, в том числе много мелких утилит.
В частности, полезен Samplicator для копирования на несколько коллекторов.

--
WBR, Vadim Goncharov

Ответить