В инфраструктуре с 50+ Windows-серверами разбор логов вручную — потеря времени. Без централизации среднее время обнаружения инцидента (MTTD) на Windows-хостах в 2–3 раза выше, чем на Linux. Настроив WEF для 200+ серверов в домене, мы снизили MTTD с 48 часов до 15 минут — в 8 раз. Это позволило сократить время реакции на инциденты и повысить эффективность аудита Windows Server. Event Log Forwarding (WEF) — встроенный в Windows механизм на базе Microsoft documentation on WinRM, позволяющий собирать события без стороннего агента.
Windows Event Forwarding (WEF): нативный подход
WEF — механизм на основе WinRM. Архитектура: Windows Event Collector (WEC) — сервер-агрегатор, который подписывается на источники (Collector Initiated) или ждёт push от источников (Source Initiated). Для доменной среды Source Initiated через GPO — предпочтительный вариант: не требует прав на каждый источник отдельно, масштабируется до тысяч узлов. Типичный коллектор может обрабатывать до 5000 событий в секунду.
| Параметр | Source Initiated | Collector Initiated |
|---|---|---|
| Развёртывание | Через GPO (массово) | На каждом сервере вручную |
| Требуемые права | Только на коллектор | На каждый источник |
| Масштабирование | Лёгкое, до 1000+ узлов | Сложное, до 100 узлов |
| Шифрование | HTTPS (зависит от WinRM) | HTTPS |
Типичная ошибка — забывают настроить HTTPS для WinRM, трафик остаётся незашифрованным. Или не фильтруют EventID, забивая канал миллионами ненужных событий.
Как настроить WEF через GPO?
Настройка включает три шага:
- Настройка WinRM на коллекторе и источниках через GPO.
- Создание подписки на коллекторе с указанием целевых EventID.
- Назначение разрешений и проверка связи.
Настройка WinRM на коллекторе и источниках
# На коллекторе
winrm quickconfig -q
wecutil qc -q
# На каждом источнике (через GPO или локально)
winrm quickconfig -q
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "collector.domain.com" Создание подписки на коллекторе
XML-шаблон подписки для сбора событий безопасности, системы и приложений:
<Subscription xmlns="http://schemas.microsoft.com/2006/03/windows/events/subscription">
<SubscriptionId>SecurityEvents</SubscriptionId>
<SubscriptionType>SourceInitiated</SubscriptionType>
<Description>Security events from all domain servers</Description>
<Enabled>true</Enabled>
<Uri>http://schemas.microsoft.com/wbem/wsman/1/windows/EventLog</Uri>
<ConfigurationMode>MinLatency</ConfigurationMode>
<Delivery Mode="Push">
<Batching>
<MaxItems>100</MaxItems>
<MaxLatencyTime>1000</MaxLatencyTime>
</Batching>
<PushSettings>
<Heartbeat Interval="900000"/>
</PushSettings>
</Delivery>
<Query>
<![CDATA[
<QueryList>
<Query Id="0">
<Select Path="Security"> *[System[(EventID=4624 or EventID=4625 or EventID=4634 or EventID=4648 or EventID=4720 or EventID=4722 or EventID=4724 or EventID=4728 or EventID=4732 or EventID=4756 or EventID=4767 or EventID=4771 or EventID=4776)]] </Select>
<Select Path="System"> *[System[Level<=3]] </Select>
<Select Path="Application"> *[System[Level=1 or Level=2]] </Select>
</Query>
</QueryList>
]]>
</Query>
<ReadExistingEvents>false</ReadExistingEvents>
<TransportName>HTTP</TransportName>
<ContentFormat>RenderedText</ContentFormat>
<Locale Language="en-US"/>
<LogFile>ForwardedEvents</LogFile>
<AllowedSourceDomainComputers>O:NSG:NSD:(A;;GA;;;DC)(A;;GA;;;NS)</AllowedSourceDomainComputers>
</Subscription>Сохраните файл как security-events.xml и выполните на коллекторе: wecutil cs security-events.xml. Ключевые EventID: 4624 (успешный вход), 4625 (неудачный вход), 4720 (создание пользователя), 4724 (сброс пароля), 4728/4732/4756 (добавление в привилегированные группы).
Winlogbeat: отправка в Elasticsearch
Winlogbeat — Filebeat-аналог для Windows Event Log, часть Elastic Stack. Преимущество — встроенная поддержка фильтрации и трансформации, минус — зависимость от Elasticsearch.
Почему стоит комбинировать WEF и Winlogbeat?
WEF агрегирует логи на коллектор, а Winlogbeat отправляет их в Elasticsearch. Такой подход в 2 раза снижает нагрузку на каждый источник по сравнению с установкой Winlogbeat на каждом сервере. Кроме того, фильтрация на коллекторе сокращает объём передаваемых данных на 60–80%. Ниже конфигурация Winlogbeat для ForwardedEvents:
# winlogbeat.yml
winlogbeat.event_logs:
- name: Application
ignore_older: 72h
level: critical, error, warning
- name: System
ignore_older: 72h
level: critical, error, warning
- name: Security
ignore_older: 72h
event_id: 4624, 4625, 4634, 4648, 4720, 4722, 4724, 4728, 4732, 4756, 4767, 4771, 4776, 7045
- name: ForwardedEvents
ignore_older: 72h
- name: Microsoft-Windows-PowerShell/Operational
ignore_older: 72h
processors:
- add_host_metadata:
when.not.contains.tags: forwarded
output.elasticsearch:
hosts: ["elasticsearch.monitoring.svc:9200"]
index: "winlogbeat-%{[agent.version]}-%{+yyyy.MM.dd}"
ssl.certificate_authorities: ["C:/certs/ca.crt"]
ssl.certificate: "C:/certs/winlogbeat.crt"
ssl.key: "C:/certs/winlogbeat.key"
setup.template.settings:
index.number_of_shards: 1
index.number_of_replicas: 0
Установка через PowerShell:
$url = "https://artifacts.elastic.co/downloads/beats/winlogbeat/winlogbeat-latest-windows-x86_64.zip"
Invoke-WebRequest -Uri $url -OutFile "winlogbeat.zip"
Expand-Archive -Path "winlogbeat.zip" -DestinationPath "C:\Program Files\winlogbeat"
cd "C:\Program Files\winlogbeat\winlogbeat-latest-windows-x86_64"
.\install-service-winlogbeat.ps1
Start-Service winlogbeat NXLog: универсальный агент
NXLog Community Edition работает как с WEF, так и с отправкой в Syslog, Loki или любой другой endpoint. Полезен, когда Elasticsearch не в стеке.
| Параметр | Winlogbeat | NXLog |
|---|---|---|
| Интеграция с Elastic | Нативная | Через плагины |
| Возможность вывода в Loki | Требуется плагин | Встроенная (om_http) |
| Ресурсы | ~50 МБ RAM | ~20 МБ RAM |
| Гибкость фильтрации | X-Path | Регулярные выражения |
Пример конфигурации NXLog для отправки в Loki:
<Input eventlog>
Module im_msvistalog
Query <QueryList><Query Id="0"><Select Path="Security">*[System[(Level<=3) or (EventID=4624 or EventID=4625)]]</Select></Query></QueryList>
SavePos TRUE
ReadFromLast TRUE
</Input>
<Output loki>
Module om_http
URL http://loki.monitoring:3100/loki/api/v1/push
ContentType application/json
<Exec>
$Message = to_json();
</Exec>
</Output>
<Route r1>
Path eventlog => loki
</Route> Типичные ошибки при настройке WEF
- Не настроен HTTPS для WinRM — трафик идёт в открытом виде.
- Слишком широкая подписка — захватываются все события, перегрузка сети и коллектора.
- Забыли настроить TrustedHosts на источниках — соединение отклоняется.
- Не настроено время жизни подписки — подписка может зависнуть.
Что входит в работу — deliverables
- Разработка архитектуры сбора (выбор подхода, настройка WinRM и GPO)
- Создание подписок WEF под ваши EventID (безопасность, приложения, система)
- Установка и настройка Winlogbeat/NXLog на коллектор
- Интеграция с SIEM (Elastic, Loki, Splunk) — настройка индексов и алертинга
- Документация: схема потоков, runbook для расширения, список фильтруемых событий
- Обучение команды (2 часа воркшопа)
- Гарантия на конфигурацию — 30 дней бесплатной поддержки
Настройка Event Log Forwarding занимает 1–3 дня в зависимости от размера домена и требований к фильтрации. Свяжитесь с нами — оценим вашу инфраструктуру за 1 день. Наши инженеры имеют сертификаты Microsoft и 5+ лет опыта в построении систем мониторинга для Windows-сред. Закажите настройку — получите консультацию.







