本页内容

  • 先决条件
  • 添加软件仓库
  • 安装 Zeek
  • 配置 Zeek
  • Zeek 日志指南
  • 通过 Zeek-cut 分析 Zeek 日志 TSV(制表符分隔值)
  • 将 Zeek 日志文件配置为 JSON
  • 结论

Zeek(原名为 Bro)是一个免费的开源网络安全监控平台。它是一个强大的被动网络流量分析器,用于调查可疑或恶意活动。Zeek 可用作网络安全监视器(NSM),并支持从安全领域到性能测量与故障排除的广泛流量分析。

在本指南中,我将逐步向你展示如何在 Debian 12 服务器上安装 Zeek 网络安全监控系统。你将安装 Zeek,并以集群模式配置 Zeek,然后学习如何通过 zeek-cut 命令行解析 Zeek TSV 日志格式。此外,你还将学习如何将 Zeek 日志输出设置为 JSON,并通过 jq 命令行解析 Zeek JSON 日志。

先决条件

在开始之前,请确认你具备以下条件:

  • 一台 Debian 12 服务器。
  • 一个具有管理员权限的非 root 用户。

添加软件仓库

Zeek 可以通过手动编译或使用第三方仓库的方式安装在 Linux 系统上。在本指南中,你将通过 APT 使用第三方仓库来安装 Zeek。

首先,运行以下命令为 Zeek 软件包添加 GPG 密钥和仓库。

curl -fsSL https://download.opensuse.org/repositories/security:zeek/Debian_12/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null
echo 'deb http://download.opensuse.org/repositories/security:/zeek/Debian_12/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.list

现在,通过执行以下 apt update 命令更新并刷新你的 Debian 仓库。

sudo apt update

在 Debian 12 上安装 Zeek 网络安全监控系统

安装 Zeek

添加 Zeek 仓库后,你现在可以在 Debian 机器上开始安装 Zeek。在接下来的步骤中,你将安装 Zeek,并将 Zeek 安装目录添加到系统 PATH。

执行以下 apt install 命令,将 Zeek 安装到你的 Debian 机器上。Zeek 有多个可用版本,例如最新发布版、LTS 和 nightly(每日构建版)。在本示例中,你将安装 zeek-lts。

sudo apt install zeek-lts

输入 y 以继续安装。

在 Debian 12 上安装 Zeek 网络安全监控系统

Zeek 安装完成后,默认会安装到目标目录 /opt/zeek。执行以下命令,通过 ~/.bashrc 文件将 /opt/zeek/bin 目录添加到系统 PATH。

echo "export PATH=$PATH:/opt/zeek/bin" >> ~/.bashrc

接下来,重新加载 ~/.bashrc 文件,并使用以下命令检查系统 PATH 变量。你应该能在系统 PATH 中看到 /opt/zeek/bin 目录。

source ~/.bashrc
echo $PATH

在 Debian 12 上安装 Zeek 网络安全监控系统

最后,通过执行以下命令来验证 Zeek。借此,你将检查 Zeek 二进制文件的位置、查看 Zeek 版本,并打印 Zeek 帮助信息。

which zeek
zeek --version
zeek --help

在以下输出中,你应该能看到 zeek 5.0 已安装在 /usr/zeek/bin/zeek。此外,你还应该能看到 Zeek 命令的选项。

在 Debian 12 上安装 Zeek 网络安全监控系统

配置 Zeek

现在 Zeek 已经安装完成,下一步是配置 Zeek 安装。你可以以多种模式运行 Zeek,例如命令行模式、独立(standalone)模式和集群(cluster)模式。

在下面的示例中,你将学习如何使用单台服务器以集群模式运行 Zeek。

在配置 Zeek 之前,执行以下命令检查你的网络接口和 IP 地址。

ip a

你应该能看到系统上可用的接口列表,其中包含类似以下内容的服务器 IP 地址详细信息:

在 Debian 12 上安装 Zeek 网络安全监控系统

使用以下 nano 编辑器命令打开 Zeek 的网络配置文件 /opt/zeek/etc/networks.cfg。

sudo nano /opt/zeek/etc/networks.cfg

按如下方式插入你的内部网络子网。你也可以向其中添加多个子网。

10.0.0.0/8          Private IP space
172.16.0.0/12       Private IP space
192.168.0.0/16      Private IP space

完成后保存文件并退出编辑器。

现在使用以下 nano 编辑器命令打开 Zeek 配置文件 /opt/zeek/etc/node.cfg。

sudo nano /opt/zeek/etc/node.cfg

默认情况下,Zeek 运行在独立(standalone)模式下。添加 # 以禁用 Zeek 的独立模式。

#[zeek]
#type=standalone
#host=localhost
#interface=eth0

插入以下配置,以单台服务器集群模式运行 Zeek。请务必将服务器 IP 地址替换为你自己的信息。

通过以下配置,你将以集群模式运行 Zeek,其中包含多个组件,例如 zeek-logger、zeek-manager、zeek-proxy 和 zeek-worker。

# logger
[zeek-logger]
type=logger
host=192.168.10.15
# manager
[zeek-manager]
type=manager
host=192.168.10.15
# proxy
[zeek-proxy]
type=proxy
host=192.168.10.15
# worker
[zeek-worker]
type=worker
host=192.168.10.15
interface=eth0
# worker localhost
[zeek-worker-lo]
type=worker
host=localhost
interface=lo

完成后保存并关闭该文件。

接下来,运行以下命令进入 Zeek 控制 shell。

zeekctl

运行 check 命令来验证你的 Zeek 配置。

check

如果一切顺利,你应该能看到 Zeek 脚本的每个组件都正常(ok):

在 Debian 12 上安装 Zeek 网络安全监控系统

接下来,运行 deploy 命令以在你的机器上启动并运行 Zeek。deploy 命令等同于 Zeek 上的 install 和 start 命令。

deploy

你应该能看到 Zeek 集群的每个组件正在启动:

在 Debian 12 上安装 Zeek 网络安全监控系统

最后,通过执行以下 status 命令验证 Zeek 集群的每个组件。

status

如果你的安装成功,你应该能看到 Zeek 集群的每个组件都在运行。

在 Debian 12 上安装 Zeek 网络安全监控系统

输入 exit 退出 Zeek 控制 shell。

此时,Zeek 集群正在运行。它还会监控目标网络接口和子网,并将日志文件生成到 /opt/zeek/logs 目录。

Zeek 日志指南

配置完 Zeek 后,下一步是探索 Zeek 生成的日志文件,这些文件位于 /opt/zeek/logs/current 目录。默认情况下,Zeek 以 TSV(制表符分隔值)格式生成日志文件。

当 Zeek 运行时,它会监控系统上的目标网络接口,并将日志文件生成到 /opt/zeek/logs/current/ 目录。

将你的工作目录切换到 /opt/zeek/logs/current/ 目录,并运行以下 ls 命令。

cd /opt/zeek/logs/current/
ls -ah

你应该能看到 Zeek 生成的多个日志文件。你可能会发现系统中缺少某些日志文件,因为对应的目标服务不可用。

在 Debian 12 上安装 Zeek 网络安全监控系统

以下是一些你必须了解的重要日志文件:

  • conn.log:TCP 和 UDP 的连接日志。该日志文件提供了最有用的信息,例如时间戳、连接持续时间、服务等等。
  • dns.log:DNS(域名系统,Domain Name System)日志。
  • http.log:超文本传输协议(HTTP,HyperText Transfer Protocol)日志。
  • ssh.log:用于跟踪 SSH 连接的 Secure Shell(SSH)日志。
  • ssl.log:安全套接层(SSL,Secure Socket Layer)日志,其中也包含 HTTPS 日志。

通过 Zeek-cut 分析 Zeek 日志 TSV(制表符分隔值)

默认情况下,Zeek 以 TSV(制表符分隔值)格式生成日志文件。在接下来的步骤中,你将通过 zeek-cut 命令行分析 TSV 格式的 Zeek 日志文件。

执行以下 cat 命令查看日志文件 dns.log。

cat dns.log

在以下输出中,你应该能看到多个字段,例如 ts、uid、id.orig_p、id.resp_h、id.resp_p、proto 等等。

在 Debian 12 上安装 Zeek 网络安全监控系统

接下来,执行以下命令解析 Zeek TSV 日志格式。借此,你将通过管道 "|" 将输出发送给 zeek-cut 命令。

在本示例中,你将提取日志文件中的三个字段,例如 id.orig_h、query 和 answers。

cat dns.log | zeek-cut id.orig_h query answers
cat dns.log | zeek-cut query answers id.orig_h

你应该能看到类似以下的输出:

在 Debian 12 上安装 Zeek 网络安全监控系统

你也可以像以下命令那样,使用重定向符号通过 zeek-cut 处理 TSV 日志文件。

zeek-cut id.orig_h query answers < dns.log

输出应该类似。

在 Debian 12 上安装 Zeek 网络安全监控系统

将 Zeek 日志文件配置为 JSON

在接下来的步骤中,你将配置 Zeek 以 JSON 格式生成输出日志文件。为此,你必须修改 local.zeek 文件,并将 zeek 脚本 tuning/json-logs 加载到你的 Zeek 安装中。

使用以下 nano 编辑器命令打开文件 /opt/zeek/share/zeek/site/local.zeek。

sudo nano /opt/zeek/share/zeek/site/local.zeek

将以下配置插入到文件末尾。

@load tuning/json-logs

完成后保存并关闭文件。

现在运行以下 zeekctl 命令,重新部署你的 Zeek 安装。

zeekctl deploy

你应该能看到 Zeek 正在重新安装。一旦该过程完成,Zeek 将生成 JSON 日志文件。

在 Debian 12 上安装 Zeek 网络安全监控系统

在分析 JSON 日志格式之前,先通过执行以下 apt 命令在你的机器上安装 jq。

sudo apt install jq -y

在 Debian 12 上安装 Zeek 网络安全监控系统

安装好 jq 后,切换到 /opt/zeek/logs/current/ 目录。/opt/zeek/logs/current 目录包含 JSON 格式的 Zeek 日志文件,它由 Zeek 自动生成。

cd /opt/zeek/logs/current/

运行以下 cat 命令查看日志文件 dns。

cat dns.log

JSON 输出将显示在你的终端屏幕上。

在 Debian 12 上安装 Zeek 网络安全监控系统

接下来,运行以下 jq 命令处理 JSON 日志 dns.log。

jq . dns.log

在 Debian 12 上安装 Zeek 网络安全监控系统

或者,你可以像下面这样通过 -c 选项显示紧凑格式。

jq . -c dns.log

在 Debian 12 上安装 Zeek 网络安全监控系统

最后,执行以下命令,从 JSON 文件 dns.log 中显示特定的键/值。

jq -c '[."id.orig_h", ."query", ."answers"]' dns.log

你应该能看到类似以下的输出。

在 Debian 12 上安装 Zeek 网络安全监控系统

结论

恭喜!你现在已经成功在 Debian 12 服务器上安装了 Zeek 网络监控工具。你安装了 Zeek,以集群模式运行了 Zeek,了解了部分 Zeek 日志文件,并学习了如何通过 zeek-cut 解析 TSV 格式的 Zeek 日志文件。此外,你还将 Zeek 日志改为了 JSON,并学习了如何通过 jq 命令行解析 Zeek 的 JSON 格式日志。