Сбор журналов Windows в Elasticsearch

В этой публикации я покажу пример того как осуществляется Сбор журналов Windows в Elasticsearch. Примеры развертывания кластера Elasticsearch и хоста с Kibana уже есть в моём блоге. Можете использовать их в качестве опорных руководств по развертывания соответствующих компонентов.

Схема решения

Логическая схеме решения приведена ниже.

Схема ниже отображает физическую топологию решения.

Подготовка Elasticsearch

Выполним подготовку на стороне Elasticsearch.

1. Сначала я создам отдельную роль через Dev Tools для работы с индексами веб серверов:

https://192.168.56.36:5601/app/dev_tools

2. Для этого я выполню следующий запрос:

POST _security/role/windows_server_logs
{
  "cluster": ["manage_index_templates", "monitor", "manage_ilm"], 
  "indices": [
    {
      "names": [ "windows*" ], 
      "privileges": ["write","create","create_index","manage","manage_ilm","view_index_metadata"]  
    }
  ]
}

3. Теперь я создам отдельного пользователя:

POST _security/user/windows_server_logs_user
{
  "password" : "Qwerty123",
  "roles" : [ "windows_server_logs","ingest_admin","kibana_admin"],
  "full_name" : "Logstash User for store logs from Windows Host"
}

4. Теперь необходимо скопировать сертификат корневого центра сертификации Elasticsearch, т.к. я использую сертификат от внутреннего ЦС, который был настроен при установке Elasticsearch. На любом из узлов Elasticsearch выполните команду:

cat /etc/elasticsearch/certs/http_ca.crt

Затем скопируйте содержимое файла в файл http_ca.crt (или любое на ваше усмотрение) на сервере с Winlogbeat. Пусть до этого сертификата корневого ЦС нужно будет указать в конфигурационном файле Winlogbeat.

Предварительная подготовка на стороне Elasticsearch завершена.

Настройка Winlogbeat

Для того чтобы настроить сбор журналов Windows в Elasticsearch необходимо выполнить следующие действия на хосте Windows:

1. Установить Winlogbeat.

2. Открыть на редактирование конфигурационный файл сервиса Winlogbeat.

"C:\Program Files\Winlogbeat\winlogbeat.yml"

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

winlogbeat.event_logs:
  - name: Application
    ignore_older: 72h

  - name: System

  - name: Security

  - name: Microsoft-Windows-Sysmon/Operational

  - name: Windows PowerShell
    event_id: 400, 403, 600, 800

  - name: Microsoft-Windows-PowerShell/Operational
    event_id: 4103, 4104, 4105, 4106

  - name: ForwardedEvents
    tags: [forwarded]

# ====================== Elasticsearch template settings =======================

setup.template.settings:
  index.number_of_shards: 1

# ================================== General ===================================

tags: ["windows", "iis"]

# ---------------------------- Elasticsearch Output ----------------------------
output.elasticsearch:
  hosts: ["https://192.168.56.40:9200","https://192.168.56.37:9200"]
  index: "windows-%{+YYYY.MM.dd}"
  username: windows_server_logs_user
  password: Qwerty123
  protocol: https
  ssl.certificate_authorities: ["C:\\Program Files\\Winlogbeat\\http_ca.crt"]

setup.template:
  name: "windows_log"
  pattern: "windows-*"
  

# ================================= Processors =================================
processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
  - add_cloud_metadata: ~

В примере конфигурационного файла выше для журналов системы и приложения я буду отправлять в Elasticsearch события с уровнем серьезности “Предупреждение” и выше. Также необходимо указать пользователя и путь до сертификата корневого центра сертификации для подключения к Elasticsearch. Два этих шага мы выполняли в разделе с предварительной подготовкой.

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

4. Сохраняем внесенные изменения в конфигурационный файл Winlogbeat.

5. Перезапускаем службу Winlogbeat.

Restart-Service winlogbeat

Проверка

1. Сначала выполним проверку конфигурации Winlogbeat:

cd 'C:\Program Files\Winlogbeat\'
./winlogbeat test config
 ./winlogbeat test output
PS C:\Users\Administrator> cd 'C:\Program Files\Winlogbeat\'
PS C:\Program Files\Winlogbeat> ./winlogbeat test config
Config OK
PS C:\Program Files\Winlogbeat> ./winlogbeat test output
elasticsearch: https://192.168.56.40:9200...
  parse url... OK
  connection...
    parse host... OK
    dns lookup... OK
    addresses: 192.168.56.40
    dial up... OK
  TLS...
    security: server's certificate chain verification is enabled
    handshake... OK
    TLS version: TLSv1.3
    dial up... OK
  talk to server... OK
  version: 8.13.2
elasticsearch: https://192.168.56.37:9200...
  parse url... OK
  connection...
    parse host... OK
    dns lookup... OK
    addresses: 192.168.56.37
    dial up... OK
  TLS...
    security: server's certificate chain verification is enabled
    handshake... OK
    TLS version: TLSv1.3
    dial up... OK
  talk to server... OK
  version: 8.13.2
PS C:\Program Files\Winlogbeat>

2. Теперь перейдем в панель управления Kibana и убедимся, что наш шаблон индекса создан:

https://192.168.56.36:5601/app/management/data/index_management/templates

Шаблон индекса должен быть создан автоматически.

3. Теперь проверим наличие потоков данных:

https://192.168.56.36:5601/app/management/data/index_management/data_streams

Количество потоков данных зависит от даты последних событий в журналах Windows на исходной системе. В моем случае потоков было более 20 штук:

4. Последним шагом перейдем в панель Discover:

https://192.168.56.36:5601/app/discover

И создадим представление:

Имя можете указать любое, но вот шаблон нужно указать тот, что вы указывали в конфигурационном файле Winloagbeat.

Если вы все сделали верно, то в вашем представлении должны появиться данные с вашего хоста Windows с Winlogbeat:

Если что-то не работает

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

cd 'C:\Program Files\Winlogbeat\'
.\winlogbeat.exe -c .\winlogbeat.yml -e -v -d "*"

Если есть какие-то ошибки то они должны вывестись на консоль.

Если сервис работает, но данные в Elasticsearch не поступают, то попробуйте включить журналирование.

logging.level: info
logging.to_files: true
logging.files:
  path: C:\ProgramData\winlogbeat\Logs
  name: winlogbeat
  keepfiles: 7
  permissions: 0640

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *