Netflow

NetFlow — это технология, впервые реализованная в маршрутизаторах компании Cisco около 1996 года; она обеспечивает сбор статистики о сетевом IP-трафике на входе или выходе интерфейса устройства. Анализируя данные, предоставляемые NetFlow, администратор сети может определить такие параметры, как источник и получатель трафика, класс обслуживания, а также причины возникновения перегрузок в сети. Типичная система мониторинга потоков с использованием NetFlow включает три ключевых компонента:[1]

  • Экспортёр потоков — агрегирует пакеты в потоки и экспортирует соответствующие записи одному или нескольким сборщикам.
  • Сборщик потоков — принимает, хранит и предварительно обрабатывает записи о потоках, полученные от экспортёра.
  • Аналитическое приложение — анализирует собранные данные для целей, например, обнаружения вторжений или профилирования трафика.

Описание протокола

Маршрутизаторы и коммутаторы с поддержкой NetFlow способны собирать статистику по IP-трафику на всех интерфейсах, где NetFlow активирован, а затем экспортировать эти данные в виде NetFlow-записей хотя бы к одному сборщику NetFlow — обычно, это сервер, непосредственно занимающийся анализом трафика.

Сетевые потоки

Стандарт NetFlow версия 5 компании Cisco определяет «поток» как однонаправленную последовательность пакетов, для которых совпадают семь критериев (уникальный ключ потока):[2]

  1. Входящий интерфейс (индекс ifIndex в SNMP)
  2. Исходный IP-адрес
  3. Адрес назначения IP-адрес
  4. Номер IP-протокола (IP protocol number)
  5. Исходный порт для UDP или TCP; 0 — для других протоколов
  6. Порт назначения для UDP или TCP; тип и код для ICMP, либо 0 — для других протоколов
  7. Класс обслуживания IP (Type of Service, ToS)

Следует отметить, что исходящий интерфейс, IP Nexthop или BGP Nexthops не входят в состав ключа потока; эти значения могут быть неверными, если маршрут изменится до окончания потока или когда выполняется балансировка нагрузки по пакетам.

Такая же схема применяется для IPv6, а аналогичные критерии используются для потоков MPLS и Ethernet (уровень 2).

Расширенные реализации NetFlow (например, Cisco Flexible NetFlow) или IPFIX допускают определение пользователем критериев ключа потока.

Типичный вывод команды NetFlow-инструмента из командной строки (nfdump) выглядит так:

 Дата начала потока       Длительность Протокол  Src IP:Порт          Dst IP:Порт           Пакеты  Байты Потоки
 2010-09-01 00:00:00.459   0.000     UDP    127.0.0.1:24920     →   192.168.0.1:22126      1     46    1
 2010-09-01 00:00:00.363   0.000     UDP    192.168.0.1:22126   →   127.0.0.1:24920        1     80    1

Экспорт записей

Маршрутизатор формирует экспортную запись о потоке после завершения этого потока. Основной механизм — технология aging: при поступлении в поток новых пакетов таймер обнуляется. Завершение TCP-сессии также вызывает экспирацию записи. Возможно также конфигурирование маршрутизатора на экспорт записи через фиксированный интервал — даже если поток ещё активен.

Транспортный протокол передачи

Записи NetFlow традиционно экспортируются с использованием UDP, сбор осуществляется NetFlow-коллектором. Необходимо заданить IP-адрес коллектора и порт UDP (стандартно — 2055, альтернативно — 9555, 9995, 9025 и др.).

Обычно маршрутизатор не отслеживает переданные ранее потоки: если UDP-пакет с NetFlow-записями теряется из-за перегрузки или повреждения, все данные в нём теряются навсегда; UDP не предоставляет механизмов повторной передачи. Это может приводить к существенным искажениям статистики, особенно для NetFlow v8/v9, где возможна агрегация большого числа потоков в один пакет.

Некоторые современные реализации используют SCTP (Stream Control Transmission Protocol), чтобы повысить устойчивость к потерям и гарантировать приём шаблонов NetFlow v9 до экспорта связанных записей. Использование TCP для NetFlow нецелесообразно из-за избыточных задержек, вызванных строгой порядковостью.

Однако SCTP требует двустороннего взаимодействия каждого коллектора с каждым маршрутизатором; это может существенно ограничить масштабируемость системы при большом числе устройств и коллекоров, особенно при отказах или обслуживании.

SCTP неэффективен, если сведения требуется экспортировать нескольким независимым коллекторам (например, тестовым серверам). UDP допускает простое копирование потоков через сетевые TAP или L2/L3-мониторинг; также возможна статeless фильтрация или изменение адреса назначения. Обычно потери минимальны, поскольку экспорт преимущественно идёт по магистральным каналам; наибольший риск потерь возникает между сетью и коллекторами.

Заголовки пакетов

Любой NetFlow-пакет начинается с версии-зависимого заголовка, содержащего минимум:

  • номер версии (v1, v5, v7, v8, v9),
  • порядковый номер пакета (детектирует потери/дубли),
  • временные метки экспорта (аптайм системы или абсолютное время),
  • число записей (v5/v8) или набор шаблонов и записей (v9).

Записи

Запись NetFlow может содержать широкий набор сведений о трафике внутри потока.

NetFlow v5 (самая распространённая версия, далее — v9) включает:

  • Индекс входящего интерфейса (ifIndex по SNMP/IF-MIB)
  • Индекс исходящего интерфейса или 0 (если пакет отброшен)
  • Метки времени начала и окончания потока (миллисекунды после загрузки устройства)
  • Число и объём (в байтах) пакетов потока
  • Заголовки сетевого уровня (Layer 3):
    • IP-адрес источника и назначения
    • Тип и код ICMP-сообщения
    • IP-протокол
    • Значение ToS
  • Порт источника и назначения (TCP, UDP, SCTP)
  • Для TCP: объединение всех TCP-флагов за время жизни потока
  • Layer 3-маршрутизация:
    • IP-адрес ближайшего hop (не BGP nexthop)
    • Маски источника и назначения (длины префикса по CIDR)

Для ICMP-потоков Source Port = 0, а поле порта назначения кодирует тип и код ICMP-сообщения (port = ICMP-Type * 256 + ICMP-Code).

Поля с номерами автономных систем (AS), согласно настройкам, могут содержать последний AS по пути до назначения или непосредственного соседа; при отсутствии поддержки, неизвестном маршруте или локальном AS поле будет содержать 0. Нет явного способа отличить эти случаи.

NetFlow v9 может содержать все перечисленные поля, а опционально — дополнительные (например, метки MPLS, адреса/порты IPv6).

Анализируя такие записи, можно построить детальную картину сетевого трафика и его объёма. Формат NetFlow-рекордов эволюционировал, отсюда — использование версий; Cisco поддерживает подробные спецификации структур NetFlow всех версий.

Интерфейсы

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

Чаще всего NetFlow фиксирует все входящие на интерфейс IP-пакеты, однако отдельные реализации допускают фильтрацию пакетов по IP-правилам.

Некоторые реализации поддерживают сбор на выходящих интерфейсах; это требует осторожности, иначе потоки с входящего на выходящий интерфейс с NetFlow могут быть учтены дважды.

Sampled NetFlow

Стандартный NetFlow рассчитан на анализ всего IP-трафика интерфейса, однако для магистральных каналов это слишком ресурсоёмко (много параллельных коротких потоков).

В результате Cisco реализовала Sampled NetFlow на маршрутизаторах Cisco 12000; сейчас все современные высокопроизводительные устройства используют выборку.

Обрабатывается лишь каждый n-й пакет; n задаётся в настройках.

Алгоритмы выборки:

  • Каждый n-й пакет (детерминированный Sampled NetFlow на Cisco 12000)
  • Один случайный из n (Random Sampled NetFlow — современные Cisco)
  • Для некоторых устройств поддерживается более сложная, например, выборка на поток Cisco Catalyst.

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

Важно учитывать: предоставленные NetFlow-рекорды при использовании Sampled NetFlow отражают оценку, а не точное измерение объёма переданного трафика.

Параметры выборки записываются в заголовке пакета v5 (общее значение) или, для v9 — в специальных полях записей (по интерфейсам).

Версии

Версия Комментарий
v1 Первая реализация, устарела, поддерживает только IPv4 (без масок и номеров AS).
v2 Внутренняя версия Cisco, не выпускалась.
v3 Внутренняя версия Cisco, не выпускалась.
v4 Внутренняя версия Cisco, не выпускалась.
v5 Наиболее распространённая (на 2009) версия, реализована многими вендорами, только для IPv4.
v6 Cisco более не поддерживает. Предположительно, информация инкапсуляция.
v7 Как v5, но с полем исходного маршрутизатора. Использовался (только?) на Cisco Catalyst.
v8 Поддерживает агрегирование данных, но только информации из v5.
v9 Шаблонная структура. Многие современные маршрутизаторы (на 2009). Используется для потоков IPv6, MPLS и IPv4 с BGP nexthop.
v10 Определяет IPFIX. Хотя стандартизирован на основе NetFlow, v10 не совместим с NetFlow.

NetFlow и IPFIX

NetFlow был изначально реализован Cisco и описан в информационном (не стандартизирующем) документе — RFC 3954 «Cisco Systems NetFlow Services Export Version 9». Сам NetFlow впоследствии был заменён официальным стандартом Internet Protocol Flow Information eXport (англ. IPFIX). Основанный на реализации NetFlow v9, IPFIX стандартизирован и опубликован как RFC 5101 (устарел, заменён на RFC 7011), RFC 5102 (устарел, заменён на RFC 7012) и др. (с 2008 г.).

Аналогичные технологии

Ряд других производителей, кроме Cisco, реализуют подобную технологию мониторинга сетевых потоков. Благодаря доминирующей доле Cisco технология NetFlow остаётся самой известной в этой области. NetFlow считается товарным знаком Cisco (по состоянию на март 2012 года в опубликованных регистрациях Cisco такой товарный знак не присутствует[3]):

Программный пакет flow-tools[5] позволяет обрабатывать и управлять экспортом NetFlow с маршрутизаторов Cisco и Juniper[6].

Поддержка

Производитель/тип Модели Версия NetFlow Реализация Особенности
Cisco IOS-XR маршрутизаторы CRS, ASR9000, Cisco 12000 v5, v8, v9 ПО на CPU линейной карты Полная поддержка IPv6 и MPLS
Cisco IOS маршрутизаторы 10000, 7200, 7500 (старые) v5, v8, v9 ПО на Route Processor IPv6/MPLS — только современные модели и новые IOS
Cisco Catalyst-коммутаторы 7600, 6500, 4500 v5, v8, v9 Аппаратное TCAM (совместно с ACLs) IPv6 на моделях RSP720, Sup720; до 128K или 256K потоков на PCF[7]
Cisco Nexus-коммутаторы 5600, 7000, 7700 v5, v9 Аппаратный TCAM, также для ACLs; до 512K потоков. IPv4/IPv6/L2. MPLS не поддерживается
Juniper (legacy) маршрутизаторы M-series, T-series, MX-series (DPC) v5, v8 ПО на Routing Engine, software jflow IPv6/MPLS не поддерживается
Juniper (legacy) маршрутизаторы M-series, T-series, MX-series (DPC) v5, v8, v9 ПО на сервис-плате (hardware jflow или sampled) IPv6/MPLS поддержка только на MS-DPC; MS-PIC, AS-PIC2
Juniper маршрутизаторы MX-series (MPC-3D), FPC5 для T4000 v5, IPFIX Аппаратная (trio), inline jflow IPv6 c JUNOS 11.4R2, MPLS неизвестно; MPC3E — до v12.3; ошибка поля времени старта[8]
Nokia маршрутизаторы 7750SR v5, v8, v9, v10 IPFIX ПО на центральном процессоре IPv6/MPLS (требуются IOM3 и выше)
Huawei маршрутизаторы NE5000E, NE40E/X, NE80E v5, v9 ПО на сервис-картах IPv6/MPLS поддержка не указана
Enterasys коммутаторы S-Serie[9] и N-Serie[10] v5, v9 Аппаратная Поддержка IPv6 не указана
Flowmon Probe Probe 1000, 2000, 4000, 6000, 10000, 20000, 40000, 80000, 100000 v5, v9, IPFIX Программная или аппаратная Полная поддержка IPv6 и MPLS, wire-speed
Nortel коммутаторы Ethernet Routing Switch 5500 (ERS5510, 5520, 5530), 8600 v5, v9, IPFIX ПО на CPU линейной карты Полная поддержка IPv6
ПК и серверы Linux, FreeBSD, NetBSD, OpenBSD v5, v9, IPFIX fprobe[11], ipt-netflow[12], pflow[13], flowd[14], Netgraph ng_netflow[15], softflowd Поддержка IPv6 зависит от ПО
VMware-серверы vSphere 5.x[16] v5, IPFIX (>5.1)[17] Программная Поддержка IPv6 не указана
Mikrotik RouterOS RouterOS 3.x–6.x[18] v1, v5, v9, IPFIX (>6.36RC3) Программная/аппаратная Routerboard IPv6 в v9, нет поддержки номеров BGP AS

Варианты

NetFlow Security Event Logging от Cisco

С выпуском Cisco ASA 5580 появился режим NetFlow Security Event Logging, который использует поля и шаблоны NetFlow v9 для передачи телеметрии событий безопасности в высоконагруженных средах. Такой подход масштабируется лучше, чем syslog, при аналогичной детализации событий.

Мониторинг на выделенных пробах

undefined

В качестве альтернативы сбору данных с маршрутизаторов и коммутаторов, мониторинг потоков NetFlow может вестись на выделенных устройствах-пробах, подключённых прозрачно в разрыв контролируемого канала через TAP или SPAN-порт.

Такая архитектура проще внедряется на специализированной пробе, но имеет недостатки:

  • нужно использовать пробу на каждом контролируемом канале, что увеличивает затраты на hardware, внедрение и поддержку;
  • такие устройства не выдают раздельные данные о входящем и исходящем интерфейсах (как при сборе с маршрутизатора);
  • зачастую возникают сложности с точным заполнением полей NetFlow для данных маршрутизации (номера AS, маски), так как проба не работает с таблицей маршрутов.

Компромиссный вариант — развернуть пробу inline перед маршрутизатором и собирать все его NetFlow-выходы; это позволяет хранить большие объёмы записей (до нескольких лет) без вмешательства в настройки сети.

Подход на выделенных пробах оправдан для мониторинга критичных каналов, а сбор c маршрутизаторов даёт полный обзор для задач учёта, мониторинга производительности или безопасности.

История

NetFlow был изначально реализован как технология коммутации пакетов на маршрутизаторах Cisco (IOS 11.x, ок. 1996). Первой программной реализацией были Cisco 7000, 7200 и 7500[19]; решение создавалось как улучшение по сравнению с существующей в то время Cisco Fast Switching. Авторами NetFlow в Cisco считаются Даррен Керр и Барри Бруин[20] (см. патент США № 6243667).

Первый пакет в потоке инициировал создание записи NetFlow, использовавшейся для всех последующих пакетов данного потока до его окончания. Только первый пакет требовал поиска в таблице маршрутизации — что было ресурсоёмкой операцией для старых программных реализаций, не имевших отдельной базы маршрутизации (Forwarding information base). Фактически, запись NetFlow выступала частным кэшем маршрута (старые версии IOS упоминали такой кэш как ip route-cache).

Это решение было эффективно в локальных сетях (особенно — при использовании ACL, так как прохождение ACL требовалось только для первого пакета потока)[21].

Однако практика показала, что технология NetFlow как способ коммутации не подходит для магистральных маршрутизаторов (большое число параллельных потоков, множество коротких UDP-транзакций — например, DNS с рандомизацией портов).

В результате в качестве основной технологии коммутации NetFlow был вытеснен (ок. 1995) решением Cisco Express Forwarding (первоначально на Cisco 12000, затем — в IOS для 7200/7500).

По состоянию на 2012 год аналогичные механизмы NetFlow используются в современных файрволах и программных IP-маршрутизаторах, например, в подсистеме conntrack в Netfilter на Linux.

RFC

Примечания

Литература

Hofstede, Rick; Čeleda, Pavel; Trammell, Brian; Drago, Idilio; Sadre, Ramin; Sperotto, Anna; Pras, Aiko (2014). “Flow Monitoring Explained: From Packet Capture to Data Analysis with NetFlow and IPFIX”. IEEE Communications Surveys & Tutorials [англ.]. 16 (4): 2037—2064. DOI:10.1109/COMST.2014.2321898. Дата обращения 2024-06-01.

Категории