Вчера в подборке упомянул NetFlow collector GoFlow2, с которым я лично не работал никогда. Решил на него посмотреть. На первый взгляд кажется простым и удобным решением, которое состоит из одного исполняемого файла на Go с параметрами, передаваемыми через ключи запуска.GoFlow2 может собирать данные из разных источников, объединять их и выгружать в json формате. А дальше данные можно забирать в любую систему обработки логов - Loki, Elasticsearch, Clicklhouse. Достаточно скачать бинарник и запустить:# ./goflow2 -transport=file -transport.file=/var/log/goflow/goflow2.log -format=jsonGoflow2 запустится и будет слушать следующие порты:◽️6343 для приёма sFlow◽️2055 для приёма NetFlow◽️8080 для передачи метрик о своей работе в формате Prometheus (url - /metrics)Я для теста взял Mikrotik и в разделе IP ⇨ Traffic Flow ⇨ Targets указал IP адрес машины, где запустил Goflow2. Данные о трафике сразу полились в неё. Поднял рядом Prometheus, добавил job для сбра метрик коллектора: - job_name: 'goflow2' metrics_path: '/metrics' static_configs: - targets: ['10.20.1.9:8080']К сожалению, не нашёл готового дашборда для Grafana. Похоже, его вообще не существует. Из полезных метрик непосредственно Goflow2 - информация о пакетах (goflow2_flow_traffic_packets_total) и байтах (goflow2_flow_traffic_bytes_total) с каждого источника. Можно просто отслеживать всплески и аномалии без детальной разбивки по направлениям и типам соединений. ИИ не смог мне родить рабочий дашборд, сколько его не мучал, только время потерял. В итоге вручную посмотрел на метрики и прикинул, что там может быть полезным. Метрик много, детально во все не вникал.Дальше можно детально распарсить трафик из файлов, которые формирует goflow2. В репозитории есть пример, как это сделать с помощью ELK Stack. Там поднимается стандартный стек с обработчиком логов в виде Logstash. В compose файле прописаны образы из репозитория docker.elastic.co, к которому доступ из РФ закрыт. Можно просто заменить их на docker hub, то есть вместо docker.elastic.co/elasticsearch/elasticsearch:7.13.0 указать elasticsearch:7.13.0. Я запустил этот docker-compose.yml и без проблем стартовал весь стек именно на указанных старых версиях. Можно более свежие поставить, но там больше заморочек с безопасностью и аутентификацией. Придётся https настраивать, учётные записи. Для проверки работы коллектора всё это не нужно.После запуска через:# docker-compose upНеобходимо зайти в Kibana по IP адресу сервера и порт 5601 и добавить новый индекс в разделе Stack Management ⇨ Index Management. В качестве index pattern укажите logstash-*, а в качестве time filter - @timestamp из выпадающего списка.Теперь можно идти в Discover, выбирать шаблон индекса logstash-* и смотреть информацию по трафику. Так как источник данных уже в виде json, все поля проиндексированы и вы можете строить выборки по src_addr, dst_addr, dst_port и т.д. Готового шаблона для Kibana я, к сожалению, тоже не нашёл. Так что это решение только для тех, кто работает с ELK и умеет создавать дашборды. Там нет чего-то сильно сложного, но с полтычка тоже не осилить. Надо уметь с ним работать. Можно настроить geo карту, суммировать трафик по направлениям и выводить лидеров, объединять запросы по TCP или UDP портам и т.д. Я показал пример с ELK, но ничто не мешает эти же логи отправить, например, в Loki и смотреть их там. Либо в любое другое хранилище. Так как они в формате json, отдельно парсить их не надо. В целом, GoFlow2 мне понравился. Никаких особых заморочек. Просто запускаешь и всё работает. Другое дело, что это не готовая система для анализа трафика, а просто сборщик. Дальнейшую обработку и визуализацию полученных данных нужно выполнять самостоятельно. Зато можно сделать так, как вам нужно. И это будет полностью бесплатно.❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.#netflow #elk