如何在 Debian 12 上安装 Zeek 网络安全监控工具
Zeek(以前称为 Bro)是一个免费的开源网络安全监控平台。它是一款功能强大的被动网络流量分析器,用于调查可疑或恶意活动。 Zeek 可用作网络安全监视器 (NSM),并支持从安全域到性能测量和故障排除的广泛流量分析。
在本指南中,我将向您展示如何在 Debian 12 服务器上逐步安装 Zeek 网络安全监控。您将安装 Zeek,并在集群模式下配置 Zeek,然后您将学习如何通过 zeek-cut 命令行解析 Zeek TSV 日志格式。此外,您还将学习如何通过 jq 命令行将 Zeek 日志输出设置为 JSON 以及解析器 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
安装 Zeek
添加 Zeek 存储库后,您现在可以在 Debian 计算机上开始安装 Zeek。在接下来的步骤中,您将安装 Zeek 并将 Zeek 安装目录添加到系统 PATH 中。
执行下面的 apt install 命令将 Zeek 安装到您的 Debian 机器上。 Zeek 有多个版本可用,例如最新版本、LTS 和 nightly。在此示例中,您将安装zeek-lts。
sudo apt install zeek-lts
输入 y 继续安装。
zeek安装后,默认为目标目录/opt/zeek。执行以下命令通过~/.bashrc文件将/opt/zeek/bin目录添加到系统PATH中。
echo "export PATH=$PATH:/opt/zeek/bin" >> ~/.bashrc
接下来,重新加载 ~/.bashrc 文件并使用以下命令检查系统 PATH 变量。您应该在系统路径中看到 /opt/zeek/bin 目录。
source ~/.bashrc
echo $PATH
最后,通过执行以下命令来验证 Zeek。这样,您将检查 Zeek 二进制文件的位置、检查 Zeek 版本并打印 Zeek 帮助消息。
which zeek
zeek --version
zeek --help
在以下输出中,您应该看到 zeek 5.0 安装在 /usr/zeek/bin/zeek 中。另外,您还应该选择 Zeek 命令的选项。
配置 Zeek
现在 Zeek 已安装,下一步是配置 Zeek 安装。您可以在多种模式下运行Zeek,例如命令行模式、独立模式和集群模式。
在以下示例中,您将了解如何使用单个服务器以集群模式运行 Zeek。
在配置 Zeek 之前,请执行以下命令检查您的网络接口和 IP 地址。
ip a
您应该列出系统上的可用接口以及服务器 IP 地址的详细信息,如下所示:
使用以下 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 以独立模式运行。添加 # 以禁用 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 脚本的每个组件都正常:
接下来,运行 deploy 命令在您的计算机上启动并运行 Zeek。 deploy 命令相当于 Zeek 上的 install 和 start 命令。
deploy
您应该看到 Zeek 集群的每个组件正在启动:
最后,通过执行下面的状态命令来验证 Zeek 集群的每个组件。
status
如果安装成功,您应该看到每个 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 生成的多个日志文件。您可能会发现系统上缺少一些日志文件,因为目标服务不可用。
以下是您必须了解的一些重要日志文件:
- conn.log:TCP 和 UDP 的连接日志。此日志文件提供最有用的信息,例如时间戳、连接持续时间、服务等等。
- dns.log:DNS(域名系统)日志。
- http.log:超文本传输协议 (HTTP) 日志。
- ssh.log:用于跟踪 SSH 连接的 Secure Shell (SSH) 日志。
- ssl.log:安全套接字层 (SSL) 日志,还包含 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 等。
接下来,执行以下命令来解析Zeek TSV日志格式。这样,您将通过管道“|”发送输出到 zeek-cut 命令。
在此示例中,您将获得日志文件中的三个字段,例如id.orig_h、查询和答案。
cat dns.log | zeek-cut id.orig_h query answers
cat dns.log | zeek-cut query answers id.orig_h
您应该看到类似的输出,如下所示:
您还可以使用重定向符号通过 zeek-cut 处理 TSV 日志文件,如以下命令。
zeek-cut id.orig_h query answers < dns.log
输出应该类似。
将 Zeek 日志文件配置为 JSON
在以下步骤中,您将配置 Zeek 以生成 JSON 格式的输出日志文件。为此,您必须修改 local.zeek 文件并将 zeek 脚本 adjustment/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 日志文件。
在分析 JSON 日志格式之前,请通过执行以下 apt 命令将 jq 安装到您的计算机上。
sudo apt install jq -y
安装 jq 后,移至 /opt/zeek/logs/current/ 目录。目录/opt/zeek/logs/current包含JSON格式的zeek日志文件,它是由zeek自动生成的。
cd /opt/zeek/logs/current/
运行下面的 cat 命令来查看日志文件 dns.log。
cat dns.log
JSON 输出将显示在您的终端屏幕上。
接下来,运行下面的 jq 命令来处理 JSON 日志 dns.log。
jq . dns.log
或者您可以通过 -c 选项显示紧凑格式,如下所示。
jq . -c dns.log
最后,执行以下命令以显示 JSON 文件 dns.log 中的特定键/值。
jq -c '[."id.orig_h", ."query", ."answers"]' dns.log
您应该看到如下所示的输出。
结论
恭喜!您现在已经在 Debian 12 服务器上成功安装了 Zeek 网络监控工具。您已经安装了 Zeek,在集群模式下运行了 Zeek,了解了一些 zeek 日志文件,还了解了如何通过 zeek-cut 解析 TSV 格式的 zeek 日志文件。此外,您还将 zeek 日志更改为 JSON,并学习了如何通过 jq 命令行解析 Zeek 日志 JSON 格式。