Netflow – протокол, разработанный изначально компанией Cisco для учёта сетевого трафика. В настоящий момент его сфера применения выходит далеко за пределы устройств этой компании, существуют свободные реализации, многие производители добавляют поддержку netflow в свои устройства. Существует несколько версий этого протокола, наиболее распространены версии 5 и 9, при этом функциональные отличия между версиями невелики.
В рамках netflow подразумевается три роли, в которых могут выступать устройства:
- Сенсор – устройство, собирающее статистику о трафике и передающее её коллектору. В качестве сенсора может выступать маршрутизатор или коммутатор третьего уровня cisco.
- Коллектор – приложение, работающее на сервере, собирающее и сохраняющее статистику, полученную от сенсоров.
- Анализатор – приложение, анализирующее и обрабатывающее сохранённую коллектором статистику, предоставляет различные отчёты, графики и т.п.
В статистике, собираемой на коллекторе учитывается не каждый пакет индивидуально – это было бы слишком ресурсоёмко, а потоки. Поток (flow) – это группа пакетов, у которых совпадают:
- Адрес отправителя;
- Адрес получателя;
- Порт источника (для TCP или UDP);
- Порт получателя (для TCP или UDP);
- Тип и код сообщения (для ICMP);
- Протокол, инкапсулированный в IP (поле заголовка IP «protocol»);
- Значение поля ToS;
- Интерфейс, на котором появился пакет.
Таким образом, группа пакетов, у которых эти параметры совпали называется потоком, а в пределах потока можно посчитать, сколько в нём передано пакетов, сколько байт информации и другую статистику. Маршрутизатор собирает эту информацию и передаёт её коллектору.
Статистика по потокам отправляется на коллектор и частично может быть просмотрена локально на самом маршрутизаторе. Приведём конкретный перечень того, что отправляется на коллектор:
- Версия протокола;
- Порядковый номер записи о потоке;
- Время начала и окончания потока;
- Количество байт и пакетов в потоке;
- Интерфейсы, через которые осуществлялась передача;
- Адрес получателя и отправителя;
- Порты получателя и отправителя;
- Номер протокола, инкапсулированного в IP;
- Значение ToS;
Настройка протокола netflow достаточно проста. Необходимо выбрать интерфейсы, на которых мы хотим организовать сбор статистики и направление трафика, который мы хотим мониторить (на вход, на выход или оба). Например:
R1(conf)# interface FastEthernet 0/1
R1(config-if)# ip flow ingress
R1(config-if)# ip flow egress
Соответственно, ingress заставляет мониторить входящий на интерфейс Fa0/1 трафик, а egress – исходящий. Второй элемент настройки – указание адреса коллектора и номера UDP порта, на котором он готов получать от нас статистику. Кроме того, можно указать версию протокола netflow, которая будет понятна коллектору. Это ещё две строчки конфига:
R1(config)# ip flow-export destination 192.168.0.100 2055
R1(config)# ip flow-export version 5
Для отладки хорошо использовать две команды: show ip cache flow – выдаёт локальную статистику netflow прямо на маршрутизаторе, без коллектора; show ip flow export – отображает статистику по взаимодействию с коллектором (сколько потоков отправлено, сколько пакетов ушло на коллектор, ошибки при взаимодействии с коллектором и т.п.).
Как видно из данной статьи, настройка протокола Netflow на оборудовании cisco дело достаточно простое, я бы сказал, что сложнее настроить коллектор. Что может выступать в качестве коллектора? Во-первых, многие биллинг-системы работают с этим протоколом. Через него они получают статистику, какой ip адрес сколько скачал из интернета, а через SNMP отправляют на маршрутизатор команды по изменению списков контроля доступа, чтобы запретить выход тем пользователям, кто пересидел свой лимит. Во-вторых, есть платное ПО, которое выступает в качестве коллектора и анализатора, например, Scrutinizer NetFlow Analyzer от Plixer International. В-третьих, есть бесплатные коллекторы. В частности, под Ubuntu и Debian линуксом я пользовался отличным пакетом flow-tools. Минус последнего варианта заключается в том, что анализатор пришлось писать самому.