如何在CentOS 9 Stream中通过TCP/UDP发送Zeek日志至指定端口?
Zeek原生日志转发至SIEM收集器(TCP/UDP)
Zeek本身提供了原生的日志输出框架,无需第三方工具即可将日志通过TCP或UDP发送至指定的SIEM收集器端口,核心是利用内置的日志writer组件实现。
一、UDP日志转发配置
- 创建转发脚本(例如
forward-logs-udp.zeek):
@load base/frameworks/logging/writers/udp # 替换为你的SIEM收集器地址和端口 global siem_udp_host = "192.168.1.100" global siem_udp_port = 514 event zeek_init() &priority=5 { # 为所有活跃日志流添加UDP writer for (id in Log::active_streams) { Log::add_writer(id, Log::WRITER_UDP, [$address=siem_udp_host, $port=siem_udp_port]); } }
- 加载脚本生效:
- 临时生效:启动Zeek时指定脚本,例如
zeek -i eth0 forward-logs-udp.zeek - 永久生效:将脚本放入Zeek的site目录(通常为
/usr/local/zeek/share/zeek/site/),并在local.zeek中添加@load ./forward-logs-udp.zeek
- 临时生效:启动Zeek时指定脚本,例如
二、TCP日志转发配置
Zeek原生支持TCP持久连接的日志转发,配置逻辑与UDP类似:
- 创建转发脚本(例如
forward-logs-tcp.zeek):
@load base/frameworks/logging/writers/tcp # 替换为你的SIEM收集器地址和端口 global siem_tcp_host = "192.168.1.100" global siem_tcp_port = 514 event zeek_init() &priority=5 { # 为所有活跃日志流添加TCP writer for (id in Log::active_streams) { Log::add_writer(id, Log::WRITER_TCP, [$address=siem_tcp_host, $port=siem_tcp_port]); } }
- 加载方式与UDP配置相同,TCP writer默认会在连接断开后自动尝试重连。
三、转发指定类型日志
如果不需要转发所有日志,可指定特定日志类型(例如仅转发HTTP和DNS日志):
修改脚本中的zeek_init函数:
event zeek_init() &priority=5 { # 指定需要转发的日志类型 local target_streams = set(HTTP::LOG, DNS::LOG); for (id in target_streams) { Log::add_writer(id, Log::WRITER_UDP, [$address=siem_udp_host, $port=siem_udp_port]); } }
四、JSON格式日志转发
若SIEM更易解析JSON格式,可结合JSON writer与网络转发:
@load base/frameworks/logging/writers/json @load base/frameworks/logging/writers/udp global siem_udp_host = "192.168.1.100" global siem_udp_port = 514 event zeek_init() &priority=5 { for (id in Log::active_streams) { Log::add_writer(id, Log::WRITER_JSON, [$writer=Log::WRITER_UDP, $writer_opts=[$address=siem_udp_host, $port=siem_udp_port]]); } }
注意事项
- 确保SIEM收集器的目标端口已开放防火墙规则,允许Zeek主机的连接/数据包
- 可通过
zeek -C -i <接口> <脚本名>启动Zeek并测试日志转发,验证SIEM是否接收成功
内容的提问来源于stack exchange,提问作者amelia
相关产品推荐
相关产品推荐

