Кластеризация komrad-bus
KOMRAD Enterprise SIEM поддерживает организацию отказоустойчивой доставки событий с помощью кластера NATS JetStream. В данном разделе описаны шаги по созданию инфраструктуры из трёх связанных между собой узлов KOMRAD, обеспечивающих репликацию событий.
Целевая инфраструктура
Для корректной работы кластер должен находиться в состоянии кворума --- как минимум половина узлов плюс один должна быть активна. По этой причине кластер рекомендуется строить из нечётного количества узлов. Минимальное количество --- три узла.
Для построения отказоустойчивой инфраструктуры необходимо разделить в komrad-bus два основных потока данных:
- Поток событий --- события от коллекторов, отфильтрованные события.
- Поток служебных сообщений --- управляющие сообщения, оповещения и прочие внутренние данные.
Если не разделить потоки, при кластеризации возникнет хаос: каждый из узлов сможет отправлять управляющие сообщения коллекторам и вмешиваться в работу других серверов.
Для разделения потоков на каждом узле необходимо запустить два экземпляра komrad-bus:
- Событийный komrad-bus --- участвует в транспорте событий и входит в кластер JetStream.
- Локальный (внутренний) komrad-bus --- обслуживает поток служебных сообщений и не входит в кластер, обеспечивая работу только компонентов KOMRAD на текущем узле.
Создание второго komrad-bus для кластера
Создание systemd-юнита
Скопируйте файл systemd-юнита установленного komrad-bus:
sudo cp /lib/systemd/system/komrad-bus.service /lib/systemd/system/komrad-bus-events.service
Отредактируйте файл /lib/systemd/system/komrad-bus-events.service, указав другой конфигурационный файл и файл переменных окружения:
EnvironmentFile=-/etc/default/komrad-bus-events
ExecStart=/usr/bin/komrad-bus -c /etc/echelon/komrad/komrad-bus-events.yaml
Создание конфигурации
Скопируйте конфигурацию основного komrad-bus:
sudo cp /etc/echelon/komrad/komrad-bus.yaml /etc/echelon/komrad/komrad-bus-events.yaml
В файле komrad-bus-events.yaml измените путь к конфигурации NATS:
nats:
# Путь до файла конфигурации NATS
path: /etc/echelon/komrad/komrad-bus-events.conf
Настройте стандартный клиент NATS (замените komrad-1, komrad-2, komrad-3 на IP-адреса или доменные имена машин кластера):
bus:
default:
client-name: komrad-1
servers:
- nats://komrad-1:4490
- nats://komrad-2:4490
- nats://komrad-3:4490
# ...
replicas: 3
Установите права доступа:
sudo chmod 664 /etc/echelon/komrad/komrad-bus-events.yaml
Создание директории хранения
sudo mkdir /var/lib/echelon/komrad/komrad-bus-events
sudo chown komrad:komrad /var/lib/echelon/komrad/komrad-bus-events
Конфигурация NATS JetStream
Скопируйте конфигурационный файл NATS:
sudo cp /etc/echelon/komrad/komrad-bus.conf /etc/echelon/komrad/komrad-bus-events.conf
Добавьте блок кластеризации (замените адреса на актуальные):
cluster: {
listen: komrad-1:44900
name: events-cluster
routes: [
nats://komrad-2:44900
nats://komrad-3:44900
]
}
В поле listen укажите адрес текущей машины, в поле routes --- адреса всех остальных элементов кластера. Имя кластера (name) должно быть одинаковым на всех узлах.
Измените порт для основного прослушивания и HTTP-порт (поскольку на машине будет два экземпляра komrad-bus):
listen: komrad-1:4490
# ...
http_port: 4491
Измените директорию хранения:
STORE_DIR = "/var/lib/echelon/komrad/komrad-bus-events/.jetstream"
Обеспечьте уникальность поля server_name на каждом узле кластера. По умолчанию значение --- komrad. Добавьте суффикс, например: komrad-a, komrad-b, komrad-c.
Установите права доступа:
sudo chmod 664 /etc/echelon/komrad/komrad-bus-events.conf
Запуск сервиса
sudo systemctl enable komrad-bus-events
sudo systemctl start komrad-bus-events
Настройка конфигурации сервисов
После внесения поддержки кластеризации конфигурация блока bus в конфигурационных файлах представляет собой набор именованных конфигураций клиентов NATS:
| Конфигурация | Описание |
|---|---|
default | Используется, если более специфичная конфигурация не указана. Обслуживает служебные сообщения |
events | Связана с потоком событий: JetStream-потоки EVENTS, FILTERS и LOGS. Охватывает связку коллектор-процессор и коллектор-коррелятор |
correlation | Связана с потоком инцидентов: охватывает связку коррелятор-менеджер инцидентов |
Конфигурацию default можно оставить без изменений. Блок events настраивается для подключения сервисов к кластеру:
events:
servers:
- nats://komrad-1:4490
- nats://komrad-2:4490
- nats://komrad-3:4490
user: komrad
password: pass
user-credentials: ""
client-name: komrad-a
tls:
disable: false
ServerName: ""
TrustedCA: /var/lib/echelon/komrad/certs/ca.pem
Cert: /var/lib/echelon/komrad/certs/client.pem
CertKey: /var/lib/echelon/komrad/certs/client-key.pem
system-pool: false
min-version: "1.3"
client-auth: require-and-verify-client-cert
tuning:
connect-timeout: 10s
max-reconnects: 1000000
max-wait: 0s
ping-interval: 2m
max-pings-outstanding: 2
publish-async-max-pending: 0
reconnect-interval: 5s
reconnect-wait: 1s
retry-on-failed-connect: false
# Количество реплик потоков JetStream
replicas: 3
Блок events необходимо добавить во все конфигурационные файлы, где присутствует секция bus.
Ключевые параметры
-
servers--- перечислите адреса всех событийныхkomrad-bus, входящих в кластер. -
client-name--- для каждого узла задайте уникальное имя клиента. Если имена будут совпадать, узлы будут перехватывать данные друг у друга, что приведёт к потере событий и инцидентов. -
tuning.replicas--- коэффициент репликации потоков JetStream. Рекомендуется устанавливать значение, равное количеству узлов в кластере (в данном случае ---3). Если оставить значение по умолчанию, при отказе любого узла будет утрачена часть данных.
Особенности работы кластера
-
Синхронизация идентификаторов фильтров. Одинаковые по смыслу фильтры на разных узлах должны иметь одинаковый ID. Идентификатор используется для дальнейшей корреляции и создания инцидентов. Без синхронизации возможно появление ложноположительных инцидентов и пропуск реальных угроз.
-
Репликация событий. События от всех коллекторов поступают на все процессоры и корреляторы. При одинаковых фильтрах и директивах на узлах будут появляться идентичные инциденты.
-
Отказ узла. При выводе узла из строя остальные члены кластера могут не сразу пометить его как вышедший из строя. В этот период доставка сообщений может задерживаться, однако в конечном итоге все сообщения будут доставлены.
-
Сертификаты. У всех элементов кластера должен быть общий корневой сертификат.