Инструменты для сбора и анализа NetFlow v5/v9/IPFIX и sFlow: мощная фильтрация и агрегация трафика с синтаксисом, похожим на tcpdump; поддержка геолокации IP и обогащения данными об автономных системах.
# Kali / Debian / Ubuntu sudo apt install nfdump # Из исходников sudo apt install libbz2-dev liblz4-dev git clone https://github.com/phaag/nfdump cd nfdump && autoreconf -i && ./configure && make && sudo make install # Пример: чтение NetFlow файла nfdump -r netflow.bin -s record/bytes # Фильтрация по IP nfdump -r netflow.bin 'src ip 192.168.1.0/24'
nfdump — это мощный набор инструментов для сбора, обработки и анализа данных NetFlow, IPFIX и sFlow от сетевых устройств. Он поддерживает расширенную фильтрацию, агрегацию и обогащение (геолокация, AS, Tor) данных потоков с акцентом на эффективность, гибкость и расширяемость.
sh
./nfdump -r old-flowfile -y -w new-flowfile
nfdump может читать устаревшие файлы nfdump-1.6.x; все остальные программы требуют новый формат.nfdump использует систему сборки GNU autotools 2.71.
./autogen.sh
./configure
make
sudo make install
Если вы планируете запускать инструменты на той же системе, где они были собраны, можно включить дополнительные оптимизации:
./autogen.sh
./configure --enable-native --enable-lto
make
sudo make install
Это включает оптимизации, специфичные для процессора (-march=native), и оптимизацию на этапе компоновки (-flto) для повышения производительности.
Смотрите extra/docker/README.md.
Убедитесь, что у вас установлен autotools 2.71.
yum install centos-release-scl
yum install devtoolset-8-gcc devtoolset-8-gcc-c++
scl enable devtoolset-8 -- bash
Убедитесь, что у вас установлен autotools 2.71.
sudo apt-get install clang-10
CC=clang-10 ./configure ...
По умолчанию ./configure собирает:
nfcapd, sfcapdnfdump для обработки потоковgeolookup и torlookupПолный список можно получить, запустив ./configure --help. Параметры включают:
--enable-nfpcapd
Собрать nfpcapd для создания NetFlow из трафика интерфейса или pcap (по умолчанию: НЕТ)--enable-ja4
Включить все модули отпечатков JA4 (по умолчанию: НЕТ)--enable-jnat
Поддержка специального журналирования NAT JunOS (по умолчанию: НЕТ)--enable-readpcap
Включить чтение данных потоков из pcap-файлов в nfcapd (по умолчанию: НЕТ)--enable-ftconv
Собрать конвертер flow-tools в nfdump (по умолчанию: НЕТ)--enable-nfprofile
Собрать nfprofile и nftrack, необходимые для NfSen (по умолчанию: НЕТ)--enable-devel
Включить отладку и параметры для разработчиков. Только для разработчиков (по умолчанию: НЕТ)--with-lz4=PATH, --with-zstd=PATH, --with-bz2=PATH
Указать нестандартные пути установки для библиотек сжатия.--enable-lto
Включить оптимизацию на этапе компоновки (LTO), если она поддерживается. Это позволяет компилятору оптимизировать все исходные файлы во время финального этапа компоновки, повышая производительность и уменьшая размер исполняемого файла.--enable-native
Использовать -march=native для включения оптимизаций, специфичных для процессора сборки. Это включает векторизацию и настройку набора команд для локального процессора. Рекомендуется для локальных сборок, не для переносимых бинарных файлов.По сравнению с предыдущими версиями, скрипт конфигурации изменился: многие инструменты, которые ранее требовали явного включения, теперь собираются автоматически. Старые параметры --enable-xxxpath=path заменены стандартными --with-xxx=path.
Библиотеки сжатия ищутся и интегрируются, если найдены. Если вы хотите явно отключить библиотеку и, следовательно, метод сжатия, используйте формат --enable-xxx=no. Это отключит указанную библиотеку.
Следующие параметры больше не существуют:
--enable-nsel
Поддержка NSEL включена по умолчанию; вам нужно только изменить формат вывода, если вы предпочитаете устаревший формат line или long для NSEL/NAT. Соответствующие форматы fmt укажите в конфигурационном файле nfdump.conf.
Примечания:
Для более старых дистрибутивов Linux может потребоваться установка libbsd и libbsd-dev.
nfprofile — устаревший бинарный файл, используемый NfSen, и может быть перенесён в отдельный архив в будущем.
Экспортёр → nfcapd → nfdump → анализ/экспорт (CSV, JSON, InfluxDB, Prometheus)
nfdump предоставляет набор инструментов для сбора и обработки. Основные инструменты и примеры команд:
nfcapd -D -S 2 -w /flow_base_dir/router1 -p 23456
nfdump -r /flow_base_dir/router1/nfcapd.202501011200
nfdump -r flowfile 'src ip 192.0.2.1 and dst port 443' -A srcip,dstip
При необходимости включите и настройте базы данных geolookup/torlookup. Подробности смотрите в соответствующих страницах руководства (man geolookup, man torlookup).
Отправляйте метрики в InfluxDB или совместимые с Prometheus инструменты, используя nfinflux или nfexporter.
nfdump включает несколько связанных инструментов для расширенных рабочих процессов:
nfcapd Демон-сборщик NetFlow. Собирает потоки NetFlow версий v1/v5/v7/v9 и IPFIX от одного или нескольких экспортёров и сохраняет данные записей потоков в бинарные файлы nfdump.
sfcapd Демон-сборщик sFlow. Собирает потоки sflow v4/v6 (совместимые с sflowtool) от одного или нескольких экспортёров и сохраняет данные записей потоков в бинарные файлы nfdump.
nfpcapd
Преобразует трафик в реальном времени с сетевого интерфейса хоста или захваченный в pcap-файл трафик в записи NetFlow. Сохраняет данные записей потоков в бинарные файлы nfdump или пересылает поток данных в запущенный сборщик nfcapd на другом хосте.
nfdump Читает бинарные файлы nfdump, фильтрует записи потоков и выполняет пост-обработку. Расширенный язык фильтрации (см. доступную шпаргалку) позволяет выбирать потоки для обработки. Пост-обработка включает:
Гибкую агрегацию потоков
Обогащение потоков дополнительной информацией о геолокации и/или узлах выхода Tor.
geolookup
Поиск информации о стране, регионе, городе и, опционально, AS для IP-адресов. Для работы требуется база данных геолокации. Смотрите скрипт updateGeoDB.sh для создания базы данных.
torlookup
Поиск информации об узлах выхода Tor для IP-адресов. Для работы требуется база данных TorDB. Смотрите скрипт updateTorDB.sh для создания базы данных.
nfanon Анонимизирует IP-адреса в записях потоков с использованием CryptoPAn.
nfexpire Управляет истечением срока хранения старых данных потоков.
nfreplay Повторно воспроизводит собранные данные NetFlow для другого сборщика.
ft2nfdump Конвертирует формат flow-tools в формат nfdump. (опционально собирается)
nfprofile и nftrack
Программы, необходимые для NfSen. nfprofile фильтрует и организует потоки по профилям, а nftrack обеспечивает отслеживание портов для плагина PortTracker.
nfreader Фреймворк для пользовательского кода на C для обработки файлов nfdump. По умолчанию не устанавливается.
Собранные файлы данных могут быть сжаты с использованием LZO, LZ4, ZSTD или bzip2.
- LZO и LZ4 встроены и по умолчанию не требуют внешних зависимостей.
- ZSTD и bzip2 требуют системных библиотек, автоматически определяемых при сборке.
- Для сжатия на лету используйте опцию -z, например -z=lz4.
Пример:
nfcapd -z=lz4 ...
nfdump предназначен для анализа как исторических, так и текущих данных NetFlow, обеспечивая непрерывный или ретроспективный мониторинг сетевого трафика. Система оптимизирована для скорости и эффективности, позволяя выполнять сложную фильтрацию и агрегацию записей потока с синтаксисом, аналогичным tcpdump.
Пример структуры каталогов:
/flow_base_dir/router1
/flow_base_dir/router2
Каждый подкаталог соответствует разному источнику потока.
Пример ротации файлов:
nfcapd.YYYYMMDDhhmm (например, nfcapd.200907110845 содержит данные начиная с 11 июля 2009 08:45)
При интервале в 5 минут количество файлов в день составляет 288.
Хотя несколько источников потока могут быть отправлены в один коллекционер, рекомендуется запускать несколько коллекционеров в загруженных сетях.
Запуск двух коллекционеров на разных портах:
nfcapd -D -S 2 -B 1024000 -w /flow_base_dir/router1 -p 23456
nfcapd -D -S 2 -B 1024000 -w /flow_base_dir/router2 -p 23457
Сбор всех источников в один файл:
nfcapd -D -S 2 -w /flow_base_dir/routers -p 23456
Разделение собранных данных по источникам:
nfcapd -D -S 2 -n router1,172.16.17.18,/flow_base_dir/router1 \
-n router2,172.16.17.20,/flow_base_dir/router2 -p 23456
Подробное описание всех опций смотрите в nfcapd(1).
Данные могут анализироваться из одного файла или путем объединения нескольких файлов. Выходные данные могут быть в формате ASCII-текста или в бинарном формате для дальнейшей обработки.
Пример:
nfdump -r /flow_base_dir/router1/nfcapd.202501011200
Синтаксис фильтров мощный и вдохновлен tcpdump, но адаптирован для данных потока. Например:
nfdump -r flowfile 'src ip 192.0.2.1 and dst port 443'
Правила фильтров можно комбинировать, потоки — агрегировать и выводить в различных форматах, включая CSV для постобработки.
Включение NetFlow на интерфейсе:
interface fastethernet 0/0
ip address 192.168.92.162 255.255.255.224
ip route-cache flow
Экспорт данных NetFlow:
ip flow-export 192.168.92.218 9995
ip flow-export version 5
ip flow-cache timeout active 5
Это разбивает долгоживущие потоки на 5-минутные сегменты. Можно установить любое количество минут от 1 до 60.
Пример полного экспорта NetFlow v9 с сэмплированием:
interface Ethernet1/0
ip address 192.168.92.162 255.255.255.224
duplex half
flow-sampler my-map
!
!
flow-sampler-map my-map
mode random one-out-of 5
!
ip flow-cache timeout inactive 60
ip flow-cache timeout active 1
ip flow-capture fragment-offset
ip flow-capture packet-length
ip flow-capture ttl
ip flow-capture vlan-id
ip flow-capture icmp
ip flow-capture ip-id
ip flow-capture mac-addresses
ip flow-export version 9
ip flow-export template options export-stats
ip flow-export template options sampler
ip flow-export template options timeout-rate 1
ip flow-export template timeout-rate 1
ip flow-export destination 192.168.92.218 9995
Подробную информацию о конфигурации NetFlow смотрите в документации вашего устройства.
Примечание: NetFlow v5 и v7 используют 32-битные счетчики, которые могут переполниться на загруженных маршрутизаторах. Чтобы избежать переполнения, уменьшите тайм-аут кэша потока. Все инструменты nfdump используют 64-битные счетчики внутри.
По умолчанию частота сэмплирования равна 1 (без сэмплирования) или значению, указанному через -s. Если поток NetFlow содержит информацию о сэмплировании, это значение имеет приоритет. Nfcapd автоматически распознает сэмплирование, когда оно объявлено в опциональных шаблонах v9/IPFIX с установленными тегами (#302, #304, #305, #306, #48, #49, #50, #34, #35), или в неофициальном хаке заголовка v5. Данные о сэмплировании хранятся в полях информации о сэмплировании в записи потока.
Примечание: Не все платформы (или версии программного обеспечения поставщиков) поддерживают экспорт информации о сэмплировании в данных NetFlow, даже если сэмплирование настроено. Количество байтов и пакетов в каждой записи NetFlow автоматически умножается на частоту сэмплирования. Общее количество потоков не изменяется, так как это недостаточно точно (маленькие потоки против больших).
--enable-jnat).Если вы считаете nfdump полезным, пожалуйста, поддержите разработку:
GitHub Sponsors: phaag
nfdump выпущен под лицензией BSD. Подробности смотрите в файле LICENSE.
man nfdump, man nfcapd и т.д.) или запустите любой инструмент с опцией -h.