Введение
Начнем серию статей под названием Detection is easy, посвященных Detection engineering (DE), о чем я пишу в одноименном Telegram-канале. Один из этапов DE — определение источников событий и организация их сбора. В этой статье мы рассмотрим установку Elastiflow — это мощное решение для обработки и визуализации сетевых данных, построенное на основе стека ELK (Elasticsearch, Logstash, Kibana). Elastiflow предоставляет возможность собирать, обрабатывать и анализировать данные из различных сетевых протоколов, таких как NetFlow, sFlow и IPFIX. Основное преимущество Elastiflow по сравнению с классическим ELK-стеком заключается в оптимизированном агенте сбора сетевой телеметрии, а также в наличии готовых дашбордов и визуализаций, которые упрощают анализ сетевого трафика.
Изначально проект развивался на GitHub, однако разработчики перешли к коммерческому решению — flow-collector
, который демонстрирует значительно более высокую производительность по сравнению с версией, доступной на GitHub. Более подробную информацию о различиях можно найти в документации. Политика лицензирования позволяет бесплатно использовать продукт, но если ты зарегистрируешься, то будет доступно порядка 480 полей и использование одного инстанса (4000 записей в секунду, без регистрации 500).
Подготовка операционной системы
Чтобы минимизировать вероятность потери данных, во время скачков трафика, следует изменить сетевые параметры ядра Linux, как предложено в документации. Можешь создать в файл в директории /etc/sysctl.d/
, чтобы они применялись автоматически при загрузке системы. Если у тебя менее 75000 потоков в секунду:
net.core.netdev_max_backlog=4096 net.core.rmem_default=262144 net.core.rmem_max=67108864 net.ipv4.udp_rmem_min=131072 net.ipv4.udp_mem=2097152 4194304 8388608
если более 75000 потоков в секунду:
net.core.netdev_max_backlog=8192 net.core.rmem_default=262144 net.core.rmem_max=134217728 net.ipv4.udp_rmem_min=131072 net.ipv4.udp_mem=4194304 8388608 16777216
Вспомним за что отвечают параметры ядра выше, подробнее про тюнинг сетевой части ядра Linux можно почитать здесь (kermel, 0, 1,2 , 3, 4, 5):
-
net.core.netdev_max_backlog — максимальное количество пакетов, которые могут быть поставлены в очередь на обработку в сетевом интерфейсе.
-
net.core.rmem_default — размер буфера по умолчанию для приема .
-
net.core.rmem_max — максимальный размер буфера который может быть установлен приложением для приема.
-
net.ipv4.udp_rmem_min — этот параметр задает минимальный размер буфера для приема UDP для приема.
-
net.ipv4.udp_mem — этот параметр задает три значения, которые определяют пороги потребления памяти протоклом UDP.
Установка и настройка flow-collector
Для запуска flow-collector
на Debian/Ubuntu выполним следующие команды:
# Установим необходимые библиотеки apt install libpcap-dev ca-certificates # Загрузим deb-пакет wget https://elastiflow-releases.s3.us-east-2.amazonaws.com/flow-collector/flow-collector_7.5.3_linux_amd64.deb # Установим пакет dpkg -i flow-collector_7.5.3_linux_amd64.deb
Файлы конфигурации расположены в /etc/elastiflow
. Перед началом работы нам нужно отредактировать файл flowcoll.yml
.
На сайте разработчика доступен docker-compose для запуска flow-collector
в контейнере.
Как уже упоминалось, конфигурационный файл Elastiflow находится в директории /etc/elastiflow
. Для начала работы необходимо изменить значение параметра EF_LICENSE_ACCEPTED
на "true"
. В отличие от своего предшественника, flow-collector
поддерживает стандартный вывод в такие системы, как Kafka, Elasticsearch, OpenSearch, Grafana, Splunk и другие.
Для передачи данных в Elasticsearch, нужно раскомментировать строки, которые начинаются с EF_OUTPUT_ELASTICSEARCH_*
и установить значение true
для EF_OUTPUT_ELASTICSEARCH_ENABLE
.
Разработчики предоставили удобный docker-compose
файл для создания тестовой лаборатории, а также для более производительных сред. Это позволит тебе быстро развернуть необходимую инфраструктуру и начать работу с сетевыми данными без лишних усилий.
Для теста Elasticsearch и Kibana использовал следующий docker-compose:
```yaml version: '3' services: kibana: image: docker.elastic.co/kibana/kibana:7.13.1 container_name: kibana restart: unless-stopped network_mode: host depends_on: - elasticsearch environment: TELEMETRY_OPTIN: 'false' TELEMETRY_ENABLED: 'false' NEWSFEED_ENABLED: 'false' SERVER_HOST: '0.0.0.0' SERVER_PORT: 5601 SERVER_MAXPAYLOADBYTES: 8388608 ELASTICSEARCH_HOSTS: 'http://elasticsearch:9200' ELASTICSEARCH_REQUESTTIMEOUT: 132000 ELASTICSEARCH_SHARDTIMEOUT: 120000 KIBANA_AUTOCOMPLETETIMEOUT: 3000 KIBANA_AUTOCOMPLETETERMINATEAFTER: 2500000 elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.13.1 container_name: elasticsearch restart: unless-stopped ulimits: memlock: soft: -1 hard: -1 nofile: soft: 131072 hard: 131072 nproc: 8192 fsize: -1 network_mode: host volumes: - /var/lib/elasticsearch:/usr/share/elasticsearch/data environment: ES_JAVA_OPTS: '-Xms512M -Xmx512M' cluster.name: elastiflow node.name: first bootstrap.memory_lock: 'true' network.bind_host: 0.0.0.0 http.port: 9200 http.publish_port: 9200 discovery.type: 'single-node' indices.query.bool.max_clause_count: 8192 search.max_buckets: 250000 action.destructive_requires_name: 'true' reindex.remote.whitelist: '*:*' reindex.ssl.verification_mode: 'none' xpack.monitoring.collection.enabled: 'true' xpack.monitoring.collection.interval: 30s ```
Осталось загрузить объекты для визуализации в Kibana. Их можно взять в документации к продукту. Для импорта перейдем в Stack Management -> Saved Objects.
Для эмуляции Netflow я направил трафик с OPNsense и с утилиты nflow-generator.
nflow-generator генерирует NetFlow v5, с помощью которого мы можем проверить правильность настройки нашего стенда.
Для запуска nflow-generator используем docker контейнер:
docker run -it --rm networkstatic/nflow-generator -t <flow_collector_ip> -p <flow_collector_port> --flow-count=1000
Заключение
Подготовка вышеописанной инфраструктуры занимает не так много времени, как выбор и настройка сетевого оборудования для отправки данных о трафике. Использование метаданных о сессиях для обнаружения атак не является чем-то новым. Сейчас повсеместно используются дорогостоящие для внедрения NTA/NDR решения, но не стоит списывать со счетов NetFlow и его аналоги, они хороши малым весом событий и достаточны для выявления аномалий в сети. В продолжении серии статей, мы проведем ряд атак и постараемся их обнаружить, с помощью данных из NetFlow.
Спасибо за внимание! Присоединяйся к каналу в Telegram — Мониторинг это просто)
ссылка на оригинал статьи https://habr.com/ru/articles/871898/
Добавить комментарий