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包。你将看到多个Zeek版本。

sudo apt search zeek
sudo apt-cache policy zeek

检查Zeek包版本信息

接下来,使用以下命令安装Zeek。在本例中,我们将安装Zeek LTS长期支持版本。

sudo apt install zeek

输入Y确认安装。

安装Zeek

安装完成后,通过~/.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组件分别安装在不同服务器上。用于测试目的,我们将在单台服务器上以集群模式配置和运行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

验证Zeek配置语法

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

zeekctl deploy

部署Zeek集群

你可以使用以下命令检查每个Zeek组件的状态。

zeekctl status

在以下输出中,你可以看到每个Zeek组件都在运行。这表明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日志

Zeek日志文件列表

现在进入/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解析DNS日志

你也可以使用以下方式使用zeek-cut命令处理TSV日志并获取类似的输出。

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

使用重定向解析Zeek日志

配置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部署期间看到以下输出。

部署Zeek JSON日志配置

接下来,运行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

使用jq解析JSON日志

如果你希望获得紧凑的输出,可以使用-c选项:

jq . -c dns.log

最后,你还可以使用以下jq命令指定要显示的JSON日志字段。

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

使用jq显示指定字段

总结

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