Zeek是一款强大的网络安全性监控工具,用于类Unix操作系统。它可以检测和分析网络流量,帮助管理员识别潜在的安全威胁。本教程将指导你在Ubuntu 24.04服务器上安装和配置Zeek,包括集群模式部署、日志解析以及JSON格式输出。
前提条件
在开始之前,请确保你已经具备以下条件:
- 一台Ubuntu 24.04服务器
- 一个具有管理员权限的非root用户
安装Zeek
Zeek可以通过多种方法进行安装。在本例中,我们将从OpenSUSE构建服务使用APT包管理器将Zeek安装到Ubuntu 24.04服务器上。
首先,运行以下命令将Zeek仓库添加到你的Ubuntu系统中。
echo 'deb http://download.opensuse.org/repositories/security:/zeek/xUbuntu_24.04/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.list
现在下载并添加Zeek仓库的GPG密钥。
curl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_24.04/Release.key | \
gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null
添加Zeek GPG密钥和仓库后,运行apt命令更新Ubuntu软件包索引。
sudo apt update

你现在可以运行以下命令检查zeek包。你将看到多个Zeek版本。
sudo apt search zeek
sudo apt-cache policy zeek

接下来,使用以下命令安装Zeek。在本例中,我们将安装Zeek LTS长期支持版本。
sudo apt install zeek
输入Y确认安装。

安装完成后,通过~/.bashrc文件将/opt/zeek/bin目录添加到系统PATH环境变量中。然后重新加载~/.bashrc文件以应用更改。这样你就可以在终端中直接运行Zeek命令。
echo "export PATH=$PATH:/opt/zeek/bin" >> ~/.bashrc
source ~/.bashrc
最后,运行以下命令检查Zeek版本和基本命令选项。
zeek --version
zeek --help
你将看到类似以下的输出:

配置Zeek
Zeek安装完成后,你需要配置Zeek的运行方式。你可以选择单机模式或集群模式。对于大型部署,可以使用集群模式,将Zeek组件分别安装在不同服务器上。用于测试目的,我们将在单台服务器上以集群模式配置和运行Zeek。
使用以下ip命令检查你的服务器IP地址。在本例中,Ubuntu服务器的IP地址为192.168.10.60。
ip a
使用nano编辑器打开Zeek网络配置文件/opt/zeek/etc/networks.cfg。
sudo nano /opt/zeek/etc/networks.cfg
输入你的目标服务器网络子网,如下所示。
192.168.10.0/24 Local Network
保存文件并退出编辑器。
现在使用nano打开Zeek节点配置文件/opt/zeek/etc/node.cfg。
sudo nano /opt/zeek/etc/node.cfg
注释掉以下行以禁用Zeek单机模式。默认情况下,Zeek以单机模式运行,使用默认的localhost和网络接口eth0。
#[zeek] #type=standalone #host=localhost #interface=eth0
粘贴以下配置以在单台服务器上以集群模式运行Zeek。确保将IP地址替换为你的Ubuntu服务器IP地址。如下所示,Zeek集群模式包含多个组件,包括logger、manager、proxy和workers。
# logger [zeek-logger] type=logger host=192.168.10.60 # manager [zeek-manager] type=manager host=192.168.10.60 # proxy [zeek-proxy] type=proxy host=192.168.10.60 # worker [zeek-worker] type=worker host=192.168.10.60 interface=eth0 # worker localhost [zeek-worker-lo] type=worker host=localhost interface=lo
完成后,保存文件并退出编辑器。
接下来,运行zeekctl命令验证Zeek配置语法。如果配置正确,你将看到输出scripts are ok。
zeekctl check

现在运行deploy命令部署Zeek安装。此命令将启动Zeek的logger、manager、proxy和workers组件。
zeekctl deploy

你可以使用以下命令检查每个Zeek组件的状态。
zeekctl status
在以下输出中,你可以看到每个Zeek组件都在运行。这表明Zeek单节点集群部署成功。

使用zeek-cut解析Zeek日志
现在你已经安装并部署了Zeek,网络日志文件将生成在/opt/zeek/logs/current目录中。会有多个Zeek日志文件,你需要了解并关注它们。在本节中,你将学习如何使用zeek-cut工具生成TSV(制表符分隔值)格式的日志。
使用以下ls命令检查Zeek日志目录/opt/zeek/logs/current/。
ls -ah /opt/zeek/logs/current/
你将看到多个日志文件,包括:
- conn.log:TCP和UDP连接日志。该文件提供最有用的信息,如时间戳、连接持续时间、服务类型等
- dns.log:DNS(域名系统)日志文件
- http.log:HTTP(超文本传输协议)日志
- ssh.log:SSH(安全外壳)日志,用于跟踪SSH连接
- ssl.log:SSL(安全套接层)日志,同时包含HTTPS日志

现在进入/opt/zeek/logs/current/目录,运行cat命令查看Zeek日志,并通过管道将输出传递给zeek-cut命令解析为TSV格式。
cd /opt/zeek/logs/current/
cat dns.log | zeek-cut id.orig_h query answers
cat dns.log | zeek-cut query answers id.orig_h
在本例中,我们将显示id.orig_h、query和answers字段的值。

你也可以使用以下方式使用zeek-cut命令处理TSV日志并获取类似的输出。
zeek-cut id.orig_h query answers < dns.log

配置Zeek输出JSON格式
Zeek支持多种日志格式,包括TSV和JSON。在本节中,你将学习如何生成JSON格式的Zeek日志。然后,你将学习如何使用jq命令行工具解析JSON日志,方便你更轻松地阅读日志。
使用nano编辑器打开Zeek配置文件/opt/zeek/share/zeek/site/local.zeek。
sudo nano /opt/zeek/share/zeek/site/local.zeek
取消以下行的注释以启用JSON格式的输出日志。
@load policy/tuning/json-logs
保存文件并退出编辑器。
现在运行zeekctl命令应用并部署你的更改。处理完成后,Zeek将生成JSON格式的日志。
zeekctl deploy
你将在Zeek部署期间看到以下输出。

接下来,运行cat命令检查Zeek日志文件。你将看到Zeek日志现在已经是JSON格式。
cat /opt/zeek/logs/current/dns.log
使用jq解析Zeek JSON日志
使用以下apt命令安装jq包。
sudo apt install jq -y
安装完成后,使用cd命令进入/opt/zeek/logs/current/目录。
cd /opt/zeek/logs/current/
要解析JSON格式的日志,运行以下jq命令。
jq . dns.log

如果你希望获得紧凑的输出,可以使用-c选项:
jq . -c dns.log
最后,你还可以使用以下jq命令指定要显示的JSON日志字段。
jq -c '[."id.orig_h", ."query", ."answers"]' dns.log

总结
恭喜!你已经成功在Ubuntu 24.04服务器上安装了Zeek网络安全监控工具。你已经学习了如何在单台服务器上部署Zeek集群模式、使用zeek-cut工具解析日志生成TSV格式、生成JSON格式的Zeek日志,以及使用jq工具解析JSON日志。接下来,你可以将JSON日志或Zeek日志发送到集中式日志系统,例如Graylog或ELK/EFK技术栈。