Windows服务器的事件日志转发到SIEM系统进行集中分析,核心就是通过Windows内置的WEC(Windows Event Collector)服务或第三方Agent,把分散在各台服务器上的安全日志、系统日志、应用日志实时推送到SIEM平台(如Splunk、QRadar、ArcSight、ELK等),实现统一存储、关联分析和告警。这件事说难不难,说简单也不简单——难在你要搞清楚转发什么日志、用什么协议、怎么保证传输不丢、怎么做日志过滤降噪,简单在Windows从Server 2008 R2开始就原生支持事件转发,不需要额外装软件。

很多运维团队还在用"登录每台服务器打开事件查看器"的方式排查问题,效率极低。一旦服务器数量超过50台,这种方式基本瘫痪。事件日志集中转发是企业安全运营的基础设施,没有这一步,后续的威胁检测、合规审计、故障溯源全都是空谈。下面我把整个流程从规划到落地,一步一步讲透。

一、为什么必须做事件日志集中转发

先说清楚这件事的价值,不然很多人觉得"我服务器少,没必要"。第一,安全层面。单台服务器的日志是孤立的,攻击者横向移动时你根本看不出来。比如A服务器出现异常登录,B服务器出现提权操作,单独看都不算大事,但关联起来就是一次完整攻击链。SIEM做的就是这种跨主机关联。第二,合规层面。等保2.0、ISO27001、PCI-DSS都明确要求日志集中存储且保留不少于6个月,分散存储根本过不了审计。第三,运维效率。一台服务器硬盘坏了日志就没了,集中存储有冗余有备份,历史问题随时可查。

二、Windows事件日志的三大类别及转发优先级

Windows事件日志主要分三类:安全日志(Security)、系统日志(System)、应用程序日志(Application)。转发优先级必须明确:安全日志是重中之重,记录登录、权限变更、策略修改、账户创建删除等,是安全分析的核心数据源。系统日志记录服务启停、驱动加载、内核事件,对排查故障有价值。应用程序日志视具体业务而定,IIS、SQL Server、Exchange等关键应用的日志建议全部转发。不建议把所有日志一股脑全转发,噪音太大,SIEM存储成本也扛不住。

具体要转发哪些Event ID,给你一个实用清单:安全日志重点关注4624(登录成功)、4625(登录失败)、4634/4647(注销)、4720/4722/4725/4726(账户操作)、4672(特权使用)、4688/4689(进程创建)、4719(系统审计策略变更)。系统日志重点关注7036(服务状态变化)、6008(非正常关机)、7045(服务安装)。这些是高频高价值的Event ID,优先配置。

三、两种主流转发方式:WEC原生转发 vs 第三方Agent

Windows原生的WEC(Windows Event Collector)是微软官方推荐的方案,从Server 2008 R2开始支持,使用WS-Management协议(HTTP/HTTPS 5985/5986端口)。优点是不用装额外软件、系统自带、微软持续维护。缺点是配置稍微复杂一点,需要通过GPO或PowerShell批量部署,而且只支持Windows平台。如果你的环境全是Windows服务器,WEC是首选。

第三方Agent方案比如Splunk Universal Forwarder、QRadar WinCollect、Snare、NXLog等。优点是功能更强,支持日志解析、过滤、格式化,跨平台兼容性好(Linux也能用同一个Agent)。缺点是要在每台服务器上装软件,有一定的资源占用和维护成本。混合环境或者对日志预处理要求高的场景,推荐第三方Agent。

四、WEC原生转发的完整配置步骤

WEC配置分两个角色:收集器服务器(Collector)和源服务器(Source)。收集器服务器就是你的SIEM前置机或者专门的日志服务器,源服务器就是需要被采集日志的业务服务器。先配置收集器端。

第一步,在收集器服务器上创建事件订阅。打开PowerShell,以管理员身份运行:

winrm quickconfig
wecutil qc

这两条命令会启动WinRM服务并创建WEC配置。然后创建订阅:

New-WECSubscription -ComputerName "CollectorServer" -SourceInitiated -SubjectName "cn=SourceServer" -Description "Windows Server Log Collection"

第二步,配置GPO让源服务器知道往哪里发日志。在域控上新建GPO,路径:计算机配置 → 策略 → 管理模板 → Windows组件 → 事件转发 → 配置目标订阅。填入收集器服务器的FQDN和订阅名称。同时在"配置转发资源使用"里设置最大延迟和最大带宽,生产环境建议最大延迟设为15分钟,带宽不限制或设为512KB。

第三步,源服务器端确认。在源服务器上运行以下命令验证转发状态:

wecutil gs /r:CollectorServer /sub:"Windows Server Log Collection"

如果返回"SubscriptionStatus: Active"就说明配置成功。如果报错,检查防火墙5985端口是否放行、WinRM服务是否启动、GPO是否生效。

五、防火墙和网络配置要点

WEC默认使用5985(HTTP)或5986(HTTPS)端口。生产环境强烈建议用HTTPS,因为日志传输包含敏感信息(用户名、IP等),明文传输有泄露风险。配置HTTPS需要在收集器端绑定SSL证书,可以用自签名证书,但要确保所有源服务器信任该证书。防火墙规则要双向放行:收集器端入站5985/5986,源服务器端出站5985/5986。如果是跨网段,中间的交换机、路由器ACL都要放开对应端口。

另外注意,WEC使用Kerberos或NTLM认证。域环境下自动走Kerberos,工作组环境需要手动配置。如果源服务器不在域内,需要在收集器端的本地安全策略里添加源服务器的计算机账户到"允许的发布者"列表。

六、日志过滤和降噪策略

一台Windows服务器每天产生的事件日志量从几千条到几万条不等,如果不做过滤直接转发,SIEM的存储和计算压力会非常大。WEC支持在订阅配置中指定日志查询,只转发满足条件的事件。在收集器端配置时可以用XPath查询语法:

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">*[System[(EventID=4624 or EventID=4625 or EventID=4672 or EventID=4720 or EventID=4726)]]</Select>
  </Query>
</QueryList>

这段XML只转发安全日志中指定的高价值Event ID。你也可以在GPO的"配置转发资源使用"中设置最大订阅数量,比如限制每台源服务器每天最多转发10000条,超出的丢弃。这是一种粗暴但有效的保护机制。

七、第三方Agent方案的快速部署思路

如果选择Splunk UF,部署非常简单。在每台Windows服务器上下载安装Universal Forwarder,修改inputs.conf和outputs.conf:

[WinEventLog://Security]
disabled = 0
start_from = oldest
current_only = 0
evt_resolve_ad_obj = 1
checkpointInterval = 5

[WinEventLog://System]
disabled = 0
start_from = oldest
current_only = 0

[WinEventLog://Application]
disabled = 0
start_from = oldest
current_only = 0
[tcpout]
defaultGroup = splunk_indexers

[tcpout:splunk_indexers]
server = splunk-indexer01:9997, splunk-indexer02:9997

装完重启服务就开始采集。Splunk UF的好处是自带日志解析能力,Windows Event Code会被自动映射成可读字段,到了SIEM端直接就能用。QRadar的WinCollect类似,也是装Agent配目标IP和端口。NXLog是开源方案,配置灵活但需要自己写规则。

八、SIEM端接收配置和解析注意事项

日志到了SIEM端不是终点,解析才是关键。Windows事件日志是XML格式(.evtx),SIEM需要正确解析字段。Splunk有内置的Windows TA(Technology Add-on),安装后自动解析Security、System、Application日志。QRadar需要导入DSM(Device Support Module)或自定义解析规则。ELK Stack用Winlogbeat采集,天然支持字段映射。

重点注意时区问题。所有服务器必须统一时区,建议全部设为UTC+8(北京时间)或UTC。时区不一致会导致事件时间错乱,关联分析时时间线对不上,排查问题时会非常痛苦。另外,源服务器的时钟要用NTP同步,偏差超过5分钟就可能影响日志顺序和关联准确性。

九、监控转发链路本身的健康状态

很多人配完转发就不管了,这是大忌。你需要监控:转发是否正常、有没有丢日志、延迟多大。WEC可以通过PowerShell定期检查订阅状态:

Get-WECSubscription | Select-Object ComputerName, SubscriptionId, SubscriptionStatus, RetryCount

如果RetryCount持续增长,说明网络有问题或者收集器端处理不过来。SIEM端也要监控每日日志量,如果某台服务器突然日志量暴增或骤降,都是异常信号。建议在SIEM里建一个Dashboard,专门展示各台服务器的日志接收量、延迟、错误率。

十、常见坑和避坑指南

第一,WEC在Server 2012之前的版本有一个已知Bug,大量订阅时会导致WinRM服务内存泄漏,必须打补丁或升级系统。第二,不要在收集器服务器上同时跑其他高负载业务,日志接收和解析很吃CPU和磁盘IO。第三,日志保留策略要提前规划,SIEM存储有限,建议热数据保留90天、温数据保留180天、冷数据归档到对象存储。第四,如果有离线服务器(比如隔离网、工控网),WEC无法工作,需要用本地Agent缓存后批量导入。第五,域控的日志转发要特别小心,域控本身就是认证中心,如果域控日志转发出问题,可能影响整个域的认证链路。

总结一下,Windows事件日志转发到SIEM这件事,技术上不复杂,但要做好需要系统性规划:选对转发方式、配好过滤策略、打通网络链路、统一时区时钟、持续监控健康状态。这是安全运营的地基,地基打不好,上面建什么都是空中楼阁。不管你是5台服务器的小团队还是500台服务器的大企业,这套流程都适用,区别只在规模和工具选型上。