Установка FlowCollector на Ubuntu 22.04
В зависимости от выбранного варианта интеграции требования к аппаратной платформе, процессу установки и уровню производительности могут различаться. Рекомендуется следовать инструкции на всех этапах установки. В случае возникновения вопросов обращайтесь к поставщику программного обеспечения.
1. Аппаратные и программные требования
- Операционная система: Ubuntu Server 22.04 LTS
Использование других версий или дистрибутивов не гарантирует корректную работу ПО. - Процессор: Intel Xeon, AMD EPYC, не менее 10 физических ядер.
- Оперативная память: не менее 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 v9
- sFlow
- IMON
Для работы потока настройте семплирование пакетов и направьте их на выделенный сетевой интерфейс FlowCollector.
1.2. Подготовка сетевого оборудования
Для режима DPDK:
- Настройте зеркалирование пакетов на уровне сетевого оборудования в сторону выделенного интерфейса.
- Проверьте, что драйвер выбранного сетевого адаптера поддерживается DPDK.
Для режима потоковых данных:
- Настройте отправку семплированных пакетов на соответствующий сетевой интерфейс.
1.3. Подготовка аппаратной платформы
- Установите рекомендованную для запуска ОС: Ubuntu Server 22.04 LTS.
*В случае использования других ОС - успешный запуск ПО не гарантирован - Используйте рекомендованные CPU: Intel Xeon, AMD EPYC, не менее 10 физических ядер. *В случае использования CPU сторонних производителей - успешный запуск ПО не гарантирован
- Используйте рекомендованные сетевые карты: Mellanox (mlx5 или mlx6) или Intel (X520-DA2)
2. Подготовка операционной системы
2.1 Установка обновлений ОС
Для обновления ОС Ubuntu необходимо выполнить следующие команды:
sudo apt update
sudo apt upgrade
2.2 Подключение репозитория Servicepipe
Подключить репозиторий Servicepipe возможно двумя способами: через скрипт или вручную. Для подключения к репозиторию потребуются логин и пароль. Эти учетные данные предоставляются индивидуально для каждого заказчика. Получить их возможно запросив у вендора (Servicepipe или партнёра).
2.3 Настройка системного логирования
Открыть файл /etc/systemd/journald.conf:
sudo nano /etc/systemd/journald.conf
Раскомментировать и задать параметры:
SystemMaxUse=500M
RuntimeMaxUse=200M
MaxRetentionSec=1day
Перезапустить службу:
sudo systemctl restart systemd-journald
Открыть файл /etc/logrotate.d/rsyslog:
sudo nano /etc/logrotate.d/rsyslog
Рекомендуемая конфигурация:
/var/log/syslog
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
rotate 2
size 500M
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
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 (включает свои зависимости, см. ниже) • sp-spider-broker • dpdk • gobgpd |
| flowcollector-only Основные компоненты | • analyzer • sp-events • sp-spider-broker • dpdk • gobgpd |
| spider-only (в составе flowcollector) | • nodejs • libpq-dev • postgresql • 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 • libbpf0 • libbpf-dev • libfdt-dev • libisal-dev • libibverbs-dev • ibverbs-providers • libprotobuf-dev • libgrpc++-dev • protobuf-compiler • protobuf-compiler-grpc • libsnmp-dev |
| flowcollector-monitoring Компоненты мониторинга | • clickhouse-server •clickhouse-client •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
4. Открыть файл конфигурации для настройки уровня логирования:
sudo nano /etc/clickhouse-server/config.xml
5. Установить уровень логирования information:
<level>information</level>
6. Перезапустить службу:
sudo systemctl restart clickhouse-server
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 test --eval 'db.reports.createIndex({ mo: 1, unixStartTime: 1, unixLastTime: 1 })'
4. Создать пользователя для работы приложений. Указать имя пользователя и пароль в соответствии с политикой безопасности вашей организации.
Выполнить в командной строке:
mongosh
db.createUser(
{
user: "events",
pwd: "events",
roles: [ { role: "readWrite", db: "test" } ]
}
)
exit
5. Отредактировать файл конфигурации MongoDB:
sudo nano /etc/mongod.conf
6. Добавить или раскомментировать секцию security, включив авторизацию:
security:
authorization: enabled
Для автоматизации изменения можно использовать команду:
sudo sed -i 's/^#\?security:/security:\n authorization: enabled/' /etc/mongod.conf
7. Для снижения объёма логов MongoDB установите минимальный уровень логирования:
systemLog:
verbosity: 0
8. Перезапустить службу 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 Настройка конфигурации FlowCollector
Конфигурация разделена на логические блоки для удобства восприятия.
Открыть файл конфигурации для редактирования:
sudo nano /opt/spfc/etc/analyzer.yaml
3.11.1 Параметры логирования
log:
level: debug # Уровень логирования: trace, debug, info, warn/warning, error, fatal
Примечание
Уровни логирования trace и debug могут быть отключены в определённых типах сборки.
3.11.2 Привязка логических ядер
Секция lcore-mapping определяет распределение логических ядер между процессами FlowCollector. Если секция не задана, используется автоматическое распределение.
Доступны режимы:
auto— автоматическое распределение с указанием количества логических ядер для каждой активности;manual— ручное распределение с указанием количества логических ядер для каждой активности;corebound— привязка активностей к конкретным идентификаторам логических ядер.
Для параметра dpdk-rx рекомендуется указывать количество ядер, равное степени 2.
# lcore-mapping:
# mode: auto # Режим привязки: auto, manual, corebound.
# Опционально. По умолчанию — auto
# schema:
# auto: # Количество логических ядер для каждой активности
# detection: 4 # Обнаружение аномалий
# event-processing: 2 # Обработка событий
# metrics: 2 # Обработка метрик
# dpdk-rx: 1 # Приём трафика DPDK
# dpdk-worker: 4 # Обработка трафика DPDK
# flow-rx: 1 # Приём потоков
# flow-worker: 2 # Обработка потоков
# reports: 2 # Формирование отчётов
# free: 2 # Свободные логические ядра
# manual: # Количество логических ядер для каждой активности
# detection: 4 # Обнаружение аномалий
# event-processing: 2 # Обработка событий
# metrics: 2 # Обработка метрик
# dpdk-rx: 1 # Приём трафика DPDK
# dpdk-worker: 4 # Обработка трафика DPDK
# flow-rx: 1 # Приём потоков
# flow-worker: 2 # Обработка потоков
# reports: 2 # Формирование отчётов
# free: 2 # Свободные логические ядра
# corebound: # Привязка активностей к конкретным идентификаторам
# логических ядер. Используются номера от 1 до N-1
# detection: 1-4 # Логические ядра для обнаружения аномалий
# event-processing: 5,6 # Логические ядра для обработки событий
# metrics: 7,8 # Логические ядра для обработки метрик
# dpdk-rx: 9 # Логические ядра для приёма трафика DPDK
# flow-rx: 14 # Логические ядра для приёма потоков
# worker: 10,11,12,13,15,16 # Логические ядра для обработки данных
# reports: 17,18 # Логические ядра для формирования отчётов
# free: 20-22,23 # Свободные логические ядра
3.11.3 Параметры обнаружения
Параметры обнаружения аномалий задаются в секции detections.
detections:
# enable: true # Включение обнаружения. По умолчанию — true
# average-period: 5000ms # Период для расчёта текущей скорости. По умолчанию — 5000ms
# interval: 5000ms # Интервал пересчёта текущей скорости. По умолчанию — 5000ms
# min-destination-ip: 10 # Минимальное количество IP-адресов назначения под атакой
# в управляемом объекте для правил типа global. По умолчанию — 0
# min-destination-ip-subnet: 10 # Минимальное количество IP-адресов назначения под атакой
# в подсети для правил типа subnet. По умолчанию — 0
# confirm-period: 0 # Период подтверждения аномалии. По умолчанию — 0 секунд
# action-expiry-timeout: 60 # Время продолжения действия после исчезновения аномалии.
# По умолчанию — 60 секунд
Для параметров длительности можно использовать единицы ns, us, ms, s, m, h, d.
3.11.4 Параметры метрик
metrics:
enable: false # Включение сбора метрик. По умолчанию — false
# disable-vector-metrics: false # Отключение метрик векторов атак для MO, subnet и IP.
# По умолчанию — false
collectd:
endpoint: unix://var/run/collectd-unixsock
# Точка подключения collectd
# carbon:
# endpoint: 127.0.0.1:2003 # Точка подключения Carbon
hostname: analyzer-test # Первый ключ имени метрики
plugin: analyzer # Второй ключ имени метрики
export-timeout: 5 # Период отправки метрик. По умолчанию — 5 секунд
# buffer-size: 50000 # Количество буферов по 4096 байт.
# По умолчанию — 25000
3.11.5 Настройки BGP и GoBGP
GoBGP и FlowSpec
gobgp:
enable: false # Включение GoBGP. По умолчанию — false
host: localhost # Хост API GoBGP. По умолчанию — localhost
port: 50051 # Порт API GoBGP. По умолчанию — 50051
# thread-number: 1 # Количество потоков API GoBGP. По умолчанию — 1
enable-subnet-splitting: false # Включение разделения CIDR на подсети
min-subnet-length: 16 # Длина маски для разделения. По умолчанию — 16
enable-flow-spec: false # Включение FlowSpec
max-rules-number: 100 # Максимальное количество правил FlowSpec.
# По умолчанию — 100
drop-on-restart: true # Удаление существующих маршрутов и правил FlowSpec
# в GoBGP при перезапуске. По умолчанию — true
Если значение min-subnet-length меньше или равно длине маски CIDR, разделение на подсети не выполняется.
3.11.6 Аргументы DPDK EAL
dpdk-args: # По умолчанию значение не задано
# --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> # Пример использования сетевого интерфейса:
3.11.7 Параметры HTTP API FlowCollector
http-api:
enable: false # Включение HTTP API. По умолчанию — false
# endpoint: # Локальные точки подключения
# - unix://path/to/socket
# - inet://127.0.0.1:8082
# - 127.0.0.1
3.11.8 Параметры FIB
Секция fib определяет параметры таблиц маршрутизации для IPv4 и IPv6.
# fib:
# v4:
# max-routes: 65535 # Максимальное количество маршрутов. По умолчанию — 65535
# table8: 1024 # Количество групп tbl8. По умолчанию — 1024
# v6:
# max-routes: 65535 # Максимальное количество маршрутов. По умолчанию — 65535
# table8: 1024 # Количество групп tbl8. По умолчанию — 1024
3.11.9 Источники трафика
DPDK NIC
dpdk-nic:
enable: true # Включение DPDK NIC. true — включено, false — выключено.
# По умолчанию — true
# rate: 1 # Коэффициент выборки. Каждый `rate`-й пакет отправляется
# в FlowCollector. Реальное количество пакетов рассчитывается
# как количество полученных пакетов × rate.
# По умолчанию — 1
# enable-eth-ports: 0xff # Маска включённых Ethernet-портов.
# Опционально. По умолчанию — max(uint64)
# port-rx-queue-number: 1 # Количество очередей Rx на сетевой интерфейс.
# Опционально. По умолчанию — 1
# throttling-rate: 1 # Коэффициент регулирования (1:throttling-rate).
# Опционально. По умолчанию — 1
# mtu: 9000 # MTU Ethernet-портов DPDK.
# Опционально. По умолчанию используется значение драйвера,
# обычно 1500
# packet-pool: # Параметры пула пакетов DPDK
# size: 8191 # Размер пула. По умолчанию — (64*1024)-1
# cache-size: 128 # Размер кэша. По умолчанию — 128
# arp: # Параметры ARP
# enable: false # Включение ARP. true — включено, false — выключено.
# По умолчанию — false
# devices: # Список устройств для обработки. По умолчанию не задан.
# Если указаны одновременно devices и default-ip, используется значение default-ip.
# Если ARP включён, но не заданы ни devices, ни default-ip, возникает ошибка
# -
# 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-адрес машины, на которой работает анализатор.
# По умолчанию — 127.0.0.1
# sources: # Список источников трафика DPDK для сопоставления с группами
# -
# group: all # Имя группы. Если не указано, используется автоматически сгенерированный идентификатор группы
# disable: false # Отключение обработки источника.
# Если не указано, используется false
# local: # Локальная точка. Пустое значение local: {} означает любую
# host: 192.168.0.1 # IP-адрес. Если не указан, используется любой
# remote: # Удалённая точка. Пустое значение remote: {} означает любую
# host: 192.168.0.2 # IP-адрес. Если не указан, используется любой
Если параметры local и remote не заданы, используется сырое зеркалирование трафика.
Потоки
Секция flow определяет параметры приёма потоков IPFIX, NetFlow v9, sFlow и IMon.
flow:
enable: false # Включение обработки потоков. true — включено, false — выключено.
# По умолчанию — false
# memory-pool: # Параметры пула памяти для сообщений о потоках
# number: 16383 # Размер пула. По умолчанию — 1024*64-1
# cache-size: 128 # Размер кэша. По умолчанию — 128
IPFIX
flow:
ipfix:
enable: false # Включение IPFIX. true — включено, false — выключено.
# По умолчанию — false
# rate: 1 # Коэффициент выборки. Каждый `rate`-й пакет отправляется
# в FlowCollector. Реальное количество пакетов рассчитывается
# как количество полученных пакетов × rate.
# По умолчанию — 1
endpoint: # Локальные точки подключения для приёма сообщений IPFIX
- udp://127.0.0.1:4739
# - tcp://192.168.0.1:4739
# sources: # Список источников трафика IPFIX для сопоставления с группами
# -
# group: all # Имя группы. Если не указано, используется автоматически
# сгенерированный идентификатор группы
# protocol: tcp # Протокол. Доступные значения: udp, tcp.
# Если не указан, используется любой протокол
# ifIndex: 12 # Индекс входного интерфейса.
# Если не указан, используется любой интерфейс
# disable: false # Отключение обработки источника.
# Если не указано, используется false
# local: # Локальная точка. Пустое значение local: {} означает любую
# host: 192.168.0.1 # IP-адрес. Если не указан, используется любой
# port: 20000 # Порт. Если не указан, используется любой
# remote: # Удалённая точка. Пустое значение remote: {} означает любую
# host: 192.168.0.2 # IP-адрес. Если не указан, используется любой
# port: 30000 # Порт. Если не указан, используется любой
NetFlow v9
flow:
netflow9:
enable: false # Включение NetFlow v9. true — включено, false — выключено.
# По умолчанию — false
# rate: 1 # Коэффициент выборки. Каждый `rate`-й пакет отправляется
# в FlowCollector. Реальное количество пакетов рассчитывается
# как количество полученных пакетов × rate.
# По умолчанию — 1
endpoint: # Локальные точки подключения для приёма сообщений NetFlow v9
- 127.0.0.1:2055
# sources: # Список источников трафика NetFlow v9 для сопоставления с группами
# -
# group: all # Имя группы. Если не указано, используется автоматически
# сгенерированный идентификатор группы
# protocol: tcp # Протокол. Доступные значения: udp, tcp.
# Если не указан, используется любой протокол
# local: # Локальная точка. Пустое значение local: {} означает любую
# host: 192.168.0.1 # IP-адрес. Если не указан, используется любой
# port: 20000 # Порт. Если не указан, используется любой
# remote: # Удалённая точка. Пустое значение remote: {} означает любую
# host: 192.168.0.2 # IP-адрес. Если не указан, используется любой
# port: 30000 # Порт. Если не указан, используется любой
sFlow
flow:
sflow:
enable: false # Включение sFlow. true — включено, false — выключено.
# По умолчанию — false
endpoint: # Локальные точки подключения для приёма сообщений sFlow
- 127.0.0.1:6343
# - 192.168.0.1:6343
# sources: # Список источников трафика sFlow для сопоставления с группами
# -
# group: all # Имя группы. Если не указано, используется автоматически
# сгенерированный идентификатор группы
# ifIndex: 12 # Индекс входного интерфейса.
# Если не указан, используется любой интерфейс
# disable: false # Отключение обработки источника.
# Если не указано, используется false
# local: # Локальная точка. Пустое значение local: {} означает любую
# host: 192.168.0.1 # IP-адрес. Если не указан, используется любой
# port: 20000 # Порт. Если не указан, используется любой
# remote: # Удалённая точка. Пустое значение remote: {} означает любую
# host: 192.168.0.2 # IP-адрес. Если не указан, используется любой
# port: 30000 # Порт. Если не указан, используется любой
IMon
flow:
imon:
enable: false # Включение IMon. true — включено, false — выключено.
endpoint: # Локальные точки подключения для приёма сообщений IMon
- 127.0.0.1:2055
# - 192.168.0.1:6343
# sources: # Список источников трафика IMon для сопоставления с группами
# -
# group: all # Имя группы. Если не указано, используется автоматически
# сгенерированный идентификатор группы
# ifIndex: 12 # Индекс входного интерфейса.
# Если не указан, используется любой интерфейс
# disable: false # Отключение обработки источника.
# Если не указано, используется false
# local: # Локальная точка. Пустое значение local: {} означает любую
# host: 192.168.0.1 # IP-адрес. Если не указан, используется любой
# port: 20000 # Порт. Если не указан, используется любой
# remote: # Удалённая точка. Пустое значение remote: {} означает любую
# host: 192.168.0.2 # IP-адрес. Если не указан, используется любой
# port: 30000 # Порт. Если не указан, используется любой
3.11.10 Анонсы и действия
BGP-анонсы
announce:
enable: false # Включение отправки BGP-анонсов
nexthops:
- name: transit # Имя next-hop
ip: 192.168.10.1 # IP-адрес next-hop
- name: blackhole
ip: 192.168.20.1
# communities: 666
# communities:
# - 666:666
# - 777:777
timeout: 20 # Период отправки анонсов для нативного BGP
Для BGP communities поддерживаются следующие форматы:
<целое_число>:<целое_число>
<целое_число>
0x<шестнадцатеричное_число>
Глобальное действие
Глобальное действие применяется при обнаружении аномалии, если для соответствующего правила не задано отдельное действие.
action:
nexthop: transit # IP-адрес next-hop или его имя из announce.nexthops
# communities: 666:666
# communities:
# - 666:666
# - 777:777
Вычитание трафика local и subnet аномалий
subtract-local-subnet-traffic: true # По умолчанию — true.
Если параметр имеет значение true, трафик, вызвавший аномалию уровня local или subnet, вычитается из скорости соответствующих счетчиков subnet и global объекта.
3.11.11 Отправка событий
Notification Service
notification-service:
enable: false # Включение отправки событий. По умолчанию — false
http:
enable: false # Включение отправки событий по HTTP
host: localhost # Хост удалённого сервиса
# port: 8081 # Порт. По умолчанию — 8081
# path: / # Путь
nats:
enable: false # Включение отправки событий через NATS
host: localhost # Хост NATS
# port: 4222 # Порт. По умолчанию — 4222
# path: /
# subject: analyzer.notification # Subject потока
# persistance: true # Сохранение сообщений. По умолчанию — true
Аннотации Graphite
graphite-annotations:
enable: false # Включение отправки событий как аннотаций Graphite
host: localhost # Хост удалённого сервиса
# port: 80 # Порт. По умолчанию — 80
# path: /events # Путь
3.11.12 Параметры IpLookupTable
ip-lookup-table:
mode: overlap # Режим отслеживания CIDR
Значение overlap разрешает перекрывающиеся подсети в разных управляемых объектах, nooverlap — запрещает.
3.11.13 Параметры отчётов
reports:
enable: false # Включение формирования отчётов. По умолчанию — false
host: localhost # Хост сервиса для экспорта отчётов
# port: 9080 # Порт. По умолчанию — 9080
path: /report # Путь для экспорта отчётов
# export-timeout: 20 # Период экспорта. По умолчанию — 20 секунд
# max-src-addrs: 10000 # Максимальное количество адресов источника
# max-dst-addrs: 10000 # Максимальное количество адресов назначения
# max-src-ports: 1000 # Максимальное количество портов источника
# max-dst-ports: 1000 # Максимальное количество портов назначения
3.11.14 Хранение данных
PCAP-дампы
pcapng-dumper:
enable: false # Включение записи дампов. По умолчанию — false
# dumps-path: /var/dump/ # Путь для записи дампов
max-sessions-number: 8 # Максимальное количество одновременных сессий дампа
max-packets-number: 10000 # Максимальное количество пакетов в одном дампе
keep-alive: 10 # Максимальное время без пакетов для ручного дампа
Параметры FlowWriter
save-flow:
enable: false # Включение сохранения потоков
enable-all-mo: true # Сохранение потоков для всех MO
enable-save-all: false # Сохранение всего полученного трафика
table-name: "default.flows" # Имя таблицы для записи потоков.
db-host: "localhost" # Хост базы данных
db-port: 9000 # Порт базы данных
db-username: "default" # Пользователь базы данных
db-password: "" # Пароль пользователя
rollup-section: "flows_rollup" # Секция ClickHouse с правилами свёртки. По умолчанию — flows_rollup
save-records-number: 10000 # Количество записей потоков в одном блоке
flush-records-timeout: 60 # Интервал сброса записей
3.11.15 Параметры SNMP
FlowCollector отслеживает интерфейсы следующих типов:
ethernet-csmacd(6);prop-virtual(53);tunnel(131).
snmp:
enable: false # Включение SNMP. По умолчанию — false
agents:
- peer: example.org:161 # Хост агента и, при необходимости, порт
version: 1 # Версия SNMP: 1, 2c или 3
request-timeout: 60s # Частота запросов. По умолчанию — 60s
response-timeout: 1s # Таймаут ожидания ответа. По умолчанию — 1s
# local-address: 192.168.0.1 # Локальный адрес для привязки.
# local-port: 11111 # Локальный порт для привязки.
community: public # Community для SNMP v1 и v2c
# security-name: secret # Security name для SNMP v3
# security-auth-key: secret-key Ключ авторизации для для SNMP v3
# alias: example # Псевдоним для метрик
3.11.16 Сохранение данных SNMP
save-snmp:
enable: false # Включение сохранения данных SNMP
table-name: "default.snmp" # Имя таблицы для записи данных SNMP
db-host: "localhost" # Хост базы данных
db-port: 9000 # Порт базы данных
db-username: "default" # Пользователь базы данных
db-password: "" # Пароль пользователя
rollup-section: "snmp_rollup" # Секция ClickHouse с правилами свёртки
3.11.17 База ASN
Секция asn определяет файлы базы данных ASN, используемые FlowCollector.
# asn:
# enable: false # Включение базы ASN. По умолчанию — false
# paths:
# - "/opt/spfc/etc/asn/RU-GeoIP-ASN-Blocks-IPv6.csv"
# - "/opt/spfc/etc/asn/RU-GeoIP-ASN-Blocks-IPv4.csv"
Если параметр paths не задан, используются стандартные пути:
/opt/spfc/etc/asn/RU-GeoIP-ASN-Blocks-IPv6.csv
/opt/spfc/etc/asn/RU-GeoIP-ASN-Blocks-IPv4.csv
3.11.18 Параметры лицензии
# license:
# path: "/opt/spfc/etc/analyzer.lic" # Путь к файлу лицензии
Если путь не задан, FlowCollector пытается загрузить файл лицензии из /opt/spfc/etc/analyzer.lic.
3.11.19 Глобальные правила обнаружения
Секция rules позволяет задавать глобальные правила обнаружения аномалий.
Правило может определять уровни применения, единицы измерения, векторы атак, пороговые значения, приоритет и действие.
# rules:
# -
# type: # Типы объектов, к которым применяется правило.
# Опционально.
# По умолчанию — global, subnet, local
# - global # Весь управляемый объект
# - subnet # Отдельная подсеть
# - local # Отдельный IP-адрес
# units: # Единицы измерения трафика, к которым применяется правило.
# Опционально.
# По умолчанию — bytes, packets
# - bytes
# - packets
# vectors: # Векторы атак, к которым применяется правило.
# Опционально.
# По умолчанию — все доступные векторы
# - dns-flood # IPv4/IPv6-пакеты UDP или TCP
# с портом назначения 53
# - ip-fragment-flood # Фрагментированные IPv4/IPv6-пакеты
# - ip-private-flood # IPv4-пакеты с IP-адресом источника
# из диапазонов 10.0.0.0/8, 172.16.0.0/12
# и 192.168.0.0/16
# - icmp-flood # IPv4/IPv6-пакеты ICMP
# - tcp-flood # IPv4/IPv6-пакеты TCP
# - tcp-null-flood # IPv4/IPv6-пакеты TCP без установленных флагов
# - tcp-cwr-flood # IPv4/IPv6-пакеты TCP с флагом CWR
# (Congestion Window Reduced, 0x80)
# - tcp-ece-flood # IPv4/IPv6-пакеты TCP с флагом ECE
# (ECN-Echo, 0x40)
# - tcp-urg-flood # IPv4/IPv6-пакеты TCP с флагом URG
# (Urgent Pointer field significant, 0x20)
# - tcp-ack-flood # IPv4/IPv6-пакеты TCP с флагом ACK
# (Acknowledgment field significant, 0x10)
# - tcp-psh-flood # IPv4/IPv6-пакеты TCP с флагом PSH
# (Push Function, 0x08)
# - tcp-rst-flood # IPv4/IPv6-пакеты TCP с флагом RST
# (Reset the connection, 0x04)
# - tcp-syn-flood # IPv4/IPv6-пакеты TCP с флагом SYN
# (Synchronize sequence numbers, 0x02)
# - tcp-fin-flood # IPv4/IPv6-пакеты TCP с флагом FIN
# (No more data from sender, 0x01)
# - udp-flood # IPv4/IPv6-пакеты UDP
# - total-traffic # Любые IPv4/IPv6-пакеты
# - invalid-protocol-flood # IPv4/IPv6-пакеты с идентификатором протокола 0
# - chargen-amp # IPv4/IPv6-пакеты UDP с портом источника 19
# - dns-amp # IPv4/IPv6-пакеты UDP с портом источника 53
# - ntp-amp # IPv4/IPv6-пакеты UDP с портом источника 123
# - snmp-amp # IPv4/IPv6-пакеты UDP с портом источника 161
# - snmptrap-amp # IPv4/IPv6-пакеты UDP с портом источника 162
# - ldap-amp # IPv4/IPv6-пакеты UDP с портом источника 389
# - mssql-amp # IPv4/IPv6-пакеты UDP с портом источника 1434
# - ibm-cics-amp # IPv4/IPv6-пакеты UDP с портом источника 1435
# - ssdp-amp # IPv4/IPv6-пакеты UDP с портом источника 1900
# - apple-remote-desktop-amp # IPv4/IPv6-пакеты UDP с портом источника 3283
# - ws-discovery-amp # IPv4/IPv6-пакеты UDP с портом источника 3702
# - memcached-amp # IPv4/IPv6-пакеты UDP с портом источника 11211
# - udp-zero-payload-flood # IPv4/IPv6-пакеты UDP с размером полезной нагрузки 0
# - udp-big-packets-flood # IPv4/IPv6-пакеты UDP с размером полезной нагрузки
# не менее 1400 байт
# - http-flood # IPv4/IPv6-пакеты TCP с портом назначения 80
# - https-flood # IPv4/IPv6-пакеты TCP с портом назначения 443
# - gre-flood # IPv4/IPv6-пакеты GRE
# - port-any # IPv4/IPv6-пакеты TCP или UDP,
# полученные на любом порту
# - port-custom # IPv4/IPv6-пакеты TCP или UDP,
# полученные на порту, заданном в секции port
# limit-threshold: 100M # Абсолютное пороговое значение.
# Условие срабатывания: last >= limit.
# Опционально
# limit-diff: 50KB/s # Порог абсолютного изменения.
# Условие срабатывания:
# last > previous и last - previous >= limit.
# Опционально
# limit-reldiff: 250% # Порог относительного изменения.
# Условие срабатывания:
# last > previous и last / previous >= limit.
# Опционально
# priority: 0 # Приоритет правила.
# Целое число. Опционально.
# По умолчанию — 0
# action: # Действие для правила.
# Опционально. По умолчанию используется
# глобальное действие
# nexthop: transit
# flow-spec-rules-names: # Список правил FlowSpec.
# Можно указать имя правила, заданного
# в этом файле вне секции rules, или правила
# с таким же именем из основной конфигурации.
# Опционально. По умолчанию — пустое значение
# - "rule1"
# port: # Параметры для векторов port-any и port-custom
# protocols: tcp # Протоколы для отслеживания: tcp, udp.
# Можно указать несколько значений через запятую.
# port-numbers: 0 # Порты для вектора port-custom.
# Можно указать отдельные порты и диапазоны
# в формате port1,...,portK-portK+M,...,portN.
Для параметров limit-threshold, limit-diff и limit-reldiff можно использовать модификаторы значений.
Если в правиле задан параметр units, доступны следующие модификаторы:
| Модификатор | Значение | Пример |
|---|---|---|
K | ×1000 | 100K |
M | ×1 000 000 | 100M |
G | ×1 000 000 000 | 1G |
T | ×1 000 000 000 000 | 1T |
% | /100 | 250% |
Если units не задан, значения применяются к байтам и пакетам.
Единицу измерения также можно указать непосредственно в значении:
| Модификатор | Единица измерения | Пример |
|---|---|---|
p, p% | пакеты | 100p, 50p% |
b, b% | биты | 100b, 50b% |
B, B% | байты | 100B, 50B% |
b, Kb, Mb, Gb | бит/с | 50Mb/s |
B, KB, MB, GB | байт/с | 50MB/s |
p, Kp, Mp, Gp | пакет/с | 100Kp/s |
Для значений скорости можно использовать как краткую запись, так и запись с /s, например Mb или Mb/s, MB или MB/s, Kp или Kp/s.
Если единица измерения указана непосредственно в значении, она имеет приоритет над параметром units. Например, при units: packets значение limit-diff: 50KB интерпретируется в байтах.
3.11.20 Управляемые объекты
Управляемые объекты можно задавать в основном конфигурационном файле или в отдельных файлах конфигурации.
# managed-objects:
# - name: MO_001 # Имя управляемого объекта
# cidrs: # Список CIDR, относящихся к управляемому объекту
# - 192.168.2.1/32
# asns: # Список ASN, относящихся к управляемому объекту
# - 201706
# rules: # Правила обнаружения аномалий для управляемого объекта
# - type: # Типы объектов, к которым применяется правило
# - global # Весь управляемый объект
# - subnet # Отдельная подсеть
# - local # Отдельный IP-адрес
# units: # Единицы измерения трафика
# # - bytes
# - packets
# vectors: # Векторы атак, к которым применяется правило
# - mssql-amp
# limit-threshold: 1 # Абсолютное пороговое значение
3.12 Настройка тестового объекта
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.13 Настройка 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.14 Запуск сервисов
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.15 Создание SSH-пользователя
Для синхронизации и выполнения проверок веб-интерфейс устанавливает SSH-соединение с каждой системой Flowcollector.
Убедитесь что на каждой системе Flowcollector есть настроенный SSH-пользователь с доступом к sudo.
1. Создать нового пользователя:
sudo adduser fc-web
2. Добавить пользователя в группу sudo:
sudo usermod -aG sudo fc-web
3. Убедиться, что авторизация по SSH через пароль разрешена для этого пользователя.
3.16 Настройка 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.17 Настройка веб-интерфейса
В зависимости от условий установки требуется сменить авторизационные данные и порты для базы данных и др. информацию в .env-файле. Сначала настраивается веб-интерфейс, после него - брокер.
1. Открыть для редактирования файл конфигурации веб-интерфейса:
sudo nano /opt/sp-spider/.env
2. Внести изменения:
NODE_ENV=production
VITE_APP_PORT=3333 # Порт веб-интерфейса
VITE_APP_HOST="0.0.0.0" # Адрес, на котором доступен веб-интерфейс
HTTP_TIMEOUT=10000 # Таймаут HTTP-запросов, мс
APP_SECRET=salt_salt_salt # Секретный ключ для хэширования паролей. Не меняйте после первого запуска
# Параметры подключения к PostgreSQL
DB_HOST="localhost" # Адрес сервера PostgreSQL
DB_PORT="5432" # Порт PostgreSQL
DB_USER="YOUR_DB_USER" # Имя пользователя PostgreSQL
DB_DATABASE="YOUR_DB_NAME" # Имя базы данных PostgreSQL
DB_PASSWORD="YOUR_DB_PASSWORD" # Пароль пользователя PostgreSQL
# NATS для обмена данными между компонентами кластера
NATS_URL="" # Адрес сервера NATS. В многонодовой установке должен быть доступен всем инстансам Spider
NATS_NAME="" # Имя клиентского подключения NATS. Пустое значение — имя по умолчанию
NATS_USER="" # Имя пользователя NATS. Оставьте пустым, если авторизация по логину и паролю не используется
NATS_PASSWORD="" # Пароль пользователя NATS. Оставьте пустым, если авторизация по логину и паролю не используется
NATS_TOKEN="" # Токен авторизации NATS. Используется вместо имени пользователя и пароля
NATS_REQUIRED="true" # Обязательное подключение к NATS
NATS_RECONNECT_WAIT_MS="2000" # Задержка между попытками переподключения к NATS, мс
NATS_MAX_RECONNECT_ATTEMPTS="-1" # Максимальное число попыток переподключения к NATS. Значение -1 — без ограничения
# Выбор лидера через JetStream KV
LEADER_ELECTION_BUCKET="SP_SPIDER_LEADER" # Имя JetStream KV bucket для выбора лидера. Должно совпадать у всех инстансов кластера
LEADER_ELECTION_KEY="spider" # Ключ JetStream KV для выбора лидера. Инстансы с одинаковыми bucket и key участвуют в одном выборе лидера
LEADER_ELECTION_TTL_MS="6000" # Время жизни записи лидера, мс. После истечения другой инстанс может стать лидером
LEADER_ELECTION_HEARTBEAT_MS="2000" # Интервал обновления записи лидера, мс. Должен быть меньше LEADER_ELECTION_TTL_MS
LEADER_ELECTION_JITTER_MS="1000" # Задержка между попытками стать лидером
# LEADER_ELECTION_REPLICAS= # Число реплик JetStream для хранения записи лидера. Пустое значение — автоматически: 3 для кластера NATS, 1 для одиночного NATS
# NODE_ID="name" # Идентификатор инстанса Spider. Если не задан, формируется автоматически в формате ${hostname}-${pid}
# Параметры подключения к ClickHouse
CLICKHOUSE_USER=default # Пользователь ClickHouse
CLICKHOUSE_PASSWORD=password # Пароль ClickHouse
CLICKHOUSE_DB=default # База данных ClickHouse
CLICKHOUSE_HOST=127.0.0.1 # Адрес ClickHouse
CLICKHOUSE_PORT=8123 # Порт ClickHouse
CLICKHOUSE_MIGRATIONS="true" # Включение миграции базы данных ClickHouse при обновлении с предыдущих версий SP-Spider
# Параметры аутентификации через LDAP
LDAP_ENABLED=true # Включает интеграцию с LDAP
LDAP_URL="ldap://ldap.example.local:389" # Адрес LDAP-сервера
LDAP_DN="dc=company,dc=local" # Базовый DN каталога
LDAP_GROUP_CN="users" # CN группы пользователей
LDAP_SERVICE_ACCOUNT_DN="uid=user1,ou=people,dc=company,dc=local" # DN сервисной учётной записи
LDAP_SERVICE_ACCOUNT_PASSWORD="YOUR_LDAP_PASSWORD" # Пароль сервисной учётной записи
# Параметры подключения по LDAPS
LDAP_CERT="" # Путь к CA-сертификату при использовании LDAPS
# Параметры аутентификации через TACACS
TAC_ENABLED=true # Включает интеграцию с TACACS
TAC_HOST="YOUR_TACACS_HOST" # Адрес TACACS-сервера
TAC_PORT="49" # Порт TACACS
TAC_SECRET="your_secret_key" # Секретный ключ TACACS
TAC_GROUP_NAME="group_admin,group_operator" # Группы доступа
TAC_SERVICE_NAME="spider" # Имя сервиса
# Параметры аутентификации через Active Directory
AD_ENABLED=true # Включает интеграцию с Active Directory
AD_URL="ldaps://YOUR_AD_HOST:636" # Адрес сервера Active Directory
AD_DN="DC=company,DC=local" # Базовый DN домена Active Directory
AD_GROUP_CN="spider-admins" # CN группы пользователей Active Directory
AD_SERVICE_ACCOUNT_UPN="svc-ldap@company.local" # UPN сервисной учётной записи Active Directory
AD_SERVICE_ACCOUNT_PASSWORD="YOUR_AD_PASSWORD" # Пароль сервисной учётной записи Active Directory
AD_CERT="/usr/local/share/ca-certificates/ad.crt" # Путь к CA-сертификату для LDAPS
# Параметры аутентификации через RADIUS
RAD_ENABLED=true # Включает интеграцию с RADIUS
RAD_HOST="YOUR_RADIUS_HOST" # Адрес RADIUS-сервера
RAD_PORT="1812" # Порт RADIUS
RAD_SECRET="YOUR_RADIUS_SECRET" # Секретный ключ RADIUS
RAD_VENDOR_ID="YOUR_VENDOR_ID" # Идентификатор производителя для RADIUS-атрибутов
RAD_VENDOR_TYPE="YOUR_VENDOR_TYPE" # Тип атрибута производителя для RADIUS
RAD_GROUP="admin,user" # Группы пользователей RADIUS
# SMTP
SMTP_USED=false # Использование SMTP для отправки уведомлений
SMTP_SENDER_MAIL="YOUR_SMTP_SENDER_MAIL" # Адрес электронной почты отправителя
SMTP_PASSWORD="YOUR_SMTP_PASSWORD" # Пароль SMTP
SMTP_SERVER="YOUR_SMTP_SERVER" # Адрес SMTP-сервера
SMTP_PORT="YOUR_SMTP_PORT" # Порт SMTP-сервера
SMTP_QUEUE_INTERVAL_MS=5000 # Интервал обработки очереди SMTP, мс
SMTP_DEFAULT_MAX_ATTEMPTS=3 # Максимальное число попыток отправки сообщения
INTERFACE_VERSION=spider # Версия интерфейса
AUTH_PROVIDER_ORDER="tacacs,radius" # Порядок обращения к сервисам авторизации. Для AD и LDAP не используется
SYSLOG_THRESHOLD_REPEAT_INTERVAL_SECONDS=0 # Интервал повторной отправки активных DosGate threshold-событий в Syslog, с. Значение 0 отключает повторную отправку
NODE_SERVICE_AVAILABILITY_FAILURE_THRESHOLD=3 # Число последовательных ошибок до фиксации недоступности сервиса ноды
3. Открыть для редактирования файл конфигурации брокера:
sudo nano /opt/sp-spider-broker/.env
4. Внести изменения:
# =============================================================================
# Application
# =============================================================================
APP_PORT=3335 # Порт, на котором запустится сервис
APP_SECRET="YOUR_APP_SECRET" # Секретный ключ приложения. Пустое значение запрещено
SPIDER_URL="" # URL интерфейса Spider. Пустое значение отключает исходящие запросы
SPIDER_AUTH_TOKEN="" # Токен авторизации Spider. Обязателен, если задан SPIDER_URL
# =============================================================================
# PostgreSQL (данные из .env интерфейса)
# =============================================================================
DB_HOST="localhost" # Адрес сервера PostgreSQL
DB_PORT="5432" # Порт PostgreSQL
DB_USER="YOUR_DB_USER" # Имя пользователя
DB_DATABASE="YOUR_DB_NAME" # Имя базы данных
DB_PASSWORD="YOUR_DB_PASSWORD" # Пароль пользователя. Может быть пустым, если PostgreSQL настроен без пароля
POLICY_PATH="/var/lib/dosgate-uh/profiles/" # Путь к папке с политиками сессионной защиты. Обязательно в конце ставить "/". Пустое значение отключает создание каталога при старте
OFFENDERS_CONF_PATH="/opt/sp-spider-broker/offenders/offenders.conf" # Путь к конфигурации обработчика оффендеров сессионной защиты
DGUH_CONF="/etc/dosgate-uh.conf" # Путь к конфигурации сессионной защиты
DOSGATE_CONF_PATH="/etc/dosgate.conf" # Путь к основному YAML-файлу конфигурации DosGate. Пустое значение отключает восстановление конфигурации при старте
DGUH_SNAPSHOTS="/var/cache/dosgate-uh-snapshots/" # Путь к снэпшотам дампов сессионной защиты. Пустое значение отключает создание каталога и ежедневную очистку снэпшотов
# =============================================================================
# Clickhouse (данные из .env интерфейса)
# =============================================================================
CLICKHOUSE_USER=default # Пользователь ClickHouse
CLICKHOUSE_PASSWORD=password # Пароль ClickHouse
CLICKHOUSE_DB=default # База данных ClickHouse
CLICKHOUSE_HOST=127.0.0.1 # Адрес ClickHouse
CLICKHOUSE_PORT=8123 # Порт ClickHouse
# =============================================================================
# Flowcollector
# =============================================================================
FC_MO_PATH="/opt/spfc/etc/mo/" # Путь к объектам защиты FlowCollector. Обязательно в конце ставить "/"
FC_MO_SYMLINK_PATH="/opt/spfc/etc/mo.enabled/" # Путь к симлинкам на объекты защиты FlowCollector. Обязательно в конце ставить "/"
FC_ANALYZER_CONF_PATH="/opt/spfc/etc/analyzer.yaml" # Путь к конфигурации анализатора FlowCollector
FC_ANALYZER_BINARY_PATH="/opt/spfc/bin/analyzer" # Путь к бинарному файлу анализатора
FLOWSPEC_CONF_PATH="/opt/spfc/etc/" # Путь к файлу со списками правил FlowSpec
# =============================================================================
# Threshold Learner (Сервис "Обучение")
# =============================================================================
FC_LEARNER_API_URL=http://127.0.0.1:8095 # Адрес API сервиса "Обучение"
FC_LEARNER_SERVICE_NAME="threshold-learner" # Имя службы сервиса "Обучение" в systemd
FC_LEARNER_ENV_PATH="/opt/threshold-learner/etc/.env" # Путь к конфигурационному файлу сервиса "Обучение"
# =============================================================================
# GeoIP
# =============================================================================
MMDB_PATH="/etc/dosgate/GeoLite2-Country.mmdb" # Путь к mmdb-файлу
MMDB_DEFAULT_PATH="/usr/share/dosgate/GeoLite2-Country.mmdb" # Путь к дефолтному mmdb-файлу
# =============================================================================
# Rlog
# =============================================================================
RLOG_URL="http://127.0.0.1:3003" # URL сервиса
RLOG_RULES_PATH="/var/lib/rlog/rules/" # Путь к правилам обработки syslog-сообщений сервиса Rlog
RLOG_DUMP_PATH="/var/lib/rlog/dumps/" # Путь к папке с дампами
# =============================================================================
# BGP
# =============================================================================
GOBGP_ENABLED=false # Включение мониторинга BGP-пиров через GoBGP
BIRD_ENABLED=false # Включение мониторинга BGP-пиров через BIRD
GOBGP_GRPC_SERVER="GOBGP_HOST:PORT" # Адрес gRPC-сервера GoBGP. Пустое значение отключает gRPC-клиент
# =============================================================================
# Logging & Monitoring
# =============================================================================
UPDATE_CONFIG_INTERVAL_SECONDS=10 # Интервал обновления конфигурации, с. При отсутствии или некорректном значении используется 60 с
NETCONF_CACHE_PATH="/etc/sp-spider-broker/netconf.yaml" # Путь к локальному YAML-кэшу последней применённой конфигурации
NETCONF_MANAGE_ENABLED="false" # Управление сетевыми интерфейсами через Broker. Значение false отключает применение и синхронизацию настроек интерфейсов
BROKER_MODE_LOGGER="DEBUG" # Режим логирования Broker: PRODUCT или DEBUG
BROKER_LOGGER_FILE_PATH="./logs/log.log" # Путь к файлу логов Broker. Если не задано — логи пишутся в stdout
OFF_MONITORING=false # Отключение мониторинга оффендеров
OFFENDERS_MODE_LOGGER="PRODUCT" # Режим логирования обработчика оффендеров: PRODUCT или DEBUG
OFFENDERS_LOGGER_FILE_PATH="" # Путь к файлу логов обработчика оффендеров. Пустое значение отключает запись в файл
3.18 Установка 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.19 Отключение механизма provisioning
Отключить механизм provisioning для сохранения изменений в дашбордах при перезапуске сервиса:
sudo sed -i 's|^\(provisioning = /etc/grafana/provisioning\)|#\1|' /etc/grafana/grafana.ini && \
sudo systemctl restart grafana-server
3.20 Настройка Grafana (при использовании пакета из репозитория Servicepipe)
Открыть веб-интерфейс Grafana в браузере. Интерфейс доступен по порту 3000. По умолчанию используются учетные данные: admin / admin. При первом входе задать новый пароль, соответствующий требованиям информационной безопасности.
3.20.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.20.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.21 Настройка Grafana (в случае установки вне пакета Servicepipe)
Документация по настройке Grafana при установке вне дистрибутива Servicepipe размещены по ссылке.
3.22 Настройка компонента SP-events
1. Открыть для редактирования файл /opt/sp-events/.env:
Примечание
В качестве шаблона можно использовать /opt/sp-events/.env.example
# sp-events
EH_SERVER_PORT = 8081 # Порт работы сервера sp-events
PREFORK_OFF = false # Отключение prefork
DASHBOARD_URL = "http://127.0.0.1:3000/d/fc-reports/reports" # URL для просмотра отчёта
ANALYZER_NODE_IP = "127.0.0.1" # IP-адрес ноды FlowCollector/Analyzer, рядом с которой запущен экземпляр sp-events
TEMPLATE_FOLDER = "/opt/sp-events/template" # Полный путь к шаблонам сообщений
DATA_FOLDER = "/opt/sp-events/data" # Полный путь к папке с данными
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_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" # Полный путь к файлу базы данных SQLite
TG_USED = false # Включение использования Telegram
CHATS_IDS_DUMP = "345389346,2239564" # Идентификаторы чатов для отправки автоматических дампов
CHATS_IDS_EVENT = "-1002416780921" # Идентификаторы чатов для отправки сообщений о начале и окончании атак
TG_PORT = 3009 # Порт Telegram-сервера для отправки сообщений о событиях
TG_TOKEN = "YOUR_TELEGRAM_BOT_TOKEN" # Токен Telegram-бота
TG_KEEP_ALIVE = 10 # Keep-alive для отправки при создании дампа
DUMP_API_URL = "http://localhost:5001/sp-events" # URL для создания дампа
# reports
REPORTS_SERVER_PORT = 9080 # Порт работы сервера Reports
# MongoDB
MONGO_HOST = 127.0.0.1 # Адрес сервера MongoDB
MONGO_PORT = 27017 # Порт MongoDB
MONGO_DATABASE = test # Имя базы данных MongoDB
MONGO_USERNAME = events # Имя пользователя MongoDB
MONGO_PASSWORD = events # Пароль пользователя MongoDB
# NATS. Используется, если NATS настроен в /opt/spfc/etc/analyzer.yaml
NATS_URL = nats://localhost:4222 # URL сервера NATS
NATS_EVENT_SUBJ = analyzer.notification # Тема NATS для событий Analyzer
# PostgreSQL
POSTGRES_USED = true # Включение использования PostgreSQL
POSTGRES_HOST = localhost # Адрес сервера PostgreSQL
POSTGRES_PORT = 5432 # Порт PostgreSQL
POSTGRES_USER = spider # Имя пользователя PostgreSQL
POSTGRES_DATABASE = spider # Имя базы данных PostgreSQL
POSTGRES_PASSWORD = spider # Пароль пользователя PostgreSQL
# HTTP-получатель событий
HTTP_RECIPIENT_USED = false # Включение отправки событий по HTTP
HTTP_RECIPIENT_URL = "http://example.local/events" # URL получателя событий
HTTP_RECIPIENT_HEADER_KEY = "secret-key" # Ключ HTTP-заголовка
HTTP_RECIPIENT_HEADER_VALUE = "secret-value" # Значение HTTP-заголовка
# Блокировка записи отчётов
BLOCKING_REPORT_USED = true # Включение блокировки записи отчётов при одновременной записи данных
BLOCKING_REPORT_CACHE_SERVER_PORT = 5008 # Порт сервиса кэша для блокировки записи отчётов
# Spider
SPIDER_USED = true # Включение отправки данных в Spider
SPIDER_URL = "http://localhost:3333" # URL сервера Spider
SPIDER_AUTH_TOKEN = "YOUR_SPIDER_AUTH_TOKEN" # Токен авторизации 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.23 Финальный этап: запуск и проверка состояния сервисов
Перезапустить брокер сообщений sp-spider-broker:
sudo systemctl restart sp-spider-broker
Запустить и активировать при загрузке основные сервисы:
sudo systemctl enable --now sp-spider sp-spider-broker
Проверка состояния PostgreSQL:
sudo systemctl status postgresql
Проверка состояния NGINX:
sudo systemctl status nginx
Проверка состояния основного сервиса SP-Spider:
sudo systemctl status sp-spider
Проверка состояния сервиса SP-Spider Broker:
sudo systemctl status sp-spider-broker