1. Zeek监测工程全景
Zeek(原名Bro)是一款开源的网络流量分析与安全监测平台。它并不像传统防火墙那样直接阻断流量,也不像简单的抓包工具那样只保存原始数据包,而是把实时流量解析成结构化、可检索、可编程处理的安全事件。理解Zeek的定位,是搭建一套可持续运行的网络监测工程(NSM)的起点。
Zeek在安全监测体系中的定位
要理解Zeek,最有效的方式是把它和常见的两类工具放在一起比较:IDS(入侵检测系统)和NSM(网络安全监测)。传统IDS(如Snort、Suricata)以“规则匹配”为核心,输入是流量,输出是告警——命中规则就报警,没命中就沉默。它擅长发现已知攻击特征,但对“谁在什么时候访问了哪台服务器、传输了多少字节、用了什么协议”这类上下文信息往往记录不足。
NSM则强调“先记录、后分析”,把网络活动完整地转成可查询的记录,再在其上做威胁狩猎和事件回溯。Zeek正是NSM理念的代表性实现。它既具备IDS式的检测能力(通过脚本触发告警),又具备NSM式的全量记录能力(连接日志、DNS日志、HTTP日志、SSL日志等)。因此,Zeek常被定位为“可编程的网络安全监测平台”,而不是单纯的IDS。
三者的关系可以这样概括:Suricata/Snort负责“特征告警”,Zeek负责“行为记录与语义解析”,两者常并行部署、互为补充;而NSM是一套工程方法论,Zeek是落地这套方法论的核心引擎之一。
Zeek的核心能力
Zeek的能力可以归纳为四个层面。第一是协议解析:它内置了对HTTP、DNS、SSL/TLS、SMTP、FTP、SSH、DHCP等数十种协议的理解,能把字节流还原成“某主机在14:03:22向8.8.8.8发起了DNS查询,查询域名是example.com,响应A记录为93.184.216.34”这样的语义记录。第二是事件生成:Zeek把解析结果抽象成事件(如http_request、dns_request、conn),脚本可以订阅这些事件并做出反应。第三是脚本编程:Zeek自带Turing完备的脚本语言,用户可编写检测逻辑、提取字段、生成自定义日志。第四是日志输出:默认输出TSV格式日志,也可配置为JSON,便于接入ELK、Splunk等分析平台。
从流量采集到安全事件输出的工程链路
一套完整的Zeek监测工程,链路大致如下:流量从交换机镜像口或TAP设备进入采集网卡,经BPF过滤后交给Zeek引擎;Zeek完成协议解析与事件分发,脚本层执行检测逻辑,最终把连接记录、协议日志、告警日志写入磁盘或转发到消息队列;下游的分析平台对日志做聚合、关联和可视化,安全分析师据此判断是否存在威胁。
这条链路中有几个关键工程点值得注意。采集环节要保证“不丢包”,通常需要关闭网卡offload、调整ring buffer;解析环节要关注CPU占用,因为Zeek是单线程处理每个数据包流;输出环节要规划日志轮转和存储容量,避免磁盘写满导致监测中断。
工程链路中的关键判断
在实际部署中,判断一套Zeek监测工程是否“健康”,可以观察几个信号。首先是conn.log是否持续写入——如果长时间没有新记录,说明采集或解析环节可能中断。其次是capture_loss日志,Zeek会定期报告内核丢包统计,如果丢包率持续高于0.1%,就需要检查采集配置。再次是notice.log和weird.log,前者记录脚本触发的告警,后者记录协议解析异常,两者是发现检测逻辑问题和异常流量的重要入口。
一个常见的教学示例是:在实验环境中用zeek -i eth1启动Zeek,然后从另一台主机发起一次DNS查询和一次HTTP访问。观察dns.log中是否出现查询记录、http.log中是否出现请求方法、Host和URI字段。如果日志正常生成,说明从采集到输出的链路是通的;如果只有conn.log而没有协议日志,则可能是协议解析未命中或端口非标准,需要检查local.zeek中的协议加载配置。
conn.log为例,id.orig_h、id.resp_h、id.resp_p、proto、duration、orig_bytes、resp_bytes、conn_state这些字段,几乎构成了所有后续分析的基础。先读懂日志,再谈检测。
与IDS/NSM工具的关系再梳理
如果把安全监测比作一套“交通监控系统”,Suricata像路口的违章抓拍相机——只对特定违章行为拍照告警;Zeek则像全程录像加智能识别系统——它记录每一辆车的通行时间、车型、路线,并能根据规则标记可疑车辆。两者不是替代关系,而是互补关系。在成熟的安全运营中心里,常见做法是Suricata负责已知威胁的快速告警,Zeek负责全量行为记录和自定义检测,两者日志在SIEM中关联分析。
从工程视角看,Zeek的独特价值在于“可编程”。当安全团队需要检测一种新的攻击模式时,不需要等待厂商更新规则库,而是可以自己写一段Zeek脚本,订阅相关事件,提取特征字段,触发告警。这种灵活性使Zeek成为NSM工程中不可替代的一环。
本章小结
Zeek是NSM理念的核心引擎,定位介于传统IDS和全量抓包之间:它既做协议解析与行为记录,也支持脚本化的检测逻辑。一套完整的Zeek监测工程包含采集、解析、事件处理、日志输出和下游分析五个环节,每个环节都有明确的工程控制点。理解这条链路,是后续学习Zeek部署、脚本编写和日志分析的基础。