Перейти к содержанию

Руководство по настройке лог-коллектора. Активные источники событий

Радар лог-коллектор. Описание.

Радар лог-коллектор (RADAR LOG-COLLECTOR), далее лог-коллектор, предназначен для организации активного сбора событий от активов, не имеющих возможности отправки данных в сторонние системы. Лог-коллектор позволяет организовать различные схемы сбора событий от любых активов, участвующих в сетевом взаимодействии, создающих журналы событий.

Основные функции:

  • сбор, локально и удалённо по различным протоколам;
  • отправка событий в другие системы;
  • обработка событий перед отправкой;
  • пересылка событий в зашифрованном виде и со сжатием;
  • отправка по расписанию;
  • накопление событий при разрыве соединения и отправка после восстановления.

Поддерживаемые операционные системы следующих семейств:

  • Windows Vista, Windows 7, Windows 8, Windows 10, Windows 11;
  • Windows Server 2008, Windows Server 2011, Windows Server 2016, Windows Server 2019, Windows Server 2022;
  • Linux Debian;
  • Linux CentOS;
  • Linux RedHat.

Поддерживаемые способы и протоколы отправки:

  • TCP;
  • SSL/TLS;
  • UDP;
  • Kafka;
  • Запись в локальный файл.

Сбор событий

  1. Локальный:

    • Event Tracing for Windows (ETW);
    • File Read;
    • Windows Event Log;
    • Результаты работы скрипта (Python/CMD/PowerShell/Bash/Perl).
  2. Удалённый:

    • Windows Event Log via RPC;
    • WMI;
    • ODBC;
    • File via SMB;
    • File via SSH;
    • File via FTP;
    • File via SFTP;
    • File via HTTP(S);
    • Checkpoint OPSEC LEA.
  3. Пассивный:

    • TCP;
    • UDP;
    • Netflow v5, v9;
    • Syslog;
    • SNMP Trap;
    • HTTP.

Основные характеристики

Программное обеспечение лог-коллектор обеспечивает решение перечисленных ниже основных задач:

  • сбор/прием событий;
  • обработка событий;
  • отправка событий;
  • временное хранение событий.

Сбор/прием событий может осуществляться в любом из трех режимов:

  • Локальный. Лог-коллектор устанавливается в системе в виде агента, производит чтение файлов etw, eventlog, wmi, получение результатов выполнения скриптов (bash, perl, python, PowerShell) и их отправку в Платформу Радар (либо в промежуточный агент).

  • Пассивный. Лог-коллектор осуществляет прием событий от систем, которые могут самостоятельно отправлять данные.

  • Удаленный/активный. Лог-коллектор устанавливается на выделенный сервер и осуществляет удаленный сбор событий по различным протоколам. Также может быть установлен на конечном источнике событий, и осуществлять сбор не только с этого источника событий, но и с других систем. В этом случае необходимо предусмотреть дополнительные ресурсы для работы лог-коллектора.

Обработка событий позволяет обогатить события дополнительной технической информацией, изменить формат и кодировку перед их отправкой.

Отправка событий может осуществляться посредством их одновременной передачи в Платформу Радар и несколько внешних систем в зашифрованном виде со сжатием. При отправке событий возможна маркировка событий коллектором. Данная маркировка может быть использована для определения, от какого коллектора (или территориально распределенной площадки) поступило событие.

Временное хранение событий предотвращает потерю событий при разрыве соединения, накапливая события для их последующей отправки после восстановления соединения.

С учётной записью/без учётной записи. Лог-коллектор имеет возможность сбора событий как с использованием указанной служебной учетной записи для доступа к событиям, так и без учётной записи (для транспортов, где это технически возможно).

Архитектура

Лог-коллектор имеет компонентную архитектуру и включает в себя следующие программные компоненты:

  • Контроллер (controller)— осуществляет управление всеми компонентами лог-коллектора
  • Компонент сбора метрик (metric_server)— осуществляет сбор статистики по работе лог-коллектора
  • Компонент API управления (api_server)— предоставляет возможность удаленного управления лог-коллектором и мониторинга
  • Компонент журналирования (journal)— осуществляет ведение журнала работы лог-коллектора
  • Компоненты сбора/приема событий (inputs) — осуществляют сбор событий
  • Компоненты отправки событий (outputs) — осуществляют оправку событий

Управление настройками лог-коллектора и его компонентов может осуществляться как через основной конфигурационный файл на сервере, где установлен экземпляр лог-коллектора, так и централизовано, из веб-интерфейса Платформы Радар Управление лог-коллектором.

Установка лог-коллектора

Требования к техническому и программному обеспечению

Минимальные требования к ресурсам:

  • 4 Core
  • 4 GB RAM
  • 60 GB HDD

Минимальные требования к ресурсам при установке в системе с настроенным сервисом Windows Event Collector:

  • 4 Core
  • 8 GB RAM
  • 500 GB HDD

Важно! Требования к объему дискового пространства представлены без учета промежуточного хранения.

Для нормального функционирования лог-коллектора требуется установка на выделенные ресурсы одной из нижеперечисленных операционных систем, являющихся средой функционирования лог-коллектора:

  • Windows Vista, Windows 10, Windows 11;
  • Windows Server 2008, Windows Server 2011, Windows Server 2016, Windows Server 2019, Windows Server 2022;
  • Linux Debian;
  • Linux CentOS;
  • Linux RedHat.

На приведенных выше минимальных требованиях к ресурсам лог-коллектор обеспечивает обработку потока 5000 событий в секунду.

Возможные схемы развертывания

  • Установка на источнике для организации локального сбора событий с последующей передачей в Платформу Радар или в промежуточный лог-коллектор.
  • Установка на выделенный сервер для организации удаленного сбора и пересылки событий.
  • Установка цепочки лог-коллекторов для передачи событий в зашифрованном виде.

Установка лог-коллектора на различных ОС

Важно! Установка лог-коллектора осуществляется под учетной записью с правами администратора.

Установка в ОС Windows

  1. Запустить msi-пакет установки лог-коллектора (находится в каталоге /opt/pangeoradar/distrs/pangeoradar-logcollector/ платформы)

  2. В открывшемся окне (см. рисунок 1) нажать кнопку (Next / Далее)

    Рисунок 1 -- Запуск установки

    Если ранее уже был установлен лог-коллектор не через msi-пакет, то пункты (4-7) можете пропустить. После установки необходимо заменить файл конфигурации config.yaml в директории установки лог-коллектора указанной в пункте 3, на ваш ранее созданный (рабочий) файл конфигурации config.yaml. Просим проверить и исправить все пути на новый путь в файле конфигурации config.yaml после его замены, а именно пути: secret_file, secret_storage, license_path, cert_file, key_file, ca_file, log_path

  3. Указать, при необходимости, другой путь установки программы (см. рисунок 2). Данный путь можно оставить по-умолчанию, нажав кнопку (Next / Далее) (см. рисунок 3)

    Рисунок 2 -- Смена пути установки

    Рисунок 3 -- Продолжение установки с указанным путем

  4. Далее необходимо указать путь к директории с лицензией (см. рисунок 4). Данный пункт можно пропустить и после установки перенести лицензию в директорию по пути, указанному на предыдущем шаге (шаг №3) (см. рисунок 2).

    Рисунок 4 -- Путь к файлу с лицензией

  5. Следующим шагом необходимо заполнить поля:

    • Master node IP – ip-адрес платформы или мастерноды куда подключается и отправляет/перенаправляет события лог-коллектор;

    • Master node IP key – ключ, используемый для идентификации платформы с логколлектором;

      Ключ можно посмотреть/создать в интерфейсе платформы в разделе Кластер → API ключи;

    • Log-collector API IP – ip-адрес с которым будет включен api-сервер лог-коллектора;

      Можно оставить ip-адрес по-умолчанию 127.0.0.1, но мы рекомендуем указывать ip-адрес интерфейса, предназначенного для связи с мастернодой;

    Нажать кнопку (Next / Далее) (см. рисунок 5).

    Рисунок 5 -- Заполнение полей

  6. На следующем шаге установщика нажать кнопку (Install / Установить) (см. рисунок 6).

    Рисунок 6 -- Установка

  7. Далее необходимо нажать (Finish / Завершить) (см. рисунок 7).

    Рисунок 7 -- Выход из установки

  8. После завершения процесса установки необходимо перейти в директорию логколлектора и проверить правильность всех введенных данных на моменте установки, открыв файл config.yaml любым текстовым редактором.

  9. После заполнения файла конфигурации, необходимо открыть «Службы»/«Services» лог-коллектора. Для этого нажать сочетание клавиш WIN+R и ввести services.msc, далее найти в списке «PangeoRadarLogCollector» и запустить его, нажав кнопку (Запустить / Start) (см. рисунок 8).

    Рисунок 8 -- Запуск сервиса

    Включать/останавливать службу можно через «Диспетчер задач»/«Task manager» во вкладке (Службы / Services) (рис.9) или с помощью следующих команд в «Командной строке»/«Command Prompt» в режиме Администратора:

    Рисунок 9 -- Перезапуск сервиса

    Запуск сервиса:

    net start PangeoRadarLogCollector
    

    Остановка сервиса:

    net stop PangeoRadarLogCollector
    

    В открытом окне свойств Службы лог-коллектора необходимо выставить «Тип запуска / Startup type» в состояние «Автоматически / Automatic» для того, чтобы служба запускалась при загрузке системы.

    Рисунок 10 -- Установка типа запуска сервиса

    Установка Автоматического режима запуска службы возможна через «Командную строку»/«Command Prompt» для этого необходимо ввести команду:

    sc config PangeoRadarLogCollector start= auto
    

    Режим просмотра состояния службы:

    sc qc PangeoRadarLogCollector
    

    Параметры запуска: auto (автоматически), demand (вручную), disabled (отключена).

  10. После выполнения вышеописанных действий установки в директории установки лог-коллектора рекомендуется просмотреть файлы logcollector.crash.log и journal.log, для отслеживания ошибок работы лог-коллектора.

  11. При наличии включенного локального брандмауера открыть необходимые порты как для приема событий, так и для взаимодействия по API.

  12. Установить сертификат pgr.crt, расположенный на мастер-ноде в каталоге /opt/pangeoradar/certs/, в хранилище сертификатов “Локальный компьютер/Доверенные корневые центры сертификаты”.

  13. При первом подключении коллектора к платформе в разделе “Кластер“ -> Узлы системы" -> "Узлы" появится хост с Windows-коллектором с ролью agent. Необходимо добавить роль agent_win, выбрав из ее из раскрывающегося списка и нажав “+“.

Важно!

  1. Не забудьте перенести файл лицензии в директорию с лог-коллектором, если оставляли по-умолчанию данную настройку в 4-м пункте. Напоминаем!

  2. Если у Вас ранее уже был установлен лог-коллектор не через msi-пакет, то Вы можете заменить файл конфигурации config.yaml в директории установки логколлектора? указанной в пункте 3, на ваш ранее созданный (рабочий) файл конфигурации config.yaml.

  3. Не забудьте проверить и исправить все пути на новый путь в файле конфигурации после его замены, а именно: secret_file, secret_storage, license_path, cert_file, key_file, ca_file, log_path

Переустановка лог-коллектора в ОС Windows

  1. Перед переустановкой необходимо обязательно сохранить файл конфигурации лог-коллектора (config.yaml) и файл лицензии лог-коллектора (pgr-agent.lic).

    Если расположение установленного лог-коллектора и всех путей неизвестно и оно отлично от стандартного пути C:\Program Files\Log Collector, то посмотреть путь до файла конфигурации можно в свойствах «Службы»/«Services» «Pangeo Radar Log Collector Service», для просмотра нажмите сочетание клавиш WIN+R и введите services.msc , далее найдите в списке «Pangeo Radar Log Collector Service» нажмите на нем правую кнопку мыши и выберите «Свойства/Properties», посмотрите параметр «Исполняемый файл/Path to executable» (см. рисунок 11). Перейдите по указанному в свойствах пути без имени исполняемого файла.

    Далее скопируйте в отдельную папку файл конфигурации (config.yaml), затем откройте его и посмотрите параметр «license_path», перейдите по указанному пути и скопируйте файл лицензии в отдельную папку.

    Рисунок 11 -- Путь до файла конфигурации

  2. После сохранения файла конфигурации лог-коллектора (config.yaml) и файла лицензии лог-коллектора (pgr-agent.lic):

  3. Необходимо открыть «Программы и компоненты /Programs and Features»

    Можно запустить через «Панель управления\Все элементы панели управления\Программы и компоненты» или «Control Panel\All Control Panel Items\Programs and Features»

  4. Найти и выбрать в списке программ «Log Collector» и нажать кнопку «Удалить/Uninstall» (см. рисунок 12)

    Рисунок 12 -- Удаление логколлектора

  5. Установите логколлектор согласно вышеуказанным пунктам инструкции раздела «Установка лог-коллектора на OS Microsoft Windows»

При переустановке лог-коллектора, если вы не удалили старую версию, может возникнуть окно с сообщением: «A newer version of this software is already installed» (см. рисунок 13)

Рисунок 13 -- Ошибка установки

Для устранения данной ошибки удалите предыдущую версию лог-коллектора (см. шаг 2).

Описание и рекомендации по устранению ошибок лог-коллектора

Ошибки, отображаемые в журналах лог-коллектора

logcollector.crash.log:

open C:/Program Files (x86)/LOGCOLLECTOR//pgr-agent.lic: The system cannot find the file specified – означает что у Вас по указанному пути отсутствует файл лицензии и/или указан неверный путь до нее.

Для того чтоб ошибка не возникала необходимо указать правильный путь до файла лицензии или скопировать его по указанному, в ошибке, пути.

2022/09/20 09:31:06 should be at least one collector – данная ошибка возникает в случае отсутствия блока collectors в конфигурационном файле config.yaml.

journal.log:

service=api_gate level=ERROR time=2022-10-07T18:23:59+03:00 message=Post " https://192.168.250.254:9000/cm/api/agent/ ": dial tcp 192.168.250.254:9000: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. – означает что попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или установленное соединение не удалось, потому что подключенный хост не ответил.

Для того чтоб ошибка не возникала необходимо проверить доступность узла, далее проверить правильно ли указан адрес платформы при установке и не допущена ли ошибка в файле конфигурации config.yaml в разделе cluster: url и api_key:. После исправления ошибок в файле конфигурации и восстановлению доступности узла, необходимо перезапустить Службу лог-коллектора.

service=api_gate level=ERROR time=2022-10-07T18:30:17+03:00 message=Post " https://172.30.254.185:9000/cm/api/agent/ ": x509: certificate signed by unknown authority – означает что сертификат подписан неизвестным центром сертификации и/или нет доверия к его корневому сертификату.

Для того чтобы ошибка не возникала необходимо установить сертификат Платформы в доверенные корневые центры сертификации локальной машины и перезапустить Службу лог-коллектора

192.168.250.254:5555: connectex: No connection could be made because the target machine actively refused it.

service=outputs_module level=INFO time=2022-10-09T23:26:09+03:00 message=tcp_output stopped. uptime: 1.0186957s

service=tcp_output level=INFO time=2022-10-09T23:26:13+03:00 message=Write message started service=outputs_module level=ERROR time=2022-10-09T23:26:13+03:00 message=tcp_output off. Restarting... service=outputs_module level=INFO time=2022-10-09T23:26:13+03:00 message=sender tcp_output started

service=outputs_module level=ERROR time=2022-10-09T23:26:14+03:00 message=tcp_output start error newConnection: net.Dial: dial tcp – данный блок ошибок возникает в случае неправильного указания ip-адреса (target_host) или порта (port) платформы в конфигурационном файле config.yaml в блоке tcp_output. Данная ошибка может возникать из-за того, что не включены и/или не синхронизированы источники Платформы.

Для устранения данной ошибки необходимо в web-интерфейсе Платформы проверить включен ли Источник, от которого планируется передавать события. Для этого перейдите в Источники → Управление источниками проверьте включен ли нужный Источник и нажмите кнопку Синхронизировать. Далее проверьте корректность заполненных данных в файле конфигурации в секции tcp_output, а именно target_host, port. После выполнения всех действий перезапустите Службу лог-коллектора.

Установка в ОС Linux

Установка выполняется с правами администратора системы (root). Возможно ппотребуется разрешить подключение данному пользователю по SSH.

  1. В веб-интерфейсе платформы перейти в "Кластер" -> "Узлы системы" -> "Узлы" и заполнить следующие поля и нажать кнопку "Добавить":

    • "Название" - имя записи коллектора в БД;

    • "Пароль" - пароль системной учетной записи;

    • "IP" - ip-адрес хоста, где планируется установка Linux-версии коллектора.

    При необходимости указать другой порт для подключения SSH и другого системного пользователя.

  2. Начнётся процесс добавления хоста в кластер с установкой и настройкой необходимых компонентов. После его успешного завершения появится следующее окно:

  3. В этом же разделе в меню "Добавление ролей к узлам" в списке хостов появится IP-адрес хоста, где планируется установка Linux-версии коллектора.

  4. Из раскрывающегося списка "Выберите роль" выбрать роль "agent" и нажать "+".

  5. В этом окне нажать на IP-адрес коллектора, после чего произойдет открытие окна "Управление хостом", в котором необходимо нажать кнопку "Раскатить роль".

  6. Откроется окно "Лог установки" и начнётся процесс установки коллектора и его зависимостей. После его завершения необходимо нажать кнопку "Установка завершена. Закрыть окно".

  7. В разделе веб-интерфейса платформы "Кластер" -> "API ключи" сгенерировать ключ API, внеся наименование коллектора в поле "Наименование" и нажав кнопку "Добавить".

  8. На хосте коллектора выполнить команду для разрешения взаимодействия по порту API (в примере это порт 8080):

    ufw allow 8080
    

    Этой же командой выполнить открытие портов, необходимых для приема событий на коллекторе.

  9. Внести в файл конфигурации коллектора, расположенный в /opt/pangeoradar/configs/logcollector/config.yaml, следующие изменения:

    • в разделе cluster прописать в поле "url" ip/fqdn адрес узла с ролью мастер и указать в поле "api_key" API ключ, который был сгенерирован в п. 7.

    • в разделе api_server в поле "address" указать IP-адрес узла (не 127.0.0.1 и не 0.0.0.0), на который устанавливается лог-коллектор.

    • добавить нужные для приема и пересылки событий модули и прописать их маршрутизацию (подробнее здесь https://wiki.yandex.ru/ts/onboarding/glava-8-log-kollektor/primerfajjlakonfiguraciikollektora/).

  10. При успешном подключении коллектора к платформе в разделе "Управление хостом" отображается активный статус коллектора и его элементы управления:

    Также доступны статусы и логи следующих сервисов:

  11. После запуска сервиса коллектора проверить файлы логирования на предмет наличия или отсутствия ошибок:

    tail -f /var/log/logcollector/journal.log
    tail -f /var/log/logcollector/crash.log
    

Log-collector установка в ОС Linux Debian 10 (OLD VERSION)

Установка выполняется с правами администратора системы

  1. Скачать дистрибутив коллектора с помощью команды:

    scp user@<IP-адрес МАСТЕРА>:/opt/pangeoradar/distrs/pangeoradar-logcollector/log-collector_amd64_<версия>.deb ./
    
  2. Перейти в каталог с дистрибутивом и выполнить установку с помощью команды:

    dpkg -i *.deb
    
  3. После установки необходимо выполнить команду для добавления сервиса в автозапуск при старте системы

    systemctl enable pangeoradar-logcollector.service
    
  4. Создать папку для хранения сертификатов

    mkdir -p /opt/pangeoradar/certs/
    
  5. Для удаленного управления экземпляром log-collector необходимо выполнить следующие действия:

    • Получить сертификат для доступа к узлу с ролью мастер
    echo | openssl s_client -servername <ip/fqdn адрес узла с ролью мастер> -connect <ip/fqdn адрес узла с ролью мастер>:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /opt/pangeoradar/certs/pgr.crt
    
    • Выполнить следующие команды
    mkdir -p /usr/local/share/ca-certificates/pangeoradar
    cp /opt/pangeoradar/certs/pgr.crt /usr/local/share/ca-certificates/pangeoradar/
    chmod 755 /usr/local/share/ca-certificates/pangeoradar
    chmod 644 /usr/local/share/ca-certificates/pangeoradar/pgr.crt
    update-ca-certificates
    
  6. В интерфейсе платформы сгенерировать ключ API в разделе Кластер, вкладка API ключи

  7. В файл конфигурации лог-коллектора /opt/pangeoradar/configs/logcollector/config.yaml внести следующие изменения:

    • в разделе cluster прописать ip/fqdn адрес узла с ролью мастер и указать API ключ, который был сгенерирован в п. 6.

    • в разделе api_server указать IP-адрес узла (не 127.0.0.1 и не 0.0.0.0), на который устанавливается лог-коллектор, и указать путь до сертификата, который получен на шаге 5:

    ca_file: "/opt/pangeoradar/certs/pgr.crt"
    
  8. Перенести лицензию в каталог /opt/pangeoradar/ , в конфигурационном файле указать путь до лицензии:

    license_path: "/opt/pangeoradar/pgr-agent.lic"
    
  9. При наличии включенного локального файерволла открыть необходимые порты как для приема событий, так и для управления по API c платформы.

  10. Подготовить файл конфигурации для приема и пересылки событий и запустить лог-коллектор:

    systemctl start pangeoradar-logcollector.service
    

Основные настройки лог-коллектора

Важно! Для успешного запуска лог-коллектора необходимо выполнить основные настройки в конфигурационном файле config.yaml

Настройка централизованного управления

Лог-коллектор может управляться через файл конфигурации непосредственно на сервере, где он развернут, или централизованно из веб-интерфейса Платформы Радар.

Для подключения экземпляра к Платформе Радар для управления из интерфейса, необходимо добавить в файл конфигурации следующие директивы:

# Централизованное управление
cluster:
  url: "http://<ip адрес Платформы Радар>:9000/cm/api/agent/"
  api_key: "<API ключ>"

где:
- ключ доступа к API, сгенерированный в веб-интерфейсе Платформы Радар ("Администрирование"->"Кластер"->"API ключи"->"global_api_key").

Более подробное описание по настройке централизованного управления приведено в Управление лог-коллектором.

Настройка контроллера

Для настройки контроллера необходимо добавить в конфигурационный файл следующие директивы:

controller:
  # Порт компонента, обязательный параметр
  port: 48000

Настройка компонента сбора метрик

Для настройки сбора метрик и статистики необходимо добавить в конфигурационный файл следующие директивы:

metric_server:
  # Порт компонента, обязательный параметр
  port: 48005
  log_level: "ERROR"

Настройка размещения защищенного хранилища

Защищенное хранилище используется для хранения чувствительных данных, которые не должны храниться в открытом виде.

Для настройки размещения необходимо добавить в конфигурационный файл следующие директивы:

# Путь к файлу с секретом
secret_file: "C:\\log-collector\\secret"
# Путь к хранилищу секретов
secret_storage: "C:\\log-collector\\secret.storage"

Для создания секрета используется команда:

# <путь>log-collector secrets set <ключ> <значение> --config <путь до конфигурационного файла>

где:
<путь> - путь до каталога, в котором находится исполняемый файл лог-коллектора
<ключ> - имя значения
<значение> - данные, которые нужно скрыть в конфигурационном файле

После создания секрета его можно подставить в виде конструкции - {{.ключ}}, вместо любой строки в конфигурационном файле. Таким образом, все учетные данные могут быть скрыты.

Пример создания секретов и использования их в конфигурационном файле:

log-collector secrets set user User --config /etc/log-collector/config.yaml
log-collector secrets set user_password $ecure_P@ssw0rd --config /etc/log-collector/config.yaml
Пример использования в конфигурационном файле:
ssh_collector: &ssh_collector
  # Уникальный идентификатор компонента, отображается в журналах и метриках.
  # Обязательный параметр
  id: "ssh_collector"
  # Имя пользователя для удаленного подключения, обязательный параметр\
  user: "{{.user}}"
  # Список хостов для подключения, обязательный параметр
  remote_servers: ["<ip адрес удаленного узла>", "<имя удаленного узла>"]
  # Порт для подключения (default: 22)
  port: 22
  # Путь к файлу с ssh ключами, обязательный параметр
  rsa: "./ssh"
  # Пароль от файла с ключами
  password: "{{.user_password}}"
  # Команда для выполнения по ssh, обязательный параметр
  command: "tail -F -n +$$$line$$$ /var/log/sshfile.txt"
  # Если установлено - файл будет читаться с последней позиции в следующем тике
  # или после перезапуска
  read_from_last: true
  # Интервал между выполнением команд (в секундах)
  ticker: 30
  # Формат отправки сообщения - как есть(raw), с обогащением(json)
  format: "raw"
  # Уровень логирования, если не указан используется уровень компонента журналирования
  log_level: "INFO"

Для просмотра созданных ключей используется команда:

# <путь>log-collector secrets list --config <путь до конфигурационногофайла>

где:
<путь> - путь до каталога, в котором находится исполняемый файл лог-коллектора

Для удаления ключей используется команда:

<путь>log-collector secrets remove <ключ> - -config <путь до конфигурационного файла>

где:
<путь> - путь до каталога, в котором находится исполняемый файл лог-коллектора
<ключ> - имя значения, которое нужно удалить.

Важно! Прописывать ключи в файле конфигурации нужно в кавычках, как в примере выше "{{.ключ}}", иначе при запуске приложения упадет с ошибкой из-за того что не сможет прочитать файл конфигурации. Соответствующее сообщение будет в журнале неудачных запусков Лог-коллектора logcollector.crash.log.

Настройка API

API необходимо для удаленного управления экземпляром лог-коллектора, получения журнала событий работы лог-коллектора и сбора статистики. Для настройки работы API необходимо добавить в конфигурационный файл следующие директивы:

api_server:
  # ip адрес, на котором будем слушать http сервер
  address: "<Внещний ip адрес сервера, на котором установлен лог-коллектор>"
  # порт, на котором будем слушать http сервер, обязательный параметр
  port: 8080
  # Таймаут чтения (получение запроса), обязательный параметр
  read_timeout: 60
  # Таймаут записи (отправка запроса), обязательный параметр
  write_timeout: 60
  # Время ожидания окончания обработки запроса при получении сигнала на остановку приложения
  # Обязательный параметр
  wait: 5
  # Включение https (защищенное соединение)
  enable_tls: false
  # Путь для файла сертификатов, если enable_tls: false параметр не обязательный
  cert_file: "certs/server.crt"
  # Путь для файла ключей, если enable_tls: false параметр не обязательный
  key_file: "certs/server.key"
  # Пароль для расшифровки файла ключей, если не указан считаем, что файл не зашифрован
  cert_key_pass: ""
  # Включение проверки клиентского сертификата, обязательный параметр
  require_client_cert: true
  # Путь до корневого сертификата, обязательный параметр
  ca_file: "certs/ca.crt"
  # Уровень логирования, если не указан используется указанный в компоненте журналирования
  log_level: "INFO"

Настройка журналирования

В журнал лог-коллектора записываются все события, происходящие в компонентах лог-коллектора с уровнем логирования, указанным для каждого компонента. Если уровень логирования не указан для конкретного компонента, то логирование происходит с уровнем, выставленным в компоненте журналирования.

Важно! Уровень логирования DEBUG используется только для отладки работы компонентов. В промышленной эксплуатации рекомендуется использовать уровень INFO.

journal:
  # Порт компонента, обязательный параметр
  port: 48004
  # Уровень логирования по умолчанию. Возможные значения - DEBUG, INFO, WARN, ERROR.
  # Обязательный параметр
  log_level: "INFO"
  # Путь к файлу журнала, обязательный параметр
  log_path: "C:\\log-collector\\journal.log"
  # Порог ротации файла логов, указывается в мегабайтах, обязательный параметр
  rotation_size: 30
  # Порог количества файлов истории, если не указано файлы удаляться не будут
  max_backups: 7
  # Максимальное количество дней для хранения старых файлов журнала на основе метки времени
  # Если не указано, файлы удаляться не будут (в днях).
  max_age: 7

Фильтрация событий

Структурированные данные

Фильтрация в компонентах сбора со структурированными данными работает как blacklist и применима к коллекторам wmi, eventlog, odbc, etw.

Неструктурированные данные

Фильтры можно указать для каждого коллектора с неструктурированными данными. Фильтры содержат белый список (whitelist) и черный список (blacklist) с массивом регулярных выражений. Все регулярные выражения проверяются перед запуском приложения. Сначала проверяется белый список, а затем черный.
Фильтрация по регулярным выражениям может быть включена в любом коллекторе с неструктурированными данными (кроме odbc, wmi, etw, eventlog). Включается путем добавления секции filters. В данной секции указываются два массива — whitelist, blacklist. Все события сначала проходят фильтры указанные в whitelist, т.к. его приоритет выше. Затем события проверяются фильтрами, указанными в blacklist.
Whitelist — события, которые соответствуют регулярному выражению, попадают в очередь на отправку.
Blacklist — события, которые соответствуют регулярному выражению, блокируются и не попадают в очередь на отправку.

ssh_collector: &ssh_collector
  # Уникальный идентификатор компонента, отображается в журналах и метриках.
  # Обязательный параметр
  id: "ssh_collector"
  # Имя пользователя для удаленного подключения, обязательный параметр
  user: "user"
  # Список хостов для подключения, обязательный параметр
  remote_servers: ["<ip адрес удаленного узла>", "<имя удаленного узла>"]
  # Порт для подключения (default: 22)
  port: 22
  # Путь к файлу с ssh ключами, обязательный параметр
  rsa: "./ssh"
  # Пароль от файла с ключами
  password: "password"
  # Команда для выполнения по ssh, обязательный параметр
  command: "tail -F -n +$$$line$$$ /var/log/sshfile.txt"
  # Если установлено - файл будет читаться с последней позиции в следующем тике
  # или после перезапуска
  read_from_last: true
  # Интервал между выполнением команд (в секундах)
  ticker: 30
  # Формат отправки сообщения - как есть(raw), с обогащением(json)
  format: "raw"
  # Уровень логирования, если не указан используется уровень компонента журналирования
  log_level: "INFO"

  filters:
    whitelist:
      - "^localhost.*$"
    blacklist:
      - "^.*[0-9]$"

Настройка очереди отправки событий

Применимо к компонентам отправки событий TCP и KAFKA

# Максимальное количество сообщений в буфере
queue_length_limit: 1500
# максимальное время жизни событий в очереди (в секундах)
queue_time_limit: 300

Формат отправки данных

Применим ко всем неструктурированным компонентам сбора событий (кроме eventlog, wmi, odbc, etw)

# Формат отправки сообщения - как есть(raw), с обогащением(json)
format: "raw"

raw - данные отправляются в том виде, в котором пришли
json - пришедшие данные обогащаются дополнительной технической информацией и упаковываются в пакет json

Кодировка

Данная секция позволяет изменить кодировку входящих данных. Если не указывать original_encoding, лог-коллектор сам попытается определить кодировку.

# Опции смены кодировки
encoding:
  # Использовать кодировку в UTF-8
  change_to_utf8: false
  # Кодировка оригинала
  original_encoding: "cp1251"

Описание хранилища приложения

Хранилище ключей значений в файловой системе ОС (LevelDB). Используется для хранения ссылок и буферизации событий. Не предусмотрено стороннее редактирование.
Папка с файлами хранилища (.storage) располагается в рабочей директории лог-коллектора.

Компоненты лог-коллектора

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

Важно! При настройке не использовать повторяющихся названий настроек компонентов, ссылок на них и уникальных идентификаторов.

Пример:

# Название конфигурации компонента и ссылка на него для запуска
<наименование настройки компонента>: &<уникальная ссылка на настройку>
# Уникальный идентификатор компонента, отображается в логах и метриках. Обязательный параметр
  id: "<уникальный идентификатор>"

Компоненты сбора событий (inputs)

Для включения компонента сбора необходимо добавить в файл конфигурации его настройки.

В секции конфигурации инпутов file, ftp, sfpt, smb добавлены параметры чтения многострочных событий:

  • event_delimiter. Символ разделения событий. Поддерживаются любые строки (один и несколько символов), также поддерживаются файлы в не-utf-8 кодировке. Если event_delimiter не указан, файлы будут читаться построчно.
  • remove_delimiter. Признак удаления разделителя. По умолчанию строка разделителя удаляется из прочитанных событий, но можно это переключить, прописав remove_delimiter: false.

При использовании event_delimiter автоопределение кодировки может срабатывать неправильно и разделение событий по разделителю не будет работать. Поэтому для файлов в кодировке не utf-8 лучше явно указывать параметр original_encoding.

Если указан разделитель, конец файла не считается концом события. Т.е. Если указан ';' прочитаны будут все события до последнего ';'. Остаток файла после него читаться не будет, т.к. событие получается неполное.

В секции конфигурации инпуты file, sftp, smb, ftp добавлены параметры чтения из файлов формата JSON и XML:

  • file_type - формат событий в файлах, допустимые значения: RAW, JSON, XML (по умолчанию RAW).
  • no_delimiter - отсутствие разделителя событий в файле, используется для чтения событий в форматах JSON и XML без явного разделителя (по умолчанию false).

Например, для включения чтения JSON-событий нужно указать

file_type: "JSON"
no_delimiter: true
Аналогично для XML.

При всех других сочетаниях параметров файлы будут читаться как RAW построчно или с указанным разделителем.

Компонент Eventlog

Важно! Работает только на ОС Windows.

Позволяет выполнить локальный или удаленный сбор событий Windows.

Пример настроек по умолчанию:

eventlog_input: &eventlog_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "eventlog_input"
  # Имя канала, используется если не указан путь к файлу
  channel: ['Application']
  # Запрос описывающий тип получаемого события. есть возможность указать
  # XPath 1.0 или структурированный XML запрос. Если XPath содержит более 20 параметров, следует
  # использовать структурированный XML запрос. Чтобы получить все параметры укажите "*"
  query: "*"
  # Полный путь к лог файлу
  # Поддерживаемые форматы: .evt, .evtx, .etl
  file: ""
  # Размер запроса
  batch_size: 31
  #  Таймаут запроса в секундах
  timeout: 3
  # интервал между запуском запроса в секундах (default: 1)
  poll_interval: 2
  # Чтение с последней сохраненной позиции, (default: false)
  read_from_last: true
  # Конвертировать SID в имя.
  resolve_sid: true
  # уровень логирования, если не указан используется уровень модуля журналирования
  log_level: "INFO"
  # количество параллельных воркеров (default: 1)
  worker_count: 2
  # Регулирование размера буфера (default: 1000), после запуска приводится к ближайшему значению кратному BatchSize * WorkerCount
  buffer_size: 1000
  # Максимальное время ожидания переподключения к источнику при недоступности источника (в минутах, максимальное значение = 30, по-умолчанию 15)
  reconnect_max_timeout: 30
  # Параметры удаленного подключения
  remote:
    # Включение удаленного соединения
    enabled: false
    # Имя пользователя, обязательно если enabled: true
    user: ""
    # Пароль пользователя, обязательно если enabled: true
    password: ""
    # Домен пользователя
    domain: "."
    # Адрес удаленного сервера
    remote_servers: ["localhost"]
    # Доступные методы авторизации: Negotiate, Kerberos, NTLM
    auth_method: "Negotiate"
  # Фильтрация по полям события, регулярные выражения
  filters:
    # Время
    # формат 2020-08-13 10:02:55.9689259 +0000 UTC
    created: ''
    # Числовые фильтры
    # Пример для числовых фильтров - ^([5-9]\d|\d{3,})$
    event_id: ''
    qualifiers: ''
    record_id: ''
    process_id: ''
    thread_id: ''
    version: ''
    # Строковые фильтры
    # пример: DESKTOP-IDCMV6G
    computer_name: ''
    msg: ''
    # Возможные значения: Information, Warning, Error
    level_text: ''
    # Пример: Service State Event
    task_text: ''
    # Пример: ServiceShutdown
    opcode_text: ''
    # Пример: System
    channel_text: ''
    # Пример: System
    provider_text: 'System'
  # Опции смены кодировки
  encoding:
    # Использовать кодировку в UTF-8
    change_to_utf8: false
    # Кодировка оригинала
    original_encoding: "cp1251"

Компонент MS-EVEN6

mseven6_input: &mseven6_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "mseven6_input"
  # Список источников для сбора событий
  sources:
    -
      # Адрес удаленного сервера, с которого будут собираться события
      host: "192.168.56.6"
      # домен
      domain: ""
      #  Имя пользователя
      user: "user"
        # Пароль пользователя
      password: "password"
      # Список каналов
      channel: ["Application"]
      # Запрос описывающий тип получаемого события. есть возможность указать
      # XPath 1.0 или структурированный XML запрос. Если XPath содержит более 20 параметров, следует
      # использовать структурированный XML запрос. Чтобы получить все параметры укажите "*"
      query: "*"
  # Размер запроса
  batch_size: 20
  # интервал между запуском запроса в секундах (default: 1)
  poll_interval: 1
  # Чтение с последней сохраненной позиции, (default: false)
  read_from_last: true
  # Чтение пойдёт с последних свежих событий, иначе (и по умолчанию, если не задано) чтение идёт от самого старого
  read_from_last_default_newest: true
  # уровень логирования, если не указан используется уровень модуля журналирования
  log_level: "DEBUG"
  # Если указано несколько источников или каналов, считает указанное число событий и переключится на следующий (значения по умолчанию нет, снижает eps и нагрузку на CPU)
  switch_count: 100
  # Пауза между запросами в мсек (значения по умолчанию нет, снижает eps и нагрузку на CPU).
  request_interval_msec: 100
  # Время жизни записи в кэше. Если не указан или 0, записи из кэша не удаляются.
  render_cache_ttl: 0 
  # путь для запуска python (лучше использовать venv, создается командой make mseven6venv)
  python_path: "./bin/mseven6venv/bin/python"
  # порт для взаимодействия с python сервисом-прослойкой
  python_service_port: 9999
  # Фильтрация по полям события, регулярные выражения (блэклист)
  filters:
    # Время
    # формат 2020-08-13 10:02:55.9689259 +0000 UTC
    created: ''
    # Числовые фильтры
    # Пример для числовых фильтров - ^([5-9]\d|\d{3,})$
    event_id: ''
    qualifiers: ''
    record_id: ''
    process_id: ''
    thread_id: ''
    version: ''
    # Строковые фильтры
    # пример: DESKTOP-IDCMV6G
    computer_name: ''
    msg: ''
    # Возможные значения: Information, Warning, Error
    level_text: ''
    # Пример: Service State Event
    task_text: ''
    # Пример: ServiceShutdown
    opcode_text: ''
    # Пример: System
    channel_text: ''
    # Пример: System
    provider_text: ''
  # Опции смены кодировки
  encoding:
    # Использовать кодировку в UTF-8
    change_to_utf8: false
    # Кодировка оригинала
    original_encoding: "cp1251"

Компонент ODBC

Позволяет осуществлять сбор событий из баз данных.

# postgres sql connection string example
# Driver={PostgreSQL};Server=IP address;Port=5432;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
# mssql connection string example
# Driver={ODBC Driver 17 for SQL Server};Server=myServerAddress;Database=myDataBase;UID=myUsername;PWD=myPassword;
# Driver={ODBC Driver 17 for SQL Server};Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;
# Oracle
# DRIVER={Oracle ODBC Driver};UID=Kotzwinkle;PWD=whatever;DBQ=instl_alias;DBA=W;
odbc_input: &odbc_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "odbc_input"
  # Категория к которой относится данный input
  categories: "file"
  # интервал между запуском запроса в секундах (default: 1)
  poll_interval: 1
  # Чтение с последней сохраненной позиции (default: false)
  read_from_last: false
  # Строка подключения, обязательный параметр
  connection_string: "server=localhost;port=3306;driver=MySQL ODBC 8.0 Driver;database=pangeo;user=root;password=example;"
  # SQL запрос, обязательный параметр
  sql: >
    SELECT id, message
    FROM pangeo.logs_table WHERE id > ?;
  # Поле, которое будет использоваться как закладка для сохранения позиции, обязательный параметр (указывать поле, которое можно сконвертить к int)
  bookmark_field: "id"
  # Опции смены кодировки
  encoding:
    # Использовать кодировку в UTF-8
    change_to_utf8: false
    # Кодировка оригинала
    original_encoding: "cp1251"

Примеры строк подключения:

PostgreSQL:
Driver={PostgreSQL};Server=IP address;Port=5432;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

MSSQL:
Driver={ODBC Driver 17 for SQL Server};Server=myServerAddress;Database=myDataBase;UID=myUsername;PWD=myPassword;Driver={ODBC Driver 17 for SQL Server};Server=myServerAddress;Database=myDataBase;Trusted_Connection=yes;

Oracle:
Driver={Oracle ODBC Driver};UID=Kotzwinkle;PWD=whatever;DBQ=instl_alias;DBA=W;

Компонент WMI

Важно! Работает только на ОС Windows

wmi_input: &wmi_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "wmi_input"
  # интервал между запуском запроса в секундах (default: 1)
  poll_interval: 1
  # Список серверов к которым уйдет wmi запрос, обязательный параметр
  remote_servers:
    - "localhost"
  #  Имя пользователя, обязательно если это не локальный сбор
  user:
  #  Пароль пользователя, обязательно если это не локальный сбор
  password:
  # Чтение с последней сохраненной позиции, (default: false)
  read_from_last: false
  # уровень логирования, если не указан используется уровень модуля журналирования
  log_level: "DEBUG"
  # изменение кодировки входящего события, может быть прописана у любого коллектора
  encoding:
    # включение изменения кодировки
    change_to_utf8: false
    # оригинальная кодировка события, если оставить пустым, произойдет попытка определить кодировку
    # нет 100% гарантии определения
    original_encoding: "cp1251"
  # Собирать события начиная с заданного момента
  start_from_date: "2022-03-24T00:00:00+03:00"
  # Список журналов, из которых собираются события (Application, System и т.п.). Если пустой или не указан, собираются все события
  logfiles: ["Application"]
  # блэклист фильтры по полям события, используются регулярные выражения - https://wiki.andersenlab.com/pages/viewpage.action?pageId=153062062
  wmi_filters:
    # числовые поля
    category: '0+'
    event_code: ''
    event_identifier: ''
    event_type: ''
    record_number: ''
    # строковые поля
    computer_name: ''
    message: ''
    source_name: ''
    type: ''
    user: ''
    time_generated: ''
    time_written: ''

Компонент ETW

Важно! Работает только на ОС Windows

etw_input: &etw_input
  # Provider name or guid.
  # GUID should be in format "{9E814AAD-3204-11D2-9A82-006008A86939}".
  id: "etw_input"
  provider: "Windows Kernel Trace"
  kernel_args: [ "ALPC", "CSWITCH", "DBGPRINT", "DISK_FILE_IO", "DISK_IO", "DISK_IO_INIT", "DISPATCHER",
                 "DPC", "DRIVER", "FILE_IO", "FILE_IO_INIT", "IMAGE_LOAD", "INTERRUPT", "MEMORY_HARD_FAULTS",
                 "MEMORY_PAGE_FAULTS", "NETWORK_TCPIP", "NO_SYSCONFIG", "PROCESS", "PROCESS_COUNTERS",
                 "PROFILE", "REGISTRY", "SPLIT_IO", "SYSTEMCALL", "THREAD", "VAMAP", "VIRTUAL_ALLOC" ]
  provider_level: "Critical"
  log_level: "DEBUG"
  # Опции смены кодировки
  encoding:
    # Использовать кодировку в UTF-8
    change_to_utf8: false
    # Кодировка оригинала
    original_encoding: "cp1251"

Компонент OPSEC LEA

Важно! Работает только на ОС Linux

opsec_lea_input: &opsec_lea_input
  id: "opsec_lea_input"
  # Директория расположения утилиты lea_client.
  exec_path: "/pangeo_radar/opsec"
  agent_addr: "127.0.0.1"
  agent_port: 48181
  # периодичность проверки наличия новых записей в журналах.
  poll_interval: 1
  #  Сохранение позиции последнего чтения из журнала (сохранение на диск), возобновление чтения с последней
  #  сохраненной позиции.
  read_from_last: false
  # Сервер для сбора событий.
  remote_server: "192.168.1.254"
  # Порт для аутентификации.
  auth_port: 18184
  # Аутентификация для OPSEC.
  auth_type: "sslca"
  # Параметры авторизации.
  opsec_sic_name: "CN=SyslogClient,O=sms.local.gc95e2"
  opsec_sslca_file: "/home/user/opsec.p12"
  opsec_entity_sic_name: "CN=cp_mgmt,O=sms.local.gc95e2"
  opsec_sic_policy_file: ""
  #  Название собираемого журнала.
  log_filename: "fw.log"
  log_level: "DEBUG"
   # формат отправки сообщения - как есть(raw), с обогащением(json)
  format: "json"

Компонент SSH

ssh_collector_input: &ssh_collector_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "ssh_collector_input"
  # имя пользователя для удаленного подключения, обязательный параметр
  user: "user"
  # список хостов для подключения, обязательный параметр
  remote_servers: ["127.0.0.1"]
  # порт для подключения (default: 22)
  port: 22
  # путь к файлу с ssh ключами, обязательный параметр
  rsa: "~/.ssh/id_rsa"
  # пароль от файла с ключами
  password: "password"
  # команда для выполнения по ssh, обязательный параметр
  command: "tail -F -n +$$$line$$$ /opt/pangeo/test.log"
  # если установлено - файл будет читаться с последней позиции в следующем тике или после перезапуска (default: false)
  read_from_last: false
  # интервал между выполнением команд(в секундах)
  ticker: 30
  # уровень логирования, если не указан используется уровень модуля журналирования
  log_level: "DEBUG"
  # формат отправки сообщения - как есть(raw), с обогащением(json)
  format: "json"
  # Опции смены кодировки
  encoding:
    # Использовать кодировку в UTF-8
    change_to_utf8: false
    # Кодировка оригинала
    original_encoding: "cp1251"

Компонент SMB

smb_input: &smb_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "smb_input"
  # аддреса подключения, обязательный параметр
  remote_servers: ["pdc.pangeo.test"]
  # порт подключения (default: 445)
  port: 445
  # SMB share. sharename должен соответсвовать формату `<share>` или `\\<server>\<share>`, обязательный параметр
  share: "\\\\pdc.pangeo.test\\access"
  # домен
  domain: "pangeo.test"
  # имя пользователя, обязательный параметр
  user: "user"
  # пароль, обязательный параметр
  password: "password"
  # настройки аутентификации kerberos
  kerberos:
    # включение авторизации kerberos
    enabled: false
    # имя целевого сервиса (service principal name)
    target_spn: "pdc"
    # kerberos realm
    realm: "PANGEO.TEST"
    # путь до конфигурации kerberos
    config_path: "assets/krb5/krb5.conf"
  # интервал между запуском сканирования файлов в секундах (default: 1)
  poll_interval: 1
  # список файлов для чтения, обязательный параметр
  files: [ "hello.txt" ]
  # Чтение и парсинг файлов с расширением evtx
  file_type: "EVTX"
  # если установлено - использовать регулярное выражение для поиска файлов
  using_regexp: false
  # начальный каталог для поиска файлов
  regexp_starting_dir: "."
  # регулярное выражение для поиска файлов
  regexp_expression: "^hello1.txt$"
  # интервал проверки файлов (в секундах) в дереве каталогов (default: 2)
  dir_check_interval: 2
  # если установлено - файл будет читаться с последней позиции в следующем тике или после перезапуска
  read_from_last: true
  # уровень логирования, если не указан используется уровень модуля журналирования
  log_level: "DEBUG"
  # формат отправки сообщения - как есть(raw), с обогащением(json)
  format: "json"
  # Опции смены кодировки
  encoding:
    # Использовать кодировку в UTF-8
    change_to_utf8: false
    # Кодировка оригинала
    original_encoding: "cp1251"

Компонент FTP

ftp_collector: &ftp_collector
  # Уникальный идентификатор компонента, отображается в журналах и метриках.
  # Обязательный параметр
  id: "ftp_collector"
  # Список хостов для подключения, обязательный параметр
  remote_servers: ["<ip адрес удаленного узла>", "<имя удаленного узла>"]
  # Порт для ftp запросов, обязательный параметр
  port: 21
  # ftp пользователь, обязательный параметр
  user: ""
  # ftp пароль, обязательный параметр
  password: ""
  # Интервал между сканированием файла в секундах
  poll_interval: 5
  # Список файлов для чтения, обязательный параметр
  files: ["ftpfile.txt"]
  # Если установлено - использовать регулярное выражение для поиска файлов
  using_regexp: true
  # Начальный каталог для поиска файлов
  regexp_starting_dir: "."
  # Регулярное выражение для поиска файлов
  regexp_expression: ".(?:txt|log)$" #"^.*\_logs$"
  # Интервал проверки файлов (в секундах) в дереве каталогов
  dir_check_interval: 5
  # Если установлено - файл будет читаться с последней позиции в следующем тике
  # или после перезапуска
  read_from_last: true
  # Формат отправки сообщения - как есть(raw), с обогащением(json)
  format: "raw"
  # Уровень логирования, если не указан используется уровень компонента журналирования
  log_level: "INFO"

  # Возможно применение опций смены кодировки

Компонент SFTP

sftp_input: &sftp_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "sftp_input"
  # адреса для sftp запросов, обязательный параметр
  remote_servers: ["localhost"]
  # порт для sftp запросов, обязательный параметр
  port: 22
  # пользователь ssh, обязательный параметр
  user: "user"
  # пароль ssh, обязательный параметр
  password: "password"
  # интервал между сканированием файла в секундах (default: 1)
  poll_interval: 1
  # список файлов для чтения, обязательный параметр (если using_regexp: true, то можно оставить кавычки пустыми)
  files: ["/upload/apache_logs"]
  # если установлено - использовать регулярное выражение для поиска файлов
  using_regexp: true
  # начальный каталог для поиска файлов (указывается полный путь)
  regexp_starting_dir: "/upload"
  # регулярное выражение для поиска файлов
  regexp_expression: "^.*_logs$"
  # интервал проверки файлов (в секундах) в дереве каталогов (default: 2)
  dir_check_interval: 2
  # если установлено - файл будет читаться с последней позиции в следующем тике или после перезапуска
  read_from_last: true
  # уровень логирования, если не указан используется уровень модуля журналирования
  log_level: "DEBUG"
  # формат отправки сообщения - как есть(raw), с обогащением(json)
  format: "json"
  # Опции смены кодировки
  encoding:
    # Использовать кодировку в UTF-8
    change_to_utf8: false
    # Кодировка оригинала
    original_encoding: "cp1251"

Компонент NetFlow

nf_input: &nf_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "nf_input"
  # Хост на каком запустится сервер (default: localhost)
  host: "localhost"
  # Порт на каком запустится сервер (обязательное)
  port: 15487
  # Уровень сообщений в логах, могут быть значения - DEBUG, INFO, WARN, ERROR
  log_level: "INFO"
  # Размер буфера сообщений (если не задано то берется из SO_RCVBUF)
  sock_buf_size: 0

Компонент TCP

tcp_input: &tcp_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "tcp_input"
  # Хост на каком запустится сервер (default: localhost)
  host: "localhost"
  # Порт на каком запустится сервер (обязательное)
  port: 15486
  # Уровень сообщений в логах, могут быть значения - DEBUG, INFO, WARN, ERROR
  log_level: "INFO"
  # Включение TLS соединения на сервере (default: false)
  enable_tls: false
  # Файл с приватным ключом (обязательное поле при включенном TLS)
  key_file: "certs/server.key"
  # Файл с сертификатом должно быть подписанным сертификатом CA (обязательное поле при включенном TLS)
  cert_file: "certs/server.crt"
  # Файл с паролем если сертификат подписывался с паролем
  cert_key_pass: ""
  # Файл с сертификатом CA (обязательное поле при включенном TLS)
  ca_file: "certs/ca.crt"
  # Проверять ли сертификаты клиента (default: false)
  require_client_cert: false
  #Нужна ли распаковка тела запроса, ожидается, что клиент упаковал тело запроса в архив (default: false)
  compression_enabled: false
  # Количество соединений которые может принять сервер
  connections_limit: 10
  # формат отправки сообщения - как есть(raw), с обогащением(json)
  format: "json"
  # Размер буфера приемника, если не указан используется значение из ОС. Влияет на размер принимаемых событий!!!
  buf_size: 16384
  # Опции смены кодировки
  encoding:
    # Использовать кодировку в UTF-8
    change_to_utf8: false
    # Кодировка оригинала
    original_encoding: "cp1251"

Компонент UDP

udp_input: &udp_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "udp_input"
  # Хост на каком запустится сервер (default: localhost)
  host: "localhost"
  # Порт на каком запустится сервер (обязательное)
  port: 15485
  # Уровень сообщений в логах, могут быть значения - DEBUG, INFO, WARN, ERROR
  log_level: "INFO"
  # Размер буфера сообщений (если незаданные то берется из SO_RCVBUF)
  sock_buf_size: 0
  # формат отправки сообщения - как есть(raw), с обогащением(json)
  format: "json"
  # Опции смены кодировки
  encoding:
    # Использовать кодировку в UTF-8
    change_to_utf8: false
    # Кодировка оригинала
    original_encoding: "cp1251"

Компонент HTTP приемник

http_request_input: &http_request_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "http_request_input"
  # Хост на каком запустится сервер (default: localhost)
  host: "localhost"
  # Порт на каком запустится сервер (обязательное)
  port: 15484
  # Уровень сообщений в логах, могут быть значения - DEBUG, INFO, WARN, ERROR
  log_level: "INFO"
  # Включение TLS соединения на сервере (default: false)
  enable_tls: false
  # Файл с приватным ключом (обязательное поле при включенном TLS)
  key_file: "certs/server.key"
  # Файл с сертификатом должно быть подписанным сертификатом CA (обязательное поле при включенном TLS)
  cert_file: "certs/server.crt"
  # Файл с паролем если сертификат подписывался с паролем
  cert_key_pass: ""
  # Файл с сертификатом CA (обязательное поле при включенном TLS)
  ca_file: "certs/ca.crt"
  # Проверять ли сертификаты клиента (default: false)
  require_client_cert: false
  # Количество соединений которые может принять сервер
  connections_limit: 10
  # формат отправки сообщения - как есть(raw), с обогащением(json)
  format: "json"
  # Опции смены кодировки
  encoding:
    # Использовать кодировку в UTF-8
    change_to_utf8: false
    # Кодировка оригинала
    original_encoding: "cp1251"

Компонент HTTP сборщик

http_collector_input: &http_collector_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "http_collector_input"
  # удаленный адрес для вызовов http (обязательное)
  remote_server: "localhost"
  # удаленный порт (default: 80)
  port: 80
  # имя пользователя для базовой авторизации, если пустое, считаем что авторизация выключена
  basic_auth_user: ""
  # пароль для базовой авторизации
  basic_auth_password: ""
  # ограничение по времени для запросов, сделанных http-клиентом в секундах (default: 10)
  timeout: 10
  # уровень логирования, если не указан используется уровень модуля журналирования
  log_level: "INFO"
  # если установлено - будет использоваться tls клиент
  enable_tls: false
  # путь к .key файлу, обязательно если enable_tls: true
  key_file: "certs/server.key"
  # путь к .crt файлу, обязательно если enable_tls: true
  cert_file: "certs/server.crt"
  # пароль к файлу сертификатов
  cert_key_pass: ""
  # путь к файлу с набором корневых центров сертификации, обязательно если enable_tls: true
  ca_file: "certs/ca.crt"
  # имя файла для получения по http
  file: ""
  # если установлено - файл будет читаться с последней позиции в следующем тике или после перезапуска (default: false)
  read_from_last: false
  # интервал между http-вызовами в секундах (default: 3)
  poll_interval: 3
  # формат отправки сообщения - как есть(raw), с обогащением(json)
  format: "json"
  # Опции смены кодировки
  encoding:
    # Использовать кодировку в UTF-8
    change_to_utf8: false
    # Кодировка оригинала
    original_encoding: "cp1251"

Компонент File

file_input: &file_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "file_input"
  # интервал между чтениями файла, в секундах (default: 1)
  poll_interval: 1
  # список файлов для чтения
  files: ["./assets/apache_logs"]
  # использовать regexp для поиска файлов
  using_regexp: false
  # начальный каталог для поиска файлов
  regexp_starting_dir: "."
  # regexp для поиска файлов
  regexp_expression: "^.*_logs$"
  # интервал поиска файлов в секундах, в дереве каталогов (default: 2)
  dir_check_interval: 2
  # если установлено - файл будет читаться с последней позиции в следующем тике или после перезапуска
  read_from_last: true
  # создает file watchers для всех файлов
  enable_watcher: true
  # уровень логирования, если не указан используется уровень модуля журналирования
  log_level: "DEBUG"
  # формат отправки сообщения - как есть(raw), с обогащением(json)
  format: "json"
  # Опции смены кодировки
  encoding:
    # Использовать кодировку в UTF-8
    change_to_utf8: false
    # Кодировка оригинала
    original_encoding: "cp1251"

Компонент External Command

external_command_input: &external_command_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "external_command_input"
  # интервал между выполнениями команд (default: 1)
  poll_interval: 1
  # команда bash/cmd
  command: "bash ./assets/bash/shortloop.sh"
  # уровень логирования, если не указан используется уровень модуля журналирования
  log_level: "DEBUG"
  # Опции смены кодировки
  encoding:
    # Использовать кодировку в UTF-8
    change_to_utf8: false
    # Кодировка оригинала
    original_encoding: "cp1251"
  # формат отправки сообщения - как есть(raw), с обогащением(json)
  format: "json"

Компонент SNMP Trap

snmp_traps_input: &snmp_traps_input
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "snmp_traps_input"
  # уровень логирования, если не указан используется уровень модуля журналирования
  log_level: "INFO"
  # адресс snmp менеджера
  host: "localhost"
  # порт для запуска snmp менеджера
  port: 22
  # Принимать только аутентифицированные SNMP v3 Traps
  allow_authenticated_only: false
  # список директорий с .mib файлами для конвертации oid
  # если не указаны, oid будут передаваться в сыром виде
  mib_dirs:
    - dir1
    - dir2
    - dir3
  # Параметры безопасности
  # методы аутентификации. Возможные значения:
  # - MD5
  # - SHA
  auth_proto: ""
  # методы шифрования. Поддерживается только DES.
  encrypt_proto: ""
  # Имя SNMP пользователя
  user_name: ""
  # Пароль аутентификации. Используется с MD5 или SHA
  authentication_passphrase: ""
  # Пароль шифрования для DES
  privacy_passphrase: ""
  # Используется в SNMPv3 для идентификации сущностей.
  authoritative_engine_id: ""
  # Опции смены кодировки
  encoding:
    # Использовать кодировку в UTF-8
    change_to_utf8: false
    # Кодировка оригинала
    original_encoding: "cp1251"
  # формат отправки сообщения - как есть(raw), с обогащением(json)
  format: "json"

Компоненты отправки событий (outputs)

Для включения компонента отправки событий необходимо добавить в файл конфигурации его настройки.

Компонент отправки событий по протоколу TCP

Позволяет отправлять данные по протоколу TCP. Также есть возможность отправки в зашифрованном виде, со сжатием, с настройкой буферизации.

tcp_output: &tcp_output
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "tcp_output"
  # адрес куда отправлять события, обязательный параметр (default: "0.0.0.0")
  target_host: "0.0.0.0"
  #  порт куда отправлять события, обязательный параметр
  port: 15481
  # Включение batch режима (default: false)
  batch_mode_enable: false
  # период отправки пакета в секунундах при включенном batch режиме (default: 5)
  batch_flush_interval: 5
  # количество сообщений которые попадут в пакет при включенном batch режиме (default: 500)
  batch_flush_limit: 500
  # включение сжатия, включение при выключенном batch режиме ощутимо замедляет отправку (default: false)
  ssl_compression: false
  # включение проверки сертификата (default: false)
  require_cert: false
  # включение ssl (default: false)
  ssl_enable: false
  # путь для файла сертификатов, если enable_tls: false параметр не обязательный
  cert_file: "certs/server.crt"
  # путь для файла ключей, если enable_tls: false параметр не обязательный
  key_file: "certs/server.key"
  # пароль для расшифровки файла ключей, если не указан считаем что файл не зашифрован
  cert_key_pass: ""
  # путь до корневого сертификата, если enable_tls: false не обязательный параметр
  ca_file: "certs/ca.crt"
  # уровень логирования, если не указан используется уровень модуля журналирования
  log_level: "DEBUG"
  # максимальное количество сообщений в буфере
  #queue_length_limit: 3
  # максимальное время жизни событий в очереди. в секундах
  #queue_time_limit: 3

Компонент отправки событий по протоколу UDP

Позволяет отправлять данные по протоколу UDP.

udp_output: &udp_output
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "udp_output"
  # адрес куда отправлять события (default: "0.0.0.0")
  target_host: "0.0.0.0"
  # порт, на который отправлять события куда отправлять события, обязательный параметр
  port: 15483
  # размер буфера для отправки, если не указан или равен нулю используется системное значение (default: 0)
  sock_buf_size: 0
  # уровень логирования, если не указан используется уровень модуля журналирования
  log_level: "INFO"

Компонент отправки событий в KAFKA

Позволяет отправлять данные в KAFKA.

kafka_output: &kafka_output
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "kafka_output"
  # включение проверки сертификата (default: false)
  require_cert: false
  # включение ssl (default: false)
  ssl_enable: false
  # путь для файла сертификатов, если ssl_enable: false параметр не обязательный
  cert_file: "certs/server.crt"
  # путь для файла ключей, если ssl_enable: false параметр не обязательный
  key_file: "certs/server.key"
  # пароль для расшифровки файла ключей, если не указан считаем что файл не зашифрован
  cert_key_pass: ""
  # путь до корневого сертификата, если ssl_enable: false параметр не обязательный
  ca_file: "certs/ca.crt"
  # таймауту отправки события в секундах, обязательный параметр
  timeout: 10
  # топик в который попадет событие, обязательный параметр
  topic: "foo"
  # уровень логирования, если не указан используется уровень модуля журналирования
  log_level: "DEBUG"
  # kafka брокеры, обязательный параметр
  brokers:
    - "localhost:19092"
    - "localhost:29092"
    - "localhost:39092"
  # максимальное количество сообщений в буфере
  #queue_length_limit: 3
  # максимальное время жизни событий в очереди. в секундах
  #queue_time_limit: 3

Компонент записи событий в локальный файл

Позволяет записать входящие события в локальный файл.

file_output: &file_output
  # названия модуля, отображается в логах и метриках, уникальный обязательный параметр
  id: "file_output"
  # путь до файла куда будут записываться события, обязательный параметр
  file: "test_file.txt"
  # порог ротации в мегабайтах, если указан ноль ил не указан совсем ротация не происходит (default: 0)
  rotation_size: 0
  # уровень логирования, если не указан используется уровень модуля журналирования
  log_level: "INFO"

Включение компонентов

Для того, чтобы включить компоненты сбора или отправки, необходимо добавить их в разделах настроек collectors для компонентов сбора или senders для компонентов отправки в конфигурационном файле Лог-коллектора.

Включение компонентов сбора (collectors)

В разделе collectors необходимо прописать следующие настройки (пример для компонента сбора eventlog):

collectors:
  # Уровень логирования, если не указан используется уровень логирования компонента журналирования\
  log_level: "INFO"
  # eventlog коллектор, работает только на windows vista и старше
  event_log:
  - <<: *eventlog_collector

Включение компонентов отправки (senders)

В разделе senders необходимо прописать следующие настройки (пример для компонента отправки по TCP):

senders:
  # Порт компонента, обязательный параметр
  port: 48002
  # Уровень логирования, если не указан используется уровень логирования компонента журналирования
  log_level: "INFO"
  # Отправка по протоколу tcp
  tcp:
    - <<: *tcp_output

Маршрутизация событий

Для организации маршрутизации необходимо выполнить следующие действия для связывания компонентов сбора и компонентов отправки:

  1. Настроить маршруты взаимодействия между компонентами сбора событий и компонентами отправки событий.

    Пример настройки маршрута:

    route_1: &route_1
    collector_id:
        - "eventlog_collector"
        - "tcp_input"
    sender_id:
        - "tcp_output"
    

  2. Включить маршрут в разделе конфигурационного файла routers.

    Пример включения маршрута:

    routers:
    - <<: *route_1
    

Важно! Компоненты, используемые в маршрутах, обязательно должны быть включены в разделах collectors и senders и настроены.

Инструкция по настройке AppLocker

  1. Проверить статусы и при необходимости запустить службы Application Management и Application Identity.
  2. Зайти в secpol.msc -> Application Control Policies -> AppLocker -> Configure rule enforcement.

  3. Включить все наборы правил и выставить тип работы «Audit only», кроме правил типа «Executable rules» (enforce - для получения события 8004).

  4. Наполнить наборы правилами. «Automatically Generate Rules» - автоматически, «Create New Rule» - вручную.

    • Автоматически.

      Указать пользователя или группу пользователей, на кого будет применяться правило, а также указать путь, который включает файлы для анализа.

      Указать, как будут анализироваться файлы: по сертификату, по хэшу или по пути.

      Проверить правило и нажать «Create».

    • Вручную.

      Указать действие (разрешить или запретить запуск) и пользователя (группу пользователей), на кого применится правило.

      Выбрать тип проверки файла: по сертификату, либо по пути, либо по хэшу.

      В зависимости от типа проверки файлов добавить условие (путь, либо хэш, либо сертификат).

      При необходимости добавить исключение из правила.

      Добавить имя правила и нажать «Create».

  5. Применить политику, запустив в командной консоли:

    gpupdate /force

  6. Проверить наличие событий AppLocker: EventViewer.msc -> Application and Service Log -> Microsoft -> Windows -> AppLocker

  7. Добавить в конфигурационный файл лог-коллектора канал сбора событий AppLocker и перезапустить лог-коллектор (на примере Linux).

    $ vi /opt/pangeoradar/configs/logcollector/config.yaml
    .....
    channel: ["Security", "System", "Windows PowerShell", "Microsoft-Windows-AppLocker/EXE and DLL", "Microsoft-Windows-AppLocker/MSI and Script"]
    .....
    $ systemctl restart pangeoradar-logcollector-agent.service