- PVSM.RU - https://www.pvsm.ru -
Начнем серию статей под названием Detection is easy, посвященных Detection engineering (DE), о чем я пишу в одноименном Telegram-канале [1]. Один из этапов DE - определение источников событий и организация их сбора. В этой статье мы рассмотрим установку Elastiflow — это мощное решение для обработки и визуализации сетевых данных, построенное на основе стека ELK (Elasticsearch, Logstash, Kibana). Elastiflow предоставляет возможность собирать, обрабатывать и анализировать данные из различных сетевых протоколов, таких как NetFlow, sFlow и IPFIX. Основное преимущество Elastiflow по сравнению с классическим ELK-стеком заключается в оптимизированном агенте сбора сетевой телеметрии, а также в наличии готовых дашбордов и визуализаций, которые упрощают анализ сетевого трафика.
Изначально проект развивался на GitHub [2], однако разработчики перешли к коммерческому решению — flow-collector
, который демонстрирует значительно более высокую производительность по сравнению с версией, доступной на GitHub. Более подробную информацию о различиях можно найти в документации [3]. Политика лицензирования [4] позволяет бесплатно использовать продукт, но если ты зарегистрируешься, то будет доступно порядка 480 полей и использование одного инстанса [5] (4000 записей в секунду, без регистрации 500).
Чтобы минимизировать вероятность потери данных, во время скачков трафика, следует изменить сетевые параметры ядра Linux, как предложено в документации [6]. Можешь создать в файл в директории /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 можно почитать здесь [7] (kermel [8], 0 [9], 1 [10],2 [11] , 3 [12], 4 [13], 5 [14]):
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
на 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
файл для создания тестовой лаборатории [15], а также для более производительных сред. Это позволит тебе быстро развернуть необходимую инфраструктуру и начать работу с сетевыми данными без лишних усилий.
Для теста 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. Их можно взять в документации [16] к продукту. Для импорта перейдем в Stack Management -> Saved Objects.
Для эмуляции Netflow я направил трафик с OPNsense и с утилиты nflow-generator [17].
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 [1] - Мониторинг это просто)
Автор: d3f0x0
Источник [18]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/netflow/406938
Ссылки в тексте:
[1] Telegram-канале: https://t.me/detectioneasy
[2] GitHub: https://github.com/robcowart/elastiflow/tree/master
[3] документации: https://(https://elastiflow.gitbook.io/docs/elastiflow-documentation/data-platforms/elastic/elastiflow-vs.-filebeat-and-logstash)
[4] Политика лицензирования: https://www.elastiflow.com/subscriptions
[5] одного инстанса: https://docs.elastiflow.com/docs/flowcoll/config_gen
[6] документации: https://docs.elastiflow.com/docs/flowcoll/requirements#recommended-kernel-tuning
[7] можно почитать здесь: https://habr.com/ru/companies/otus/articles/550820/
[8] kermel: https://www.kernel.org/doc/html/latest/admin-guide/sysctl/net.html#
[9] 0: https://blog.packagecloud.io/monitoring-tuning-linux-networking-stack-receiving-data/
[10] 1: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/monitoring_and_managing_system_status_and_performance/tuning-the-network-performance_monitoring-and-managing-system-status-and-performance#tuning-network-adapter-settings_tuning-the-network-performance
[11] 2: https://wiki.archlinux.org/title/Sysctl
[12] 3: https://www.ibm.com/docs/en/linux-on-systems?topic=recommendations-network-performance-tuning
[13] 4: https://maxidrom.net/archives/1478
[14] 5: https://habr.com/ru/companies/ostrovok/articles/440782/
[15] тестовой лаборатории: https://docs.elastiflow.com/docs/data_platforms/elastic/cluster_xsmall
[16] документации: https://docs.elastiflow.com/docs/data_platforms/elastic/kibana
[17] nflow-generator: https://github.com/nerdalert/nflow-generator
[18] Источник: https://habr.com/ru/articles/871898/?utm_campaign=871898&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.