Установка FlowCollector на Ubuntu 22.04
В зависимости от выбранного варианта интеграции требования к аппаратной платформе, процессу установки и уровню производительности могут различаться. Рекомендуется следовать инструкциии на всех этапах установки. В случае возникновения вопросов обращайтесь к поставщику программного обеспечения.
1. Аппаратные и программные требования
- Операционная система: Ubuntu Server 22.04.2 LTS
Использование других версий или дистрибутивов не гарантирует корректную работу ПО. - Процессор: Intel Xeon, не менее 10 физических ядер.
Допускается также использование процессоров AMD EPYC с сопоставимой производительностью. Использование других процессоров сторонних производителей не рекомендуется и не поддерживается. - Оперативная память: не менее 8 ГБ
- Дисковое пространство: не менее 100 ГБ
- Сетевые интерфейсы:
- Для режима зеркалирования (DPDK): минимум 2 физических интерфейса:
- Управляющий интерфейс
- Интерфейс для обработки трафика (должен поддерживаться DPDK).
Интерфейс резервируется полностью для FlowCollector, его использование для других целей невозможно.
- Для режима NetFlow: минимум 1 сетевой интерфейс.
- Для режима зеркалирования (DPDK): минимум 2 физических интерфейса:
- Рекомендуемые сетевые адаптеры: Mellanox (mlx5 или mlx6), Intel X520-DA2
- Права пользователя: Требуется пользователь с правами sudo для запуска установочных скриптов.
1.1. Выбор и подготовка режима интеграции
Режим зеркалирования (Port Mirror, DPDK)
- Рекомендуется для производительных конфигураций и скоростей обработки выше 30 Gbps.
- Требует выделения отдельного физического интерфейса для обработки трафика (режим DPDK).
- На сетевом оборудовании необходимо настроить зеркалирование трафика (port-mirror) с использованием GRE-туннеля и необходимого коэффициента (например, 1:1000).
- После настройки зеркалирования интерфейс будет полностью использоваться FlowCollector.
Пример настройки зеркалирования трафика
# Port mirroring
port-mirroring
mirror-once;
input {
rate 1000;
run-length 0;
}
instance {
flowcollector {
input {
rate 250;
run-length 0;
}
family inet {
output {
interface gr-0/0/0.15 {
next-hop 172.20.5.2;
}
}
}
gr-0/0/0.15
description --Tunnel-to-flowcollector;
tunnel {
source IP;
destination IP;
}
family inet {
address 172.20.5.1/30;
}
firewall filter flowcollector-input
term default {
then {
port-mirror-instance flowcollector;
accept;
}
}
ae0.2020
description UPSTREAM;
vlan-id 2020;
family inet {
filter {
input flowcollector-input;
}
sampling {
input;
}
address 10.12.0.2/30;
}
Режим NetFlow v10 (IPFIX)
- Используется для семплирования трафика.
- Поддерживается только стандарт NetFlow v10 (IPFIX).
- Другие стандарты NetFlow (например, v5 или v9) не поддерживаются.
- Необходимо настроить семплирование пакетов в сторону выделенного сетевого интерфейса.
1.2. Подготовка сетевого оборудования
Для режима DPDK:
- Настройте зеркалирование пакетов на уровне сетевого оборудования в сторону выделенного интерфейса.
- Проверьте, что драйвер выбранного сетевого адаптера поддерживается DPDK.
Для режима NetFlow v10 (IPFIX):
- Настройте отправку семплированных пакетов на соответствующий сетевой интерфейс.
1.3. Подготовка аппаратной платформы
- Установите рекомендованную для запуска ОС: Ubuntu Server 22.04 LTS
*В случае использования других ОС - успешный запуск ПО не гарантирован - Используйте рекомендованные CPU: только Intel Xeon
*В случае использования CPU сторонних производителей (например, AMD) - успешный запуск ПО не гарантирован - Используйте рекомендованные сетевые карты: Mellanox (mlx5 или mlx6) или Intel (X520-DA2)
2. Подготовка операционной системы
2.1 Установка обновлений ОС
Для обновления ОС Ubuntu необходимо выполнить следующие команды:
sudo apt update
sudo apt upgrade
2.1 Подключение репозитория Servicepipe
Подключить репозиторий Servicepipe возможно двумя способами: через скрипт или вручную. Для подключения к репозиторию потребуются логин и пароль. Эти учетные данные предоставляются индивидуально для каждого заказчика. Получить их возможно запросив у вендора (Servicepipe или партнёра).
2.1.1 Подключение с помощью скрипта
Выполнить скрипт для автоматической настройки репозитория:
curl -o "./setup-repo.sh" "https://public-repo.svcp.io/setup_script/setup-repo.sh" && \
sudo chmod +x "./setup-repo.sh" && \
sudo ./setup-repo.sh
При запуске скрипта потребуется ввести логин и пароль. После ввода учетных данных скрипт выполнит все необходимые действия автоматически. В случае некорректной работы скрипта рекомендуется использовать метод ручной настройки репозитория.
2.1.2 Подключение вручную
Добавить ключ:
sudo wget --http-user=[ваш логин] --http-password=[ваш пароль] -O - https://public-repo.svcp.io/keyFile | \
sudo gpg --dearmor -o /etc/apt/keyrings/servicepipe.gpg
Добавить репозиторий:
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/servicepipe.gpg] https://public-repo.svcp.io/ubuntu/ xenial contrib" > /etc/apt/sources.list.d/servicepipe.list
Добавить авторизационные данные:
echo 'machine public-repo.svcp.io login [ЛОГИН] password [ПАРОЛЬ]' > /etc/apt/auth.conf
Проверить доступность репозитория:
sudo apt update
3 Установка компонентов FlowCollector
3.1 Состав метапакетов
Установка FlowCollector включает четыре метапакета:
Метапакет | Компоненты |
---|---|
flowcollector Основные компоненты |
• analyzer • sp-events • spider-only (включает свои зависимости, см. ниже) • dpdk |
spider-only (в составе flowcollector) |
• nodejs • libpq-dev • postgresql • rabbitmq-server • sp-spider-broker • sp-spider |
flowcollector-additional Сторонние зависимости |
• curl • postgresql • mongodb-org • clickhouse-server • clickhouse-client • nats-server • natscli • nginx • libpq-dev • libatomic1 • zlib1g-dev • libpcap-dev • libnuma-dev • libssl-dev • libbpf-dev • libfdt-dev • libisal-dev • libibverbs-dev • ibverbs-providers • libprotobuf-dev • libgrpc++-dev • protobuf-compiler • protobuf-compiler-grpc • libsnmp-dev |
flowcollector-monitoring Компоненты мониторинга |
• carbon-clickhouse • graphite-clickhouse • carbonapi |
Примечание:
Пакет flowcollector-monitoring можно не устанавливать, если система мониторинга развернута на отдельном сервере.
3.2 Установка компонентов
Выполнить следующую команду:
sudo NEEDRESTART_MODE=a apt-get install -y \
flowcollector-additional \
flowcollector \
flowcollector-monitoring
3.3 Расчёт и настройка Hugepages
Hugepages - это крупные страницы памяти. Используются для повышения производительности при обработке большого объёма сетевых данных и оптимизации работы с памятью.
Количество hugepages вычисляются по формуле:
H = (R х 1024) / (P х S)
- H - количество hugepages
- R - объем RAM, выделяемый для FlowCollector (в GB)
- P - размер страницы (фиксированное значение 2048 kB)
- S - количество NUMA-узлов (определяется командой):
ls -d /sys/devices/system/node/node* | wc -l
- Коэффициент 1024 используется для перевода GB в MB.
Пример для двух нод NUMA:
- RAM: 160 GB (из них выделяемые для FlowCollector - 80 GB)
- Sockets: 2
H = 80 GB х 1024 / (2 MB х 2 sockets) = 20480
Открыть текстовый редактор для создания скрипта:
sudo nano /opt/spfc/bin/create_hugepages.sh
Вставить следующий код в открытый файл:
#!/bin/bash
mkdir -p /dev/hugepages
mountpoint -q /dev/hugepages || mount -t hugetlbfs nodev /dev/hugepages
#node 0 (CPU 0)
echo 20480 | sudo tee /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
#node 1 (CPU 1)
echo 20480 | sudo tee /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
Пример для одной ноды NUMA:
- RAM: 16 GB (из них выделяемые для FlowCollector - 12GB)
- Sockets: 1
H = 12 GB х 1024 / (2 MB х 1 sockets) = 6144
Открыть текстовый редактор для создания скрипта:
sudo nano /opt/spfc/bin/create_hugepages.sh
Скопировать и вставить следующий код в открытый файл:
#!/bin/bash
mkdir -p /dev/hugepages
mountpoint -q /dev/hugepages || mount -t hugetlbfs nodev /dev/hugepages
#node 0 (CPU 0)
echo 6144 | sudo tee /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
Внимание:
В настоящий момент проводится тестирование различных конфигураций, и формула расчёта количества hugepages может быть скорректирована. Для получения актуальных рекомендаций по настройке hugepages рекомендуется обращаться к специалистам команды Servicepipe.
3.4 Настройка Clickhouse
Clickhouse — это высокопроизводительная аналитическая колоночная СУБД, используемая для хранения, обработки и анализа больших объёмов данных в реальном времени. В рамках работы FlowCollector, clickhouse предназначен для хранения метрик, flow-данных и справочной информации, а также для обеспечения быстрого доступа к аналитическим данным.
1. Запустить службу clickhouse-server и проверить её состояние на наличие ошибок:
sudo systemctl start clickhouse-server && systemctl status clickhouse-server
2. Для корректной работы FlowCollector требуется создать следующие таблицы в Clickhouse:
- graphite — метрики;
- graphite_index — индексы метрик;
- graphite_tagged — теги graphite;
- flows — таблица для хранения flow-данных;
- asn_dict — справочник ASN (для SP-Spider Explorer);
- cidr_location_dict — справочник CIDR-локаций (для SP-Spider Explorer);
- geo_name_dict — справочник географических названий (для SP-Spider Explorer);
- flows_fast_dataset — основная таблица для обработки flows;
- flows_fast_dataset_mv — материализованное представление fast_dataset;
- flows_full_dataset — полная таблица для хранения flows;
- flows_full_dataset_mv — материализованное представление full_dataset.
Примечание:
Если при установке clickhouse был установлен пароль для пользователя, использовать соответствующую команду с параметром--password
. Если пароль не задавался, выполнять команду без этого параметра.
Clickhouse без пароля:
clickhouse-client --multiline --multiquery < /usr/share/doc/clickhouse-server/graphite/fc-init.sql
Clickhouse с паролем:
clickhouse-client --multiline --multiquery --password=[пароль clickhouse] < /usr/share/doc/clickhouse-server/graphite/fc-init.sql
3. Проверить, что все необходимые таблицы созданы (ожидается 11 таблиц):
Clickhouse без пароля:
clickhouse-client --query="SHOW TABLES" | wc -l
Clickhouse с паролем:
clickhouse-client --query="SHOW TABLES" --password=[пароль clickhouse] | wc -l
3.5 Настройка Clickhouse-server (только если для Clickhouse задан пароль)
1. Если при установке clickhouse был установлен пароль для пользователя, необходимо отредактировать конфигурационный файл:
sudo nano /etc/carbon-clickhouse/carbon-clickhouse.conf
В секциях [upload.graphite]
и [upload.graphite_index]
указать параметры подключения в формате:
default:[пароль clickhouse]@localhost:8123
вместо стандартного localhost:8123
.
2. Включить автозапуск сервиса и проверить его состояние:
sudo systemctl enable --now carbon-clickhouse && systemctl status carbon-clickhouse
3.6 Настройка Graphite-clickhouse (только если для Clickhouse задан пароль)
1. Если при установке clickhouse был установлен пароль для пользователя, необходимо отредактировать конфигурационный файл:
sudo nano /etc/graphite-clickhouse/graphite-clickhouse.conf
В секции [clickhouse]
указать параметры подключения в формате:
default:[пароль clickhouse]@localhost:8123
вместо стандартного localhost:8123
.
2. Включить автозапуск сервиса и проверить его состояние:
sudo systemctl enable --now graphite-clickhouse && systemctl status graphite-clickhouse
3.7 Настройка Carbonapi
Carbonapi — это сервис для обработки и агрегации запросов к временным рядам метрик, получаемых из хранилища Clickhouse и других совместимых back-end систем. Carbonapi реализует совместимый с Graphite API, обеспечивая быстрый доступ к данным метрик и поддержку различных функций агрегации.
Включить автозапуск службы carbonapi и проверить её состояние:
sudo systemctl enable --now carbonapi && systemctl status carbonapi
3.8 Настройка MongoDB
MongoDB — это документо-ориентированная база данных, используемая для хранения событий и другой структурированной информации, необходимой для работы компонентов FlowCollector.
1. Запустить службу MongoDB и включить автозапуск, затем проверить текущее состояние:
sudo systemctl enable --now mongod && systemctl status mongod
2. Создать коллекцию reports в базе данных test:
mongosh test --eval 'db.createCollection("reports")'
3. Создать пользователя для работы приложений. Указать имя пользователя и пароль в соответствии с политикой безопасности вашей организации.
Выполнить в командной строке:
mongosh
db.createUser(
{
user: "events",
pwd: "events",
roles: [ { role: "readWrite", db: "test" } ]
}
)
exit
4. Отредактировать файл конфигурации MongoDB:
sudo nano /etc/mongod.conf
Добавить или раскомментировать секцию security, включив авторизацию:
security:
authorization: enabled
Для автоматизации изменения можно использовать команду:
sudo sed -i 's/^#\?security:/security:\n authorization: enabled/' /etc/mongod.conf
Перезапустить службу MongoDB для применения изменений:
sudo systemctl restart mongod
Примечание:
После включения авторизации для всех подключений к MongoDB потребуется указание имени пользователя и пароля.
3.9 Настройка PostgreSQL
PostgreSQL — это объектно-реляционная система управления базами данных, используемая для хранения служебной информации и сессий различных компонентов FlowCollector.
1. Подключиться к PostgreSQL под пользователем postgres:
sudo -u postgres psql
2. Создать базы данных и пользователей, назначить права доступа, выполнив соответствующие команды в интерактивной консоли (пароли задать согласно требованиям безопасности вашей организации).:
CREATE DATABASE spider;
CREATE DATABASE grafana;
CREATE USER spider WITH ENCRYPTED PASSWORD 'spider';
GRANT ALL PRIVILEGES ON DATABASE spider TO spider;
CREATE USER grafana WITH ENCRYPTED PASSWORD 'grafana';
GRANT ALL PRIVILEGES ON DATABASE grafana TO grafana;
3. Переключиться в базу данных grafana и создать таблицу сессий:
\c grafana
CREATE TABLE session (
key CHAR(16) NOT NULL,
data bytea,
expiry INT NOT NULL,
PRIMARY KEY (key)
);
\q
3.10 Настройка NATS
NATS — это высокопроизводительная система обмена сообщениями (message broker), применяемая для интеграции сервисов FlowCollector и доставки событий между компонентами.
1. Включить автозапуск и запустить сервис NATS-server:
sudo systemctl enable --now nats-server
2. Создать поток с использованием конфигурационного файла:
nats stream add --config /opt/nats/stream.conf
3. Создать обработчик сообщений (используются настройки по умолчанию):
nats consumer add \
--pull \
--deliver all \
--ack explicit \
--wait 30s \
--replay instant \
--max-pending 1000 \
--max-waiting 512 \
--inactive-threshold 0 \
analyzer first
3.11 Настройка RabbitMQ
RabbitMQ — это брокер сообщений, обеспечивающий обмен данными между различными сервисами и модулями в инфраструктуре FlowCollector.
1. Создать пользователя с именем и паролем, соответствующими требованиям безопасности вашей организации:
sudo rabbitmqctl add_user "spider" "spider"
2. Выдать пользователю spider разрешения на операции configure
, write
и read
для всех объектов системы:
sudo rabbitmqctl set_permissions -p "/" "spider" ".*" ".*" ".*"
3.12 Настройка конфигурации FlowCollector
Конфигурация разделена на логические блоки для удобства восприятия. С неразделённым вариантом конфигурации можно ознакомиться по ссылке.
С неразделённым вариантом конфигурации можно ознакомиться здесь
# Параметры логирования
log:
# Уровень логирования
# trace, debug, info, warn/warning, error, fatal
# ПРИМЕЧАНИЕ: уровни trace и debug могут быть отключены в определенных типах сборки (Release)
level: debug
# Параметры привязки логических ядер
# Опционально. Если не указать, распределение произойдёт автоматически
# lcore-mapping:
# Режим привязки: auto, manual
# Рекомендуется устанавливать количество dpdk-rx кратным степени 2
# Опционально. По умолчанию - auto
# mode: auto
# schema определяет количество логических ядер, назначенных для каждой активности
# schema:
# auto:
# detection: 4
# event-processing: 2
# metrics: 2
# dpdk-rx: 1
# dpdk-worker: 4
# ipfix-rx: 1
# ipfix-worker: 2
# reports: 2
# free: 2
# manual:
# detection: 4
# event-processing: 2
# metrics: 2
# dpdk-rx: 1
# dpdk-worker: 4
# ipfix-rx: 1
# ipfix-worker: 2
# reports: 2
# free: 2
# Параметры обнаружения
detection:
# true - включено, false - выключено
# По умолчанию - true
enable: true
# Параметры метрик
# В Clickhouse метрики записываются в формате [hostname].[plugin].*
metrics:
enable: true
carbon:
# Отправка метрик в carbon-clickhouse
endpoint: 127.0.0.1:2003
# Hostname - ключ для метрик FlowCollector, с которым они будут записываться в ClickHouse
hostname: flowcollector
# Plugin - второй ключ для метрик FlowCollector, с которым они будут записываться в ClickHouse
plugin: analyzer
# Частота сбора метрик в секундах
interval: 5
# Частота отправки метрик в секундах
export-timeout: 5
# Параметры нативного BGP для анонсов
bgp:
# true - включено, false - выключено
# По умолчанию - false
enable: false
asn: 1
id: 192.168.1.2
host: 127.0.0.1
port: 1179
# Параметры GoBGP для анонсов
gobgp:
# true - включено, false - выключено
# По умолчанию - false
enable: false
# Хост API GoBGP
# По умолчанию - localhost
host: localhost
# Порт API GoBGP
# По умолчанию - 50051
port: 50051
# Канал API GoBGP выполняет запросы в синхронном режиме,
# поэтому работает в отдельных потоках
# Обычно достаточно 1
# По умолчанию - 1
# thread-number: 1
# true - включено, false - выключено
# По умолчанию - false
enable-subnet-splitting: false
# Установка длины маски для разделения CIDR на подсети
# Обратите внимание, если min-subnet-length <= длины маски CIDR,
# то разделение на подсети выполняться не будет
# По умолчанию - 16
min-subnet-length: 16
# Включение/выключение FlowSpec
# true - включено, false - выключено
enable-flow-spec: false
# Ограничение максимального количества правил, генерируемых анализатором
# Опционально. По умолчанию - 100
max-rules-number: 100
# Правила FlowSpec. Содержит набор правил, состоящих из числовых полей или полей битовой маски
# Числовые поля могут комбинироваться со следующими операторами:
# [&] [== | > | >= | < | <= | !=] (см. пример ниже)
# Поля битовой маски могут комбинироваться со следующими операторами:
# [&] [= | ! | !=] (см. пример ниже)
# Обратите внимание, что оператор '&' ставится только перед операторами сравнения
# Между оператором и его аргументом нет пробела
# Опционально. Может использоваться как правила по умолчанию для управляемых объектов
flow-spec-rules:
-
# Имя правила FlowSpec. Должно быть уникальным
# Обязательный параметр
name: "flow-spec"
# CIDR назначения. Это поле извлекается из атаки
# Если указано, будет использовано это значение
# Опционально. По умолчанию - пусто
dst-cidr: 10.0.0.1/24
# CIDR источника
# Опционально. По умолчанию - пусто
src-cidr: 10.0.0.1/24
# Имя протокола, десятичное число, true или false. Числовое поле
# Доступные опции: egp, gre, icmp, igmp, igp, ipip, ospf, pim, rsvp, sctp, tcp, udp
# Опционально. По умолчанию - пусто
ip-protocols: "==tcp &==udp icmp >igmp >=egp <igp <=rsvp !=gre &!=ospf true"
# Тип фрагмента или их комбинация, соединенная знаком +. Поле битовой маски
# Доступные опции: dont-fragment, is-fragment, first-fragment, last-fragment, not-a-fragment
# Опционально. По умолчанию - пусто
fragments: "dont-fragment is-fragment+first-fragment"
# Флаг TCP или их комбинация. Поле битовой маски
# Доступные опции: F, S, R, P, A, U, E, C
# Опционально. По умолчанию - пусто
tcp-flags: "=S &=SA A !F !=U !=C"
# Порт источника ИЛИ назначения. Десятичное число, true или false. Числовое поле
# Опционально. По умолчанию - пусто
# Простой пример: ports: 80
ports: "==80 &==90 8080 >9090 >=10080 <10090 <=18080 !=19090 &!=443 true"
# Порт назначения TCP или UDP пакета. Числовое поле
# Десятичное число, true или false
# Опционально. По умолчанию - пусто
destination-ports: "==80 >=8080&<=8888"
# Порт источника TCP или UDP пакета. Числовое поле
# Десятичное число, true или false
# Опционально. По умолчанию - пусто
source-ports: "443"
# Поле типа ICMP пакета. Числовое поле
# Десятичное число, true или false
# Опционально. По умолчанию - пусто
icmp-types: "0"
# Поле кода ICMP пакета. Числовое поле
# Десятичное число, true или false
# Опционально. По умолчанию - пусто
icmp-codes: "==0 >1&<3 true"
# Общая длина IP пакета. Числовое поле
# Десятичное число, true или false
# Опционально. По умолчанию - пусто
packet-lengths: "64"
# Поле DSCP. Числовое поле
# Десятичное число, true или false
# Опционально. По умолчанию - пусто
dscp: ">=0&<=32"
# Действие для фильтрации трафика
# Доступные опции:
# - accept (принять трафик)
# - discard (отбросить трафик, используя traffic-rate 0)
# - rate-limit <RATE> [as <AS>] (указать скорость трафика в виде числа с плавающей точкой)
# - redirect <CIDR> (перенаправить в VRF, который имеет данный RT в своей политике импорта)
# - mark <DEC_NUM> (изменяет DSCP в IPv4 или Traffic Class in IPv6 на указанное значение)
# - action sample (включает сэмплирование и логирование трафика)
# - action terminal (указывает завершение фильтра трафика)
# - action sample-terminal (указывает одновременно sample и terminal)
# Опционально. По умолчанию - accept
actions:
- "rate-limit 100.0 as 65000"
- "action sample"
# Удалить все существующие маршруты и правила FlowSpec в GoBGP при перезапуске
# true - включено, false - выключено
# По умолчанию - true
drop-on-restart: true
# Аргументы DPDK EAL
# По умолчанию - пусто
# Пример использования сетевого интерфейса в режиме PCAP
# --vdev=net_pcap0,rx_iface_in=eth0
# Пример использования сетевого интерфейса с dpdk-testpmd
# --vdev=net_af_packet0,iface=tap0,framecnt=512,qpairs=1 --in-memory --no-pci
# Пример использования сетевого интерфейса
# -a <port>
# dpdk-args:
# Параметры HTTP API FlowCollector
http-api:
# true - включено, false - выключено
# По умолчанию - false
enable: true
# Локальные точки подключения, где FC слушает соединения
endpoint: inet://127.0.0.1:10505
# - unix://path/to/socket
# - inet://127.0.0.1:8082
# - 127.0.0.1
# Параметры DPDK NIC
dpdk-nic:
# true - включено, false - выключено
# По умолчанию - true
enable: false
# Маска для включенных ethernet портов
# Опционально. По умолчанию - max(uint64)
# enable-eth-ports: 0xff
# Опционально. Количество очередей Rx на сетевой интерфейс
# По умолчанию - 1
# port-rx-queue-number: 1
# Коэффициент регулирования (1:throttling-rate)
# Опционально. По умолчанию - 1
# throttling-rate: 1
# Параметры пула пакетов DPDK
# packet-pool:
# Размер пула. По умолчанию - (64*1024)-1
# size: 8191
# Размер кэша. По умолчанию - 128
# cache-size: 128
# Параметры ARP
# arp:
# true - включено, false - выключено
# По умолчанию - false
# enable: false
# Список устройств для обработки. По умолчанию отсутствует
# Если указаны и devices, и default-ip, будет использовано значение default-ip
# Если arp включен, но ни одна из следующих опций не указана, возникнет исключение
# devices:
# -
# MAC-адрес устройства
# mac: 00:00:00:00:00:00
# Список IP-адресов устройства
# ip:
# - 127.0.0.1
# - 192.168.0.0
# IP-адрес по умолчанию машины, на которой будет работать анализатор
# По умолчанию - 127.0.0.1
# default-ip: 127.0.0.1
# Список источников трафика DPDK для сопоставления с группами
sources:
-
# Имя группы. Опционально. Если не указано, используется автогенерируемый id группы как имя
# group: all
group: all
# Если не установлены ни local, ни remote, это сырое зеркалирование
# Локальная точка. Опционально. Маска. Пустой 'local' (local: {}) означает любой
# local:
# IP-адрес. Опционально. Отсутствие host означает любой
# host: 192.168.0.1
local: {}
# Удаленная точка. Опционально. Маска. Пустой 'remote' (remote: {}) означает любой
# remote:
# IP-адрес. Опционально. Отсутствие host означает любой
# host: 192.168.0.2
remote: {}
# Параметры IPFIX
ipfix:
# true - включено, false - выключено
# По умолчанию - false
enable: false
# Локальные точки подключения для приема IPFIX сообщений
endpoint:
- 127.0.0.1:4739
# - 192.168.0.1:4739
# Включение режима эксклюзивных сокетов
# true - включено, false - выключено
# По умолчанию: false
# Доступны два режима для сокетов:
# - кооперативный: каждое ядро ipfix rx обрабатывает все сокеты. Это режим по умолчанию
# - эксклюзивный: сокеты равномерно распределяются между ядрами, каждое ядро обрабатывает свой набор сокетов
# exclusive-sockets-mode: false
# Пул памяти для IPFIX сообщений
# memory-pool:
# Размер пула. По умолчанию - 1024*64-1
# number: 16383
# Размер кэша. По умолчанию - 128
# cache-size: 64
# Список источников трафика IPFIX для сопоставления с группами
sources:
-
# Имя группы. Опционально. Если не указано, используется автогенерируемый id группы как имя
group: all
# Локальная точка. Опционально. Маска. Пустой 'local' (local: {}) означает любой
# local:
# IP-адрес. Опционально. Отсутствие host означает любой
# host: 192.168.0.1
# Порт. Опционально. Не установлен означает любой
# port: 20000
local: {}
# Удаленная точка. Опционально. Маска. Пустой 'remote' (remote: {}) означает любой
# remote:
# IP-адрес. Опционально. Отсутствие host означает любой
# host: 192.168.0.2
# Порт. Опционально. Не установлен означает любой
# port: 30000
remote: {}
# Параметры счетчиков пакетов
packet-counters:
# Коэффициент. Означает "каждый RATE пакет отправляется в flow collector",
# другими словами FlowCollector вычисляет реальное количество пакетов как
# полученные * rate
# По умолчанию - 1
rate: 1
# Временной период, используемый для расчета текущей скорости. Миллисекунды
# По умолчанию - 5000
average-period: 5000
# Временной период для расчета текущих скоростей
# Текущие скорости рассчитываются каждые <interval> миллисекунд
interval: 5000
# Параметры для отправки BGP анонсов
announce:
# Включение/выключение отправки анонсов
# true - включено, false - выключено
enable: false
# BGP next-hop'ы
# Имя next-hop'а может использоваться как сокращение в опции action
# Опционально
nexthops:
-
# Имя next-hop'а
name: transit
# IP-адрес next-hop'а
ip: 192.168.10.1
-
name: blackhole
ip: 192.168.20.1
# Список сообществ или одно сообщество для BGP Update сообщения
# Доступные форматы:
# - <целое_число_основание_10>:<целое_число_основание_10>
# - <целое_число_основание_10>
# - 0x<целое_число_основание_16>
# Опционально
# communities: 666
# communities
# - 666:666
# - 777:777
# Временной интервал отправки анонсов. Секунды
# Только для нативного BGP
timeout: 20
# Конец announce
# Глобальное действие для обнаруженной аномалии
# Выполняется, если любое из правил совпадает
# и если нет специфического действия, назначенного правилу
# На данный момент доступен только BGP анонс как действие
action:
# IP-адрес next-hop'а или имя из announce.nexthops
# Обязательно
nexthop: transit
# Список сообществ или одно сообщество для BGP Update сообщения
# Доступные форматы:
# - <целое_число_основание_10>:<целое_число_основание_10>
# - <целое_число_основание_10>
# - 0x<целое_число_основание_16>
# Опционально
# Если присутствует, перезаписывает announce.nexthops.communities для данного next-hop'а
# communities: 666:666
# communities:
# - 666:666
# - 777:777
# Конец action
# Глобальный период подтверждения аномалии. Секунды
# Если FlowCollector обнаруживает аномалию, он ждет confirm-period секунд
# и подтверждает аномалию, если она все еще присутствует
# FlowCollector выполняет действия для подтвержденных аномалий
# По умолчанию - 0
confirm-period: 0
# Глобальный таймаут истечения действия. Секунды
# Если FlowCollector выполняет действия для аномалии
# и перестает ее обнаруживать, он продолжает выполнять действие
# action-expiry-timeout секунд, если аномалия не обнаружена снова
# По умолчанию - 60
action-expiry-timeout: 60
action-events:
enable: true
# Если graphite: false, оповещения отправляются в компонент sp-events
graphite: false
# Хост, на котором располагается компонент sp-events
host: 127.0.0.1
# Порт, на котором располагается компонент sp-events. По-умолчанию 8081
port: 8081
# Путь к компоненту
path: /
# Отправка событий
notification-service:
enable: true
nats:
enable: true
host: localhost
port: 4222
path: /
subject: analyzer.notification
persistance: true
# Параметры IpLookupTable
ip-lookup-table:
# Указать режим отслеживания CIDR
# Доступные значения:
# - overlap: разрешены перекрывающиеся подсети в разных управляемых объектах
# - nooverlap: запрещены перекрывающиеся подсети в разных управляемых объектах
# По умолчанию: nooverlap
mode: overlap
# Параметры отчетов
reports:
enable: true
host: localhost
port: 9080
path: /report
export-timeout: 10
max-src-addrs: 10000
max-dst-addrs: 10000
max-src-ports: 1000
max-dst-ports: 1000
# Параметры PcapngDumper
pcapng-dumper:
# true - включено, false - выключено
# По умолчанию - false
enable: false
# Указать путь для записи дампов
# По умолчанию - /var/dump/
# dumps-path: /var/dump/
# Указать максимальное количество одновременных сессий дампа
# По умолчанию - 8
max-sessions-number: 8
# Указать максимальное количество пакетов в одном дампе
# По умолчанию - 10'000
max-packets-number: 10000
# Указать максимальный таймаут в секундах без пакетов для ручных дампов
# По умолчанию - 10
keep-alive: 10
# Параметры FlowWriter
save-flow:
# true - включено, false - выключено
# По умолчанию - false
enable: false
# Указать, нужно ли сохранять поток для всех перечисленных MO
# Если выключено, то опция save-flow будет работать только для MO, у которых эта опция включена
# true - включить сохранение IPFIX потока для всех MO, false - выключить
# По умолчанию - true
enable-all-mo: true
# Указать, нужно ли сохранять поток для всего полученного трафика
# true - включить сохранение IPFIX потока для всего трафика, false - выключить
# По умолчанию - false
enable-save-all: false
# Указать имя таблицы для записи записей потока
# По умолчанию - default.flows
table-name: "default.flows"
# Указать адрес хоста базы данных
# По умолчанию - localhost
db-host: "localhost"
# Указать пользователя базы данных
# По умолчанию - default
db-username: "default"
# Указать пароль к базе данных
db-password: "[пароль сlickhouse]"
# Указать порт базы данных
# По умолчанию - 9000
dp-port: 9000
# Указать имя секции в конфигурации clickhouse, где находятся правила свертки
# По умолчанию - flows_rollup
rollup-section: "flows_rollup"
# Указать количество ipfix записей для записи в один блок
# По умолчанию - 10'000
save-records-number: 10000
# Указать таймаут в секундах для сброса ipfix записей
# По умолчанию - 60
flush-records-timeout: 60
# Параметры SNMP
# Примечание: Flowcollector отслеживает только интерфейсы типов
# - ethernet-csmacd(6)
# - prop-virtual(53)
# - tunnel(131)
snmp:
# true - включено, false - выключено
# По умолчанию - false
enable: false
# Список агентов для запроса
agents:
# Хост пира и опционально порт - host[:port]
# Порт по умолчанию - 161
- peer: example.org:161
# Версия SNMP. Поддерживаемые версии - 1, 2c, 3
# Опционально. По умолчанию - 1
version: 1
# Частота запросов
# Опционально. По умолчанию - 60s
request-timeout: 60s
# Таймаут ожидания ответа
# Опционально. По умолчанию - 1s
response-timeout: 1s
# Локальный адрес для привязки. Опционально
# local-address: 192.168.0.1
# Локальный порт для привязки. Опционально
# local-port: 11111
# Поле community SNMP для авторизации на SNMP агентах версии 1 и 2c. Опционально
community: public
# Поле security name SNMP для авторизации на SNMP агентах версии 3. Опционально
# security-name: secret
# Поле security auth key SNMP для авторизации на SNMP агентах версии 3. Опционально
# security-auth-key: secret-key
# Псевдоним для метрик
# Опционально. По умолчанию - хост пира
# alias: example
Внимание:
- Перед началом работы рекомендуется изучить комментарии к каждому параметру.
- Для режима DPDK необходимо раскомментировать секцию dpdk-nic.
- Для режима IPFIX необходимо раскомментировать секцию ipfix.
Открыть файл конфигурации для редактирования:
sudo nano /opt/spfc/etc/analyzer.yaml
3.12.1 Параметры логирования
log:
level: debug # Уровень логирования: trace, debug, info, warn/warning, error, fatal
Внимание:
Уровни trace и debug могут быть отключены в определённых типах сборки.
3.12.2 Основные параметры
Привязка логических ядер
Если секция закомментирована — распределение потоков по ядрам происходит автоматически. Для оптимизации нагрузки можно раскомментировать и отредактировать значения.
# lcore-mapping:
# mode: auto # auto | manual
# schema: # определяет количество логических ядер, назначенных для каждой активности
# auto:
# detection: 4
# event-processing: 2
# metrics: 2
# dpdk-rx: 1
# dpdk-worker: 4
# ipfix-rx: 1
# ipfix-worker: 2
# reports: 2
# free: 2
# manual:
# detection: 4
# event-processing: 2
# metrics: 2
# dpdk-rx: 1
# dpdk-worker: 4
# ipfix-rx: 1
# ipfix-worker: 2
# reports: 2
# free: 2
Параметры обнаружения
detection:
enable: true # true — включено, false — выключено (по умолчанию — true)
Параметры метрик
В Clickhouse метрики записываются в формате [hostname].[plugin].*
metrics:
enable: true
carbon:
endpoint: 127.0.0.1:2003 # Отправка метрик в carbon-clickhouse
hostname: flowcollector # Hostname - ключ для метрик FlowCollector, с которым они будут записываться в ClickHouse
plugin: analyzer # Plugin - второй ключ для метрик FlowCollector, с которым они будут записываться в ClickHouse
interval: 5 # Частота сбора метрик в секундах
export-timeout: 5 # Частота отправки метрик в секундах
3.12.3 Настройки BGP и GoBGP
Нативный BGP
bgp:
enable: false # true — включено, false — выключено (по умолчанию — false)
asn: 1
id: 192.168.1.2
host: 127.0.0.1
port: 1179
GoBGP и FlowSpec
BGP и GoBGP используются для анонсирования маршрутов и применения фильтрации через FlowSpec. Рекомендуется активировать только нужные секции и тщательно настраивать правила.
gobgp:
enable: false # true — включено, false — выключено (по умолчанию — false)
host: localhost # Хост API GoBGP (по умолчанию — localhost)
port: 50051 # Порт API GoBGP, (по умолчанию — 50051)
# thread-number: 1 # Количество потоков API GoBGP (по умолчанию — 1)
enable-subnet-splitting: false # Разделение подсетей true — включено, false — выключено
min-subnet-length: 16 # Длина маски для разбиения (по умолчанию — 16). Если min-subnet-length <= длины маски CIDR, то разделение на подсети выполняться не будет
enable-flow-spec: false # FlowSpec true — включено, false — выключено
max-rules-number: 100 # Ограничение максимального количества правил (по умолчанию — 100)
# Примеры правил FlowSpec
flow-spec-rules:
- name: "flow-spec"
dst-cidr: 10.0.0.1/24
src-cidr: 10.0.0.1/24
ip-protocols: "==tcp &==udp icmp >igmp >=egp <igp <=rsvp !=gre &!=ospf true"
fragments: "dont-fragment is-fragment+first-fragment"
tcp-flags: "=S &=SA A !F !=U !=C"
ports: "==80 &==90 8080 >9090 >=10080 <10090 <=18080 !=19090 &!=443 true"
destination-ports: "==80 >=8080&<=8888"
source-ports: "443"
icmp-types: "0"
icmp-codes: "==0 >1&<3 true"
packet-lengths: "64"
dscp: ">=0&<=32"
actions:
- "rate-limit 100.0 as 65000"
- "action sample"
drop-on-restart: true # Удалить все существующие маршруты и правила FlowSpec при перезапуске
3.12.4 Аргументы DPDK EAL
# По умолчанию - пусто
# --vdev=net_pcap0,rx_iface_in=eth0 # Пример использования сетевого интерфейса в режиме PCAP
# --vdev=net_af_packet0,iface=tap0,framecnt=512,qpairs=1 --in-memory --no-pci # Пример использования сетевого интерфейса с dpdk-testpmd
# -a <port> # Пример использования сетевого интерфейса
# dpdk-args:
3.12.5 Параметры HTTP API FlowCollector
http-api:
enable: true # true - включено, false - выключено (по умолчанию — false)
endpoint: inet://127.0.0.1:10505 # Локальные точки подключения, где FC слушает соединения
# - unix://path/to/socket
# - inet://127.0.0.1:8082
# - 127.0.0.1
3.12.6 Сетевые интерфейсы (DPDK, IPFIX)
DPDK и IPFIX настраиваются только для соответствующих режимов работы FlowCollector. Оставьте ненужные секции закомментированными.
DPDK NIC (режим DPDK)
dpdk-nic:
enable: false # true — включено, false — выключено
# enable-eth-ports: 0xff # Маска включённых ethernet портов (по умолчанию - max(uint64))
# port-rx-queue-number: 1 # Количество очередей Rx на сетевой интерфейс (по умолчанию - 1)
# throttling-rate: 1 # Коэффициент регулирования (по умолчанию - 1)
# packet-pool: # Параметры пула пакетов DPDK
# size: 8191 # Размер пула (по умолчанию - (64*1024)-1)
# cache-size: 128 # Размер кэша (по умолчанию - 128)
# arp: # Параметры ARP
# enable: false # true - включено, false - выключено (по умолчанию — false)
# devices: # Список устройств для обработки. Если указаны и devices, и default-ip, будет использовано значение default-ip. Если arp включен, но ни одна из следующих опций не указана, возникнет исключение
# -
# mac: 00:00:00:00:00:00 # MAC-адрес устройства
# ip: # Список IP-адресов устройства
# - 127.0.0.1
# - 192.168.0.0
# default-ip: 127.0.0.1 # IP-адрес по умолчанию машины, на которой будет работать анализатор
sources: # Список источников трафика DPDK для сопоставления с группами
-
group: all # Имя группы. Если не указано, используется автогенерируемый id группы как имя group: all
# Если не установлены ни local, ни remote, это сырое зеркалирование
# local: # Локальная точка. Маска. Пустой 'local' (local: {}) означает любой
# host: 192.168.0.1 # IP-адрес. Отсутствие host означает любой
local: {} # Локальная точка. Маска. Пустой 'local' (local: {}) означает любой
# remote: # Удаленная точка. Маска. Пустой 'remote' (remote: {}) означает любой
# host: 192.168.0.2 # IP-адрес. Отсутствие host означает любой
remote: {} # Удаленная точка. Маска. Пустой 'remote' (remote: {}) означает любой
IPFIX (режим IPFIX)
ipfix:
enable: false # true - включено, false - выключено. По умолчанию - false
endpoint:
- 127.0.0.1:4739 # Локальные точки подключения для приема IPFIX сообщений
# - 192.168.0.1:4739
# exclusive-sockets-mode: false # Включение режима эксклюзивных сокетов. true - включено, false - выключено. По умолчанию: false. Доступны два режима: кооперативный (по умолчанию), эксклюзивный
# memory-pool: # Пул памяти для IPFIX сообщений
# number: 16383 # Размер пула. По умолчанию - 1024*64-1
# cache-size: 64 # Размер кэша. По умолчанию - 128
sources: # Список источников трафика IPFIX для сопоставления с группами
-
group: all # Имя группы. Если не указано, используется автогенерируемый id группы как имя
# local:
# host: 192.168.0.1 # IP-адрес. Отсутствие host означает любой
# port: 20000 # Порт. Не установлен означает любой
local: {} # Локальная точка. Маска. Пустой 'local' (local: {}) означает любой
# remote:
# host: 192.168.0.2 # IP-адрес. Отсутствие host означает любой
# port: 30000 # Порт. Не установлен означает любой
remote: {} # Удаленная точка. Маска. Пустой 'remote' (remote: {}) означает любой
3.12.7. Обработка потоков и политики
Параметры счетчиков пакетов
packet-counters:
rate: 1 # Коэффициент. Означает "каждый RATE пакет отправляется в flow collector", другими словами FlowCollector вычисляет реальное количество пакетов как полученные * rate (по умолчанию - 1)
average-period: 5000 # Временной период, используемый для расчета текущей скорости, в миллисекундах (по умолчанию - 5000)
interval: 5000 # Временной период для расчета текущих скоростей. Текущие скорости рассчитываются каждые <interval> миллисекунд
Анонсы и действия (announce, action)
# Параметры для отправки BGP анонсов
announce:
enable: false # Включение/выключение отправки анонсов. true - включено, false - выключено
nexthops: # BGP next-hop'ы. Имя next-hop'а может использоваться как сокращение в опции action.
- name: transit # Имя next-hop'а
ip: 192.168.10.1 # IP-адрес next-hop'а
- name: blackhole
ip: 192.168.20.1 # IP-адрес next-hop'а
# communities: 666 # Список сообществ или одно сообщество для BGP Update сообщения
# communities: # Доступные форматы:
# - 666:666 # - <целое_число_основание_10>:<целое_число_основание_10>
# - 777:777 # - <целое_число_основание_10>
# - 0x<целое_число_основание_16>
timeout: 20 # Временной интервал отправки анонсов (секунды). Только для нативного BGP
# Конец announce
# Глобальное действие для обнаруженной аномалии. Выполняется, если любое из правил совпадает
# и если нет специфического действия, назначенного правилу. На данный момент доступен только BGP анонс как действие
action:
nexthop: transit # IP-адрес next-hop'а или имя из announce.nexthops (обязательно)
# communities: 666:666 # Список сообществ или одно сообщество для BGP Update сообщения
# communities: # Доступные форматы:
# - 666:666 # - <целое_число_основание_10>:<целое_число_основание_10>
# - 777:777 # - <целое_число_основание_10>
# - 0x<целое_число_основание_16>
# Если присутствует, перезаписывает announce.nexthops.communities для данного next-hop'а
# Конец action
Глобальные параметры обнаружения
confirm-period: 0 # Глобальный период подтверждения аномалии (секунды). Если FlowCollector обнаруживает аномалию, он ждет confirm-period секунд и подтверждает аномалию, если она все еще присутствует. FlowCollector выполняет действия для подтвержденных аномалий. По умолчанию - 0
action-expiry-timeout: 60 # Глобальный таймаут истечения действия (секунды). Если FlowCollector выполняет действия для аномалии и перестает ее обнаруживать, он продолжает выполнять действие action-expiry-timeout секунд, если аномалия не обнаружена снова. По умолчанию - 60
Оповещения и интеграция с внешними сервисами
action-events:
enable: true # Включение/выключение action-events
graphite: false # Если graphite: false, оповещения отправляются в компонент sp-events
host: 127.0.0.1 # Хост, на котором располагается компонент sp-events
port: 8081 # Порт, на котором располагается компонент sp-events (по умолчанию 8081)
path: / # Путь к компоненту
# Отправка событий
notification-service:
enable: true # Включение/выключение notification-service
nats:
enable: true # Включение/выключение NATS
host: localhost # Хост NATS
port: 4222 # Порт NATS
path: / # Путь
subject: analyzer.notification # Subject для NATS
persistance: true # Включение/выключение постоянства сообщений
Параметры IpLookupTable
ip-lookup-table:
mode: overlap # Режим отслеживания CIDR. Доступные значения: overlap — разрешены перекрывающиеся подсети в разных управляемых объектах, nooverlap — запрещены перекрывающиеся подсети в разных управляемых объектах. По умолчанию: nooverlap
3.12.8 Параметры отчетов
# Параметры отчетов
reports:
enable: true # Включение/выключение отчетов
host: localhost # Хост для экспорта отчетов
port: 9080 # Порт для экспорта отчетов
path: /report # Путь для экспорта отчетов
export-timeout: 10 # Таймаут экспорта отчетов (секунды)
max-src-addrs: 10000 # Максимальное количество исходных адресов в отчете
max-dst-addrs: 10000 # Максимальное количество целевых адресов в отчете
max-src-ports: 1000 # Максимальное количество исходных портов в отчете
max-dst-ports: 1000 # Максимальное количество целевых портов в отчете
3.12.9 Хранение данных
PCAP-дампы
# Параметры PcapngDumper
pcapng-dumper:
enable: false # Включение/выключение дампа (true - включено, false - выключено, по умолчанию - false)
# dumps-path: /var/dump/ # Путь для записи дампов (по умолчанию - /var/dump/)
max-sessions-number: 8 # Максимальное количество одновременных сессий дампа (по умолчанию - 8)
max-packets-number: 10000 # Максимальное количество пакетов в одном дампе (по умолчанию - 10'000)
keep-alive: 10 # Максимальный таймаут в секундах без пакетов для ручных дампов (по умолчанию - 10)
Параметры FlowWriter
save-flow:
enable: false # Включение/выключение сохранения потока (true - включено, false - выключено, по умолчанию - false)
enable-all-mo: true # Сохранять поток для всех перечисленных MO (true - для всех MO, false - только для MO с включенной опцией, по умолчанию - true)
enable-save-all: false # Сохранять поток для всего полученного трафика (true - весь трафик, false - выключить, по умолчанию - false)
table-name: "default.flows" # Имя таблицы для записи потока (по умолчанию - default.flows)
db-host: "localhost" # Адрес хоста базы данных (по умолчанию - localhost)
db-username: "default" # Пользователь базы данных (по умолчанию - default)
db-password: "[пароль сlickhouse]" # Пароль к базе данных
dp-port: 9000 # Порт базы данных (по умолчанию - 9000)
rollup-section: "flows_rollup" # Имя секции в конфиге ClickHouse с правилами свертки (по умолчанию - flows_rollup)
save-records-number: 10000 # Количество ipfix записей для одного блока (по умолчанию - 10'000)
flush-records-timeout: 60 # Таймаут (секунды) для сброса ipfix записей (по умолчанию - 60)
3.12.10 Параметры SNMP
# Примечание: Flowcollector отслеживает только интерфейсы типов ethernet-csmacd(6), prop-virtual(53), tunnel(131)
snmp:
enable: false # Включение/выключение SNMP (true - включено, false - выключено, по умолчанию - false)
agents: # Список агентов для запроса
- peer: example.org:161 # Хост пира и опционально порт - host[:port] (порт по умолчанию - 161)
version: 1 # Версия SNMP (1, 2c, 3). Опционально, по умолчанию - 1
request-timeout: 60s # Частота запросов (по умолчанию - 60s)
response-timeout: 1s # Таймаут ожидания ответа (опционально, по умолчанию - 1s)
# local-address: 192.168.0.1 # Локальный адрес для привязки
# local-port: 11111 # Локальный порт для привязки
community: public # SNMP community для авторизации на агентах версии 1 и 2c
# security-name: secret # SNMP security name для авторизации на агентах версии 3
# security-auth-key: secret-key # SNMP security auth key для авторизации на агентах версии 3
# alias: example # Псевдоним для метрик (по умолчанию — хост пира)
3.13 Настройка тестового объекта
1. Для создания директории выполнить следующие команды:
sudo mkdir /opt/spfc/etc/mo/test_logic_folder
sudo mkdir /opt/spfc/etc/mo.enabled/test_logic_folder
2. Открыть и отредактировать файл конфигурации:
sudo nano /opt/spfc/etc/mo/test_logic_folder/test_object.yaml
3. Добавить в конфигурационный файл следующие тестовые настройки:
name: test_object # Имя объекта, case-sensitive
cidrs: # Анализируемые сети
- 0.0.0.0/1
- 128.0.0.0/1
rules: # Блок правил
-
type:
- local # Счетчик на /32
vectors:
- total-traffic
limit-threshold: 250Mb/s # 250 мбит/с
-
type:
- global # Счетчик на весь объект
vectors:
- total-traffic
limit-threshold: 2500Mb/s # 2.5 гбит/с
4. Создать символическую ссылку в директории активированных объектов:
sudo ln -s /opt/spfc/etc/mo/test_logic_folder/test_object.yaml /opt/spfc/etc/mo.enabled/test_logic_folder/test_object.yaml
3.14 Настройка bind_driver (актуально только для режима DPDK)
Внимание:
При использовании сетевых адаптеров Mellanox передача порта под управление DPDK не требуется.
1. Определить NIC порта, задействованного для получения зеркального трафика:
sudo /usr/local/bin/dpdk-devbind.py -s
Из полученного вывода требуется значение с последними пятью символами, например:
0000:13:00.0 'VMXNET3 Ethernet Controller 07b0' drv=vfio-pci unused=vmxnet3</u>
В данном примере идентификатор порта — 13:00.0.
2. Открыть конфигурационный файл:
sudo nano /opt/spfc/etc/analyzer.yaml
3. Внести порт как аргумент DPDK в файл конфигурации:
dpdk-args: -a 13:00.0
4. Указать параметры сетевого интерфейса, работающего под управлением драйвера DPDK:
dpdk-nic:
enable: true
arp:
enable: true
#devices:
# - mac: "00:50:56:a8:51:79"
# ip:
# - 10.0.101.10
# Если задействована одна сетевая карта, то достаточно будет указать её IP (без маски)
default-ip: 10.0.101.2
5. Задать значение порта, работающего под управлением драйвера DPDK:
echo "13:00.0" | sudo tee /opt/spfc/etc/nic_port
3.15 Запуск сервисов
1. Назначить права на выполнение скриптов и активировать системные сервисы:
sudo chmod +x /opt/spfc/bin/bind_driver.sh /opt/spfc/bin/create_hugepages.sh
sudo systemctl enable --now \
/opt/spfc/lib/systemd/system/bind_driver.service \
/opt/spfc/lib/systemd/system/create_hugepages.service \
/opt/spfc/lib/systemd/system/analyzer.service
2. Проверить состояние сервиса bind_driver:
sudo systemctl status bind_driver
Примечание:
При работе в режиме IPFIX возможно сообщение:
Warning: Configuration file /opt/spfc/etc/nic_port not found. Interface binding was skipped
Это ожидаемое поведение.
3. Проверить статус сервиса create_hugepages:
sudo systemctl status create_hugepages
Примечание:
При корректной работе должно отображаться:Finished Create hugepages
4. Проверить статус сервиса analyzer:
sudo systemctl status analyzer
5. Убедиться, что после запуска трафика происходит запись метрик:
Без пароля для ClickHouse:
clickhouse-client --query "SELECT * FROM graphite WHERE Path LIKE '%analyzer%' LIMIT 10"
С паролем:
clickhouse-client --password=[пароль сlickhouse] --query "SELECT * FROM graphite WHERE Path LIKE '%analyzer%' LIMIT 10"
В случае возникновения ошибок — просмотреть журнал сервиса:
sudo journalctl -fu analyzer
3.16 Создание SSH-пользователя
Для синхронизации и выполнения проверок веб-интерфейс устанавливает SSH-соединение с каждой системой Flowcollector.
Убедитесь что на каждой системе Flowcollector есть настроенный SSH-пользователь с доступом к sudo
.
1. Создать нового пользователя:
sudo adduser fc-web
2. Добавить пользователя в группу sudo:
sudo usermod -aG sudo fc-web
3. Убедиться, что авторизация по SSH через пароль разрешена для этого пользователя.
3.17 Настройка NGINX
1. Удалить стандартную конфигурацию NGINX:
sudo rm /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
2. Создать файл конфигурации для FlowCollector:
sudo nano /etc/nginx/sites-available/flowcollector.conf
3. Вставить следующую конфигурацию:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name REPLACE_ON_DOMAIN_OR_IP;
location /broker {
rewrite ^/broker(.*)$ $1 break;
proxy_pass http://localhost:3335;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_upgrade;
}
}
Примечание: Заменить server_name REPLACE_ON_DOMAIN_OR_IP
на домен или IP-адрес!
4. Создать ссылку:
sudo ln -s /etc/nginx/sites-available/flowcollector.conf /etc/nginx/sites-enabled
5. Перезапустить NGINX:
sudo systemctl restart nginx
3.18 Настройка веб-интерфейса
В зависимости от условий установки требуется сменить авторизационные данные и порты для базы данных и др. информацию в .env-файле. Сначала настраивается веб-интерфейс, после него - брокер.
1. Открыть для редактирования файл окружения веб-интерфейса:
sudo nano /opt/sp-spider/.env
2. Внести изменения в файл в соответствии с вашей конфигурацией:
VITE_APP_PORT=3333
NODE_ENV=production
HTTP_TIMEOUT=10000
# Если это основной интерфейс (даже при отсутствии резервирования)
IS_PRIMARY=true
# Секретный ключ. Нежелательно менять после первого запуска
APP_SECRET="salt_salt_salt"
# Данные от пользователя и БД postgresql
DB_HOST="localhost"
DB_PORT="5432"
DB_USER="spider"
DB_DATABASE="spider"
DB_PASSWORD="spider"
# Активация rabbitmq для синхронизации и брокера
RMQ_ENABLE="true"
RMQ_URL="amqp://spider:spider@localhost:5672"
RMQ_RECONNECT_INTERVAL="5000"
Использование AMQPs
В случае, если требуется поддержка TLS в рамках протокола AMQP, замените
RMQ_URL="amqp://USER:PASSWORD@localhost:5672"
на
RMQ_URL="amqps://USER:PASSWORD@localhost:5672"
3. Открыть для редактирования файл окружения брокера:
sudo nano /opt/sp-spider-broker/.env
4. Внести изменения в файл в соответствии с вашей конфигурацией:
# Порт, на котором запустится сервис
APP_PORT=3335
# Ключ из .env интерфейса, аналогичен /opt/sp-spider/.env
APP_SECRET="salt_salt_salt"
# Данные от базы данных из .env интерфейса
DB_HOST="localhost"
DB_PORT="5432"
DB_USER="spider"
DB_DATABASE="spider"
DB_PASSWORD="spider"
# Данные RabbitMQ из .env интерфейса
RMQ_URL="amqp://spider:spider@localhost:5672"
RMQ_RECONNECT_INTERVAL="5000"
# Путь к папке с политиками DosGate UH. Обязательно в конце ставить "/"
POLICY_PATH="/var/lib/dosgate-uh/profiles/"
# Путь к конфигурации обработчика оффендеров DosGate UH
OFFENDERS_CONF_PATH="/opt/sp-spider-broker/offenders/offenders.conf"
# Путь к объектам защиты Flowcollector. Обязательно в конце ставить "/"
FC_MO_PATH="/opt/spfc/etc/mo/"
# Путь к симлинкам на объекты защиты Flowcollector. Обязательно в конце ставить "/"
FC_MO_SYMLINK_PATH="/opt/spfc/etc/mo.enabled/"
# Путь к объектам обучения Treshold Learner. Обязательно в конце ставить "/"
FC_LEARNER_PATH="/opt/spfc/etc/learner/"
# Путь к симлинкам на объекты обучения Treshold Learner. Обязательно в конце ставить "/"
FC_LEARNER_SYMLINK_PATH="/opt/spfc/etc/learner.enabled/"
# Путь к конфигу dosgate-uh
DGUH_CONF="/etc/dosgate-uh.conf"
# Путь к снэпшотам дампов dosgate-uh
DGUH_SNAPSHOTS="/var/cache/dosgate-uh-snapshots"
#Путь к основному конфигурационному файлу анализатора
FC_ANALYZER_CONF_PATH="/opt/spfc/etc/analyzer.yaml"
# Путь к конфигу dosgate-uh
DGUH_CONF="/etc/dosgate-uh.conf"
# Путь к снэпшотам дампов dosgate-uh
DGUH_SNAPSHOTS="/var/cache/dosgate-uh-snapshots/"
#Путь к mmdb файлу
MMDB_PATH="/etc/dosgate/GeoLite2-Country.mmdb"
#Путь к дефолтному mmdb файлу
MMDB_DEFAULT_PATH="/usr/share/dosgate/GeoLite2-Country.mmdb"
# Путь до правил обработки syslog сообщений сервиса Rlog
RLOG_RULES_PATH="/var/lib/rlog/rules/"
3.19 Установка Grafana (пакет из репозитория Servicepipe)
1. Установить пакет Grafana:
sudo NEEDRESTART_MODE=a apt-get install grafana-enterprise -y
2. Открыть для редактирования файл конфигурации:
sudo nano /etc/grafana/grafana.ini
3. В секции [database]
указать параметры подключения к PostgreSQL (см. шаг 3.9 Настройка PostgreSQL):
[database]
type = postgres
host = 127.0.0.1:5432
name = grafana
user = grafana
password = grafana
4. Запустить сервис Grafana и проверить его состояние:
sudo systemctl enable --now grafana-server && sudo systemctl status grafana-server
5. Установить необходимые плагины:
sudo grafana-cli plugins install williamvenner-timepickerbuttons-panel && \
sudo grafana-cli plugins install marcusolsson-json-datasource
3.20 Отключение механизма provisioning
Отключить механизм provisioning для сохранения изменений в дашбордах при перезапуске сервиса:
sudo sed -i 's|^\(provisioning = /etc/grafana/provisioning\)|#\1|' /etc/grafana/grafana.ini && \
sudo systemctl restart grafana-server
3.21 Настройка Grafana (при использовании пакета из репозитория Servicepipe)
Открыть веб-интерфейс Grafana в браузере. Интерфейс доступен по порту 3000. По умолчанию используются учетные данные: admin / admin. При первом входе задать новый пароль, соответствующий требованиям информационной безопасности.
3.21.1 Конфигурация datasource
1. Настроить источник данных PostgreSQL events
:
Открыть: Connections → Data Sources → events → Save & Test
Указать актуальный пароль:
Password: [значение из шага 3.9 Настройка PostgreSQL]
При изменении параметров подключения (например, если PostgreSQL размещён на другом хосте), обновить адрес подключения:
Connection: [IP-адрес сервера FC]:5432
(при локальной установке — `localhost:5432`)
Ожидаемый результат: статус подключения — "Database Connection OK"
2. Настроить источник данных graphite
, если база Graphite размещена на отдельном хосте:
Открыть: Connections → Data Sources → graphite → Save & Test
Обновить URL подключения:
URL: http://[IP-адрес сервера FC]:8088
(при локальной установке — `http://localhost:8088`)
Ожидаемый результат: статус подключения — "Data source is working"
3. При размещении Grafana и API-сервисов analyzer
и reports
на разных хостах, обновить параметры подключения для analyzer-api
и reports-api
.
3.21.2 Конфигурация дашбордов
1. Перейти на вкладку Dashboards
2. Последовательно отредактировать все 5 дашбордов, пройдя по пути:
Dashboards → Analyzer → Edit → Settings → Variables → Hostname
В разделе переменных указать значение hostname
, соответствующее параметру из секции metrics
файла /opt/spfc/etc/analyzer.yaml
3. Установить флажок Update default variable values, затем нажать Save dashboard для сохранения изменений.
3.22 Настройка Grafana (в случае установки вне пакета Servicepipe)
Документация по настройке Grafana при установке вне дистрибутива Servicepipe размещены по ссылке.
3.23 Настройка компонента SP-events
1. Открыть для редактирования файл /opt/sp-events/.env:
Примечание:
В качестве шаблона можно использовать /opt/sp-events/.env.example
# sp-events
EH_SERVER_PORT = 8081 # Порт работы сервера sp-events
DASHBOARD_URL = "http://127.0.0.1:3000/d/fc-reports/reports" # URL для просмотра отчета
TEMPLATE_FOLDER = "/opt/sp-events/template" # Полный путь к шаблонам сообщений
WATCHER_FOLDER_AUTO_DUMP = "/var/dump" # Полный путь к папке для автоматических дампов
WATCHER_FOLDER_COMMAND_DUMP = "/opt/sp-events/dumps" # Полный путь к папке для ручных дампов через Telegram
SMTP_USED = false # Включение/выключение использования SMTP
SMTP_SENDER_MAIL = "test@mail.ru" # Почта SMTP
SMTP_PASSWORD = "YOUR_MAIL_PASSWORD" # Пароль SMTP
SMTP_SERVER = "smtp.mail.ru" # Сервер SMTP
SMTP_PORT = 465 # Порт SMTP
MAIL_RECEIVERS = test@servicepipe.ru, test@yandex.ru # Адреса почт для уведомлений
SQLITE_PATH = "/opt/sp-events/sqlite.db" # Полный путь к файлу db
TG_USED = false # Включение/выключение использования Telegram
CHATS_IDS_DUMP = "345389346,2239564" # ID чатов для отправки автоматических дампов
CHATS_IDS_EVENT = "-1002416780921" # ID чатов для отправки сообщений о начале/окончании атак
TG_PORT = 3009 # Порт для работы Telegram сервера для отправки сообщений о событиях
TG_TOKEN = "7656101759:test" # Токен Telegram-бота
TG_KEEP_ALIVE = 10 # Keep-alive параметр для отправки при создании дампа
DUMP_API_URL = "http://localhost:5001/sp-events" # URL для создания дампа
# reports
REPORTS_SERVER_PORT = 9080 # Порт работы сервера Reports
RATE = 1 # Sample rate из /opt/spfc/etc/analyzer.yaml
MONGO_HOST = 127.0.0.1
MONGO_PORT = 27017
MONGO_DATABASE = test
MONGO_USERNAME = events
MONGO_PASSWORD = events
# NATS В случае, если используется NATS в /opt/spfc/etc/analyzer.yaml
NATS_URL = nats://localhost:4222 # URL Nats
NATS_EVENT_SUBJ = analyzer.notification # Nats event subject
# Postgres
POSTGRES_USED = true
POSTGRES_HOST = localhost
POSTGRES_PORT = 5432
POSTGRES_USER = spider
POSTGRES_DATABASE = spider
POSTGRES_PASSWORD = spider
2. Настроить шаблоны сообщений:
Отредактировать шаблоны Telegram:
sudo nano /opt/sp-events/template/tg/
Отредактировать шаблоны e-mail:
sudo nano /opt/sp-events/template/mail/
Указать URL дашборда Reports в Grafana для корректного отображения ссылок в сообщениях.
3. Запустить сервис sp-events и проверить его состояние:
sudo systemctl enable --now sp-events && systemctl status sp-events
3.24 Финальный этап: запуск и проверка состояния сервисов
1. Перезапустить брокер сообщений sp-spider-broker:
sudo systemctl restart sp-spider-broker
2. Запустить и активировать при загрузке основные сервисы:
sudo systemctl enable --now sp-spider sp-spider-broker
3. Проверка состояния сервиса RabbitMQ:
sudo systemctl status rabbitmq-server
4. Проверка состояния PostgreSQL:
sudo systemctl status postgresql
5. Проверка состояния NGINX:
sudo systemctl status nginx
6. Проверка состояния основного сервиса SP-Spider:
sudo systemctl status sp-spider
7. Проверка состояния сервиса SP-Spider Broker:
sudo systemctl status sp-spider-broker