xenoeye
August 27, 2025 · View on GitHub
Легкий коллектор и анализатор Netflow/IPFIX/sFlow
С помощью этого коллектора вы сможете
- Мониторить трафик IP-сетей, отдельных IP-адресов или сервисов
- Быстро реагировать на всплески трафика или падение трафика ниже порога
- Наблюдать за характером трафика, распределением сетевых пакетов используя данные из Netflow/IPFIX/sFlow
Ключевые особенности
- Коллектор разрабатывался для средних и крупных сетей, с разными группами пользователей, которым нужны разные отчеты. Для этого используются "объекты мониторинга". Объект мониторинга может быть сетью, набором сетей, автономной системой, гео-объектом или произвольным сетевым трафиком, который можно выделить из Netflow/IPFIX/sFlow.
- C помощью коллектора можно генерировать различные отчеты, строить графики, дашборды в Grafana, выполнять какие-то действия, когда скорость трафика превышает пороги или становится ниже порогов.
- Мы используем коллектор для мониторинга своих сетей. У нас используется Netflow v9 и IPFIX, поэтому коллектор поддерживает их.
- Поддерживается также Netflow v5 и sFlow.
- В документации есть примеры построения простых отчетов. Для построения более сложных нужно хотя бы базовое знание SQL.
- В коллекторе используются текстовые конфигурационные файлы. Это позволяет писать простые конфиги вручную, а для сложных конфигураций с большим количеством объектов можно генерировать конфиги скриптами.
- Коллектор обрабатывает данные двумя способами: агрегирует их за периоды (временные окна фиксированного размера, для получения отчетов и графиков), и использует скользящие средние для быстрой реакции на всплески.
- Оба способа могут использоваться как по отдельности, так и совместно. Например, если с помощью скользящего среднего обнаружилось превышение порога, можно запустить пользовательский скрипт и сразу же включить сбор расширенной статистики.
- Мы используем скользящие средние для обнаружения объемных DoS/DDoS атак. При пробитии порогов создаются BGP-анонсы (FlowSpec фильтрация, rate-limit, перенаправление на сервера очистки или Blackhole) и пользователям приходит уведомление в мессенджер.
- Коллектор не очень требователен к ресурсам. Он вполне может обрабатывать данные и строить отчеты даже на Orange Pi (аналог Raspberry Pi) с 4 Гб памяти. На небольших сетях он может работать в VM с одним CPU и 1Гб RAM.
- Коллектор тестировался только под 64-битным Linux (x64, AArch64 и Эльбрус).
- Мы используем PostgreSQL в качестве хранилища для временных рядов. Туда экспортируются агрегированные по выбранным Netflow-полям данные. Коллектор может экспортировать не все данные в СУБД, он может агрегировать и экспортировать только top-N сущностей, а остальные агрегировать в одну строку. Это полезный механизм для крупных объектов мониторинга - можно регулировать количество данных, которые пишутся в СУБД и использовать более дешевые медленные диски.
- Кроме PostgreSQL в коллекторе есть экспериментальная поддержка хранения данных в ClickHouse.
- Из коробки поддерживается базовый набор Netflow/IPFIX-полей, но вы можете добавить почти любое нужное поле.
- У проекта очень либеральная лицензия ISC. У нас нет никаких планов делать коммерческие или частично коммерческие версии. Это значит, что мы не можем дать никаких прогнозов относительно будущего проекта. Но, с другой стороны:
- В коллекторе нет никаких скрытых или искусственных ограничений.
Производительность
Пользователи обычно интересуются хотя бы приблизительной оценкой производительности, поэтому мы сделали несколько тестов: записали в pcap-файлы реальный Netflow трафик разных роутеров и проиграли их на loopback-интерфейсе с помощью tcpreplay на разной скорости.
Тесты запускались на i3-2120 CPU @ 3.30GHz.
Очень грубо можно ориентироваться на такие цифры:
В отладочном режиме, когда в файл печатается содержимое каждого флова получилось около 100K flow в секунду на одном CPU.
В немного более приближенном к продакшен-режиму, с двумя объектами мониторинга, двумя скользящими окнами - около 700K fps на одном CPU.
Эти цифры лучше читать с пессимистичным настроением:
- если вы нагрузите коллектор многими объектами мониторинга с кучей отчетов и отладочной печатью, он может захлебнуться на 100K fps/CPU и меньше
- скорее всего 700K fps и больше на одном CPU обсчитать не получится
Про масштабирование на несколько ядер написано ниже в документации
LXC контейнер
С релизом v25.02 поставляется образ LXC-контейнера xe2502.tar.xz. Это привелегированный контейнер и он сконфигурирован для использования хостовой сети, используйте такую конфигурацию с крайней осторожностью. В контейнере находится коллектор c несколькими преднастроенными объектами мониторинга, PostgreSQL и Grafana.
Краткая инструкция по использованию:
# установите lxc
$ sudo apt install lxc
# распакуйте образ контейнера
$ sudo tar Jxf xe2502.tar.xz -C /var/lib/lxc
# запустите контейнер
$ sudo lxc-start --name xe2502
# запустите шелл контейнера
$ sudo lxc-attach --name xe2502
Внутри контейнера отредактируйте файл /etc/xenoeye/xenoeye.conf.
Если вы захватываете *flow с помощью pcap, добавьте capabilities:
# setcap "cap_net_admin,cap_net_raw,cap_dac_read_search,cap_sys_ptrace+pe" /usr/local/bin/xenoeye
Отредактируйте файл /var/lib/xenoeye/iplists/mynet, напишите туда свои сети (IPv4 и IPv6), а ненужные удалите.
Перезапустите сервис
# service xenoeye restart
Перейдите браузером на http://server-address:3000, должна открыться Grafana. Логин/пароль admin/admin.
В Графане преднастроено несколько дашбордов (Overview, AS/GeoIP, Routers, DoS/DDoS) отдельно для IPv4 и IPv6 адресов. Ниже в документации написано, как добавлять другие отчеты и настраивать скользящие средние.
Proxmox-шаблон
Также доступен шаблон для Proxmox: proxmox-xe2502.tar.xz
Документация
-
Пошаговая инструкция по установке и настойке
- Сборка и установка
- Проверяем получение Netflow
- Распределение нагрузки по нескольким CPU
- Частота семплирования
- Объекты мониторинга
- IP-списки
- Конфигурируем какие данные экспортировать в СУБД
- Экспорт в СУБД
- Простые отчеты по IP-адресам
- Определяем спам-ботов и ssh-сканеры
- Строим графики с помощью gnuplot
- Графики с помощью Python Matplotlib
- Визуализация трафика в Grafana
- Скользящие средние
- Настройка и установка порогов
- Скрипты и их параметры
- Расширенная статистика
- Оповещение об аномалиях с помощью Telegram-робота
-
- GeoIP
- Автономные системы
- Обновление баз без перезапуска коллектора
- Утилита xegeoq
- Визуализация GeoIP-данных и названий AS с помощью Grafana
- Классификация трафика
- sFlow
- Дополнительный анализ данных с помощью sFlow: DNS и SNI
- Вложенные/иерархические объекты мониторинга
- Классификация интерфейсов
- Падение трафика ниже порога
- Изменение порогов скользящих средних без перезапуска коллектора
- Экспорт данных в ClickHouse
Планы на будущее
Сейчас мы не планируем добавлять новые фичи. Cмотрим на стабильность, результаты работы, пытаемся исправить ошибки и сделать код более простым и понятным