Введение
Начнем серию статей под названием 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 - Мониторинг это просто)
Автор: d3f0x0