Перейти к основному содержимому
Версия: 4.5.X

Запуск нескольких экземпляров коллекторов

В некоторых сценариях использования SIEM KOMRAD может потребоваться запустить несколько независимых экземпляров сервиса сбора событий на одном хосте. Это руководство подробно описывает, как правильно настроить такие экземпляры, обеспечив их полную изоляцию и стабильную работу.

Эта инструкция универсальна и применима к любому коллектору KOMRAD. Мы рассмотрим общие шаги, а затем углубимся в специфику настройки для:

  • komrad-syslog-collector: для сбора событий по Syslog.
  • komrad-http-collector: для приёма данных по HTTP/HTTPS, например, от веб-приложений, систем мониторинга или API.

KOMRAD Enterprise SIEM позволяет осуществлять централизованный сбор событий ИБ, выявлять инциденты и оперативно на них реагировать. Гибкость настройки коллекторов является ключом к эффективному управлению потоками данных в сложных инфраструктурах.

Зачем это может понадобиться?

Запуск нескольких коллекторов на одной машине открывает широкие возможности для управления данными и безопасностью. Вот несколько распространенных сценариев:

  • Мультитенантность (Multi-tenancy): Если вы предоставляете услуги по мониторингу нескольким заказчикам (тенантам), вы можете выделить для каждого из них отдельный экземпляр коллектора. Это обеспечивает изоляцию данных, гибкую конфигурацию (уникальные TLS, порты, учётные данные) и раздельный учёт ресурсов.

  • Разделение потоков по уровню критичности: Вы можете создать один коллектор для высокоприоритетных событий, а другой — для менее важных данных с другими параметрами.

  • Гранулярное управление доступом: Присваивая разные setup_id для разных экземпляров, можно настроить в KOMRAD политики доступа так, чтобы, например, младшие специалисты SOC видели события только с определенных систем.

Пошаговая инструкция

Общий алгоритм идентичен для любого типа коллектора. Для примера мы создадим "двойника" для коллектора tenant2.

Шаг 1: Создание копии сервисного файла systemd

Скопируем оригинальный сервисный файл в /etc/systemd/system/, чтобы наши изменения не были затронуты при обновлениях пакетов.

# Замените 'syslog' на 'http' при работе с HTTP-коллектором
sudo cp \
/lib/systemd/system/komrad-syslog-collector.service \
/etc/systemd/system/komrad-syslog-collector-tenant2.service

Шаг 2: Адаптация нового сервисного файла

Отредактируйте новый файл (...-tenant2.service), указав уникальные пути и параметры.

/etc/systemd/system/komrad-syslog-collector-tenant2.service
[Unit]
Description=Syslog events collector for tenant2
# ...

[Service]
# ...
RuntimeDirectory=komrad-syslog-collector-tenant2
# ...
EnvironmentFile=-/etc/default/komrad-syslog-collector-tenant2
ExecStart=/usr/bin/komrad-syslog-collector -c /etc/echelon/komrad/komrad-syslog-collector-tenant2.yaml
# ...

Шаг 3: Создание изолированной конфигурации

Создадим копии файлов конфигурации и окружения.

# Замените 'syslog' на 'http' при необходимости
sudo cp \
/etc/echelon/komrad/komrad-syslog-collector.yaml \
/etc/echelon/komrad/komrad-syslog-collector-tenant2.yaml

sudo cp \
/etc/default/komrad-syslog-collector \
/etc/default/komrad-syslog-collector-tenant2

Шаг 4: Настройка конфигурационного файла

Это ключевой шаг. Откройте новый файл конфигурации (...-tenant2.yaml) и измените параметры, которые должны быть уникальными для каждого экземпляра.

Для komrad-syslog-collector

Необходимо указать уникальные порты (tcp-port, udp-port) и путь к Unix-сокету (unix.path).

Блок collector в komrad-syslog-collector-tenant2.yaml
collector:
type: syslog
value:
tcp-port: 49001 # Убедитесь, что порт уникален
udp-port: 49051 # Убедитесь, что порт уникален
# ...
unix:
path: /var/lib/echelon/komrad/syslog-collector-tenant2/komrad-syslog.sock
# ...

Для komrad-http-collector

Этот коллектор может открывать две конечные точки: endpoint и fake-elastic. Для каждой из них необходимо задать уникальный порт и, при необходимости, уникальные учётные данные.

Блок collector в komrad-http-collector-tenant2.yaml
collector:
type: http
value:
endpoint:
basic-auth: true
username: tenant2_user
password: VeryLongAndSecretPasswordForTenant2
listen-address: 127.0.0.1 # Более безопасно для локальных источников
listen-port: 48001 # Уникальный порт
# ...
fake-elastic:
enable: true # Если используется
username: tenant2_elastic_user
password: AnotherSecretPasswordForElastic
listen-port: 9201 # Уникальный порт
# ...
warning
Безопасность listen-address

По умолчанию listen-address может быть установлен в 0.0.0.0, что делает коллектор доступным со всех сетевых интерфейсов. Если источник событий (например, Grafana) находится на той же машине, что и коллектор, настоятельно рекомендуется изменить listen-address на 127.0.0.1. Это ограничит доступ к порту только локальными процессами, значительно повышая безопасность.

Общие параметры для всех типов коллекторов

Вне зависимости от типа коллектора, обязательно укажите уникальные пути для хранения состояния (storage) и журнала предзаписи (wal).

Блоки storage и wal
storage:
storage_path: /var/lib/komrad/syslog-collector-tenant2/storage
# ...

wal:
wal_path: /var/lib/komrad/syslog-collector-tenant2/wal
# ...

Шаг 5: Создание каталогов и настройка прав доступа

Используйте новые имена и пути из конфигурации.

# Создаем каталоги для WAL, Storage и (если нужно) Unix-сокета
sudo mkdir -p /var/lib/komrad/syslog-collector-tenant2
sudo mkdir -p /var/lib/echelon/komrad/syslog-collector-tenant2

# Устанавливаем владельца (обычно komrad:komrad)
sudo chown -R komrad:komrad \
/var/lib/komrad/syslog-collector-tenant2 \
/var/lib/echelon/komrad/syslog-collector-tenant2

# Устанавливаем права доступа
sudo chmod -R 0750 \
/var/lib/komrad/syslog-collector-tenant2 \
/var/lib/echelon/komrad/syslog-collector-tenant2

Шаг 6: Запуск и проверка нового сервиса

Все готово к запуску!

  1. Перезагрузите конфигурацию systemd: sudo systemctl daemon-reload
  2. Включите автозапуск нового сервиса: sudo systemctl enable komrad-syslog-collector-tenant2.service
  3. Запустите новый сервис: sudo systemctl start komrad-syslog-collector-tenant2.service
  4. Проверьте статус обоих сервисов: sudo systemctl status "komrad-syslog-collector*.service"

Продвинутый сценарий: Мультитенантный сбор алертов по HTTP

Рассмотрим реальный кейс. У нас есть два клиента, Alpha и Beta. У каждого из них есть своя система мониторинга ( Grafana или Prometheus AlertManager), которая отправляет алерты по HTTP. Наша задача — принять эти алерты в KOMRAD, но так, чтобы данные были полностью изолированы. Мы создадим два экземпляра komrad-http-collector.

1. Конфигурация для komrad-http-collector-alpha.yaml

Этот коллектор будет слушать порт 48001 и требовать аутентификацию alpha_user.

collector:
type: http
value:
endpoint:
basic-auth: true
username: alpha_user
password: VeryLongAndSecretPasswordForAlpha
listen-address: 127.0.0.1
listen-port: 48001
# ... (уникальные storage_path: /var/lib/komrad/http-collector-alpha/storage и т.д.)

2. Конфигурация для komrad-http-collector-beta.yaml

Этот коллектор будет слушать порт 48002 и требовать аутентификацию beta_user.

collector:
type: http
value:
endpoint:
basic-auth: true
username: beta_user
password: AnotherSecretPasswordForBetaMonitoring
listen-address: 127.0.0.1
listen-port: 48002
# ... (уникальные storage_path: /var/lib/komrad/http-collector-beta/storage и т.д.)

3. Настройка источника (например, Grafana Alerting)

В настройках Contact points в Grafana для каждого тенанта создается свой Webhook:

  • Для тенанта Alpha:

    • URL: http://<IP_коллектора>:48001/
    • Authorization / Basic Auth: alpha_user / VeryLongAndSecretPasswordForAlpha
  • Для тенанта Beta:

    • URL: http://<IP_коллектора>:48002/
    • Authorization / Basic Auth: beta_user / AnotherSecretPasswordForBetaMonitoring

Результат: Алерты от Grafana тенанта Alpha поступают в свой экземпляр коллектора, а от Beta — в свой. В KOMRAD эти потоки событий будут иметь разные setup_id, что позволяет применять разные правила корреляции, строить отдельные дашборды и настраивать гранулярные права доступа для аналитиков.


Мониторинг и диагностика

Просмотр логов

Чтобы просматривать логи для каждого экземпляра отдельно, используйте journalctl с указанием имени сервиса.

# Следить за логами нового сервиса в реальном времени
sudo journalctl -f -u komrad-syslog-collector-tenant2.service

Возможные проблемы и их решение

Поиск и устранение неисправностей

Если новый сервис не запускается, вот несколько шагов для диагностики:

  • Первый шаг: Всегда проверяйте детальный лог сервиса.
  sudo journalctl -xeu имя-вашего-сервиса.service
  • Проблема: Сервис не запускается, в статусе failed. В логах может быть ошибка address already in use.

    • Причина: Конфликт ресурсов. Либо порт уже занят, либо файл Unix-сокета не может быть создан.
    • Решение: Убедитесь, что в файле .yaml указаны уникальные порты и пути. Проверьте, кто занимает порт, командой sudo netstat -tulpn.
  • Проблема: В логах сообщения permission denied.

    • Причина: Неправильно выставлены права на каталоги.
    • Решение: Повторно выполните команды chown и chmod из Шага 5.
  • Проблема: В логах ошибки file not found или yaml: unmarshal errors.

    • Причина: Опечатка в пути к .yaml файлу в .service файле, либо синтаксическая ошибка в самом .yaml ( проверьте отступы!).
    • Решение: Внимательно перепроверьте все пути и синтаксис конфигурации.

Заключение

Поздравляем! Вы успешно настроили и запустили второй, полностью изолированный экземпляр коллектора. Этот подход можно масштабировать для любого количества экземпляров, просто повторяя шаги с уникальными именами и путями. Такая гибкость позволяет строить надежные и легко управляемые системы сбора данных на базе KOMRAD SIEM.