按照本教程学习如何在 Ubuntu 20.04 上安装 Zeek。 Zeek,前身为 Bro IDS,是全球领先的被动开源网络安全监控工具。
Zeek 不是主动安全设备,如防火墙或入侵防御系统。 相反,Zeek 位于一个“传感器”上,它是一个硬件、软件、虚拟或云平台,可以安静地、不引人注目地观察网络流量。 Zeek 解释其所见并创建紧凑、高保真事务日志、文件内容和完全自定义的输出,适用于在磁盘上或在对分析人员更友好的工具(如安全和信息事件管理 (SIEM) 系统)中进行手动审查。
在 Ubuntu 20.04 上安装 Zeek
那么如何在 Ubuntu 20.04 上安装 Zeek? 进行如下操作;
Zeek 可以通过从源代码构建它或直接通过 Zeek APT 存储库来安装。
在本教程中,我们将选择后者。
在 Ubuntu 20.04 上安装 Zeek
从 Zeek APT 存储库在 Ubuntu 20.04 上安装 Zeek;
将 Zeek 存储库添加到 Ubuntu 20.04:
echo 'deb https://download.opensuse.org/repositories/security:/zeek/xUbuntu_20.04/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.list
curl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_20.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null
运行系统更新;
apt update
在撰写本文时,Zeek 4.0.1 是当前的稳定版本,通过运行以下命令确认相同;
apt-cache policy zeek
zeek: Installed: (none) Candidate: 4.0.1-0 Version table: 4.0.1-0 500 500 https://download.opensuse.org/repositories/security:/zeek/xUbuntu_20.04 Packages
然后,您可以通过运行以下命令来安装 Zeek;
apt install zeek
在安装过程中,系统会提示您进行一些 Postfix 设置,选择 Internet 站点并输入您的系统 FQDN。
在 Ubuntu 20.04 上配置 Zeek
配置运行时环境
默认情况下,Zeek 安装在 /opt/zeek
.
首先,将 Zeek 二进制路径添加到 PATH;
echo " PATH=$PATH:/opt/zeek/bin" >> ~/.bashrc
source ~/.bashrc
定义要监控的本地网络
接下来,您需要告诉 Zeek 要监控哪些本地网络。 这可以在 /opt/zeek/etc/networks.cfg
配置文件。
定义的默认网络是 10.0.0.0/8、172.16.0.0/16、192.168.0.0/16. 所以,在我们的例子中,我们想要监控的网络是 192.168.59.0/24.
因此;
vim /opt/zeek/etc/networks.cfg
# List of local networks in CIDR notation, optionally followed by a # descriptive tag. # For example, "10.0.0.0/8" or "fe80::/64" are valid prefixes. #10.0.0.0/8 Private IP space #172.16.0.0/12 Private IP space #192.168.0.0/16 Private IP space 192.168.59.0/24 Kifarunix-demo IP space
Save 文件并在您更改网络配置后退出。
配置 Zeek 集群
Zeek 可以在独立模式或集群设置中运行。 要定义是在集群中运行还是在独立设置中运行,您需要编辑 /opt/zeek/etc/node.cfg
配置文件。
- 对于独立配置,此文件中必须仅定义一个 Zeek 节点。
- 对于集群配置,至少必须有一个管理节点、一个代理节点和一个或多个工作节点。
根据 Zeek 快速入门指南,使用 Zeek 的独立/单进程模式不适合具有大量流量的设置。 在这些情况下,人们几乎肯定会想要使用 Zeek 集群,即使在单个系统上也是如此。
因此,我们将看到如何设置 Zeek 集群。 您可以查看 Zeek 集群架构。
默认的 Zeek 节点配置是这样的;
cat /opt/zeek/etc/node.cfg
# Example ZeekControl node configuration. # # This example has a standalone node ready to go except for possibly changing # the sniffing interface. # This is a complete standalone configuration. Most likely you will # only need to change the interface. [zeek] type=standalone host=localhost interface=eth0 ## Below is an example clustered configuration. If you use this, ## remove the [zeek] node above. #[logger-1] #type=logger #host=localhost # #[manager] #type=manager #host=localhost # #[proxy-1] #type=proxy #host=localhost # #[worker-1] #type=worker #host=localhost #interface=eth0 # #[worker-2] #type=worker #host=localhost #interface=eth0
由于我们在此设置中运行单节点 Zeek 集群,因此注释掉 Zeek 独立配置下的部分 [zeek]
并为您的 Zeek 定义主机地址 logger
, manager
, proxy
和 worker
.
那么这些组件是什么?
- 记录器:它是一个可选的 Zeek 进程,它从集群中的其余节点接收日志消息。 它可以代替管理器使用,以减少管理器本身的负载。
- 经理:如果未定义记录器,则从 Zeek 集群中的其余节点接收日志消息和通知。
- 代理: 是一个 Zeek 进程,可用于卸载数据存储或任何任意工作负载。 一个集群可能包含多个代理节点。
- 工人: 是 Zeek 进程,它嗅探网络流量并对重组的流量流进行协议分析。
下面是我们的单节点 Zeek 集群配置设置;
cat /opt/zeek/etc/node.cfg
# Example ZeekControl node configuration. # # This example has a standalone node ready to go except for possibly changing # the sniffing interface. # This is a complete standalone configuration. Most likely you will # only need to change the interface. #[zeek] #type=standalone #host=localhost #interface=eth0 ## Below is an example clustered configuration. If you use this, ## remove the [zeek] node above. [kifarunix-demo-zeek-logger] type=logger host=192.168.59.16 # [kifarunix-demo-zeek-manager] type=manager host=192.168.59.16 # [kifarunix-demo-zeek-proxy] type=proxy host=192.168.59.16 # [kifarunix-demo-zeek-worker] type=worker host=192.168.59.16 interface=enp0s8 # [kifarunix-demo-worker-lo] type=worker host=localhost interface=lo
查看 Global ZeekControl 配置文件
接下来,您需要查看全局 ZeekControl 配置文件, /opt/zeek/etc/zeekctl.cfg
.
配置文件中的大多数默认值就足够了。 您可能要在此处进行或更新的唯一更改是 Zeek 和 ZeekControl 发送的所有电子邮件的收件人地址(如果您有任何设置)。 默认值为 [email protected]
验证 Zeek 配置
在安装和启动 Zeek 之前,您需要验证配置文件;
zeekctl check
Hint: Run the zeekctl "deploy" command to get started. kifarunix-demo-zeek-logger scripts are ok. kifarunix-demo-zeek-manager scripts are ok. kifarunix-demo-zeek-proxy scripts are ok. kifarunix-demo-zeek-worker scripts are ok. kifarunix-demo-worker-lo scripts are ok.
部署 ZeekControl 配置
如果一切正常,安装 ZeekControl 配置并启动 Zeek 实例;
zeekctl deploy
checking configurations ... installing ... creating policy directories ... installing site policies ... generating cluster-layout.zeek ... generating local-networks.zeek ... generating zeekctl-config.zeek ... generating zeekctl-config.sh ... stopping ... stopping workers ... stopping proxy ... stopping manager ... stopping logger ... starting ... starting logger ... starting manager ... starting proxy ... starting workers ...
查看 Zeek 实例的状态
您可以通过执行来检查 Zeek 实例的状态;
zeekctl status
Name Type Host Status Pid Started kifarunix-demo-zeek-logger logger 192.168.59.16 running 17911 17 May 03:52:41 kifarunix-demo-zeek-manager manager 192.168.59.16 running 17962 17 May 03:52:43 kifarunix-demo-zeek-proxy proxy 192.168.59.16 running 18011 17 May 03:52:45 kifarunix-demo-zeek-worker worker 192.168.59.16 running 18081 17 May 03:52:48 kifarunix-demo-worker-lo worker localhost running 18082 17 May 03:52:48
检查 Zeek 日志
Zeek 将根据默认策略开始分析流量并将日志结果写入 /opt/zeek/logs/current
目录。
ls -1 /opt/zeek/logs/current/
broker.log capture_loss.log cluster.log conn.log dhcp.log known_services.log loaded_scripts.log notice.log packet_filter.log reporter.log stats.log stderr.log stdout.log weird.log
一些值得明确提及的日志:
conn.log
:包含在线上看到的每个连接的条目,具有基本属性,例如时间和持续时间、发起者和响应者 IP 地址、服务和端口、有效负载大小等等。 该日志提供了网络活动的全面记录。notice.log
:标识 Zeek 认为可能有趣、奇怪或不好的特定活动。 此类活动称为“通知”。known_services.log
:此日志文件包含在本地网络上检测到的服务,这些服务已知被网络上的客户端主动使用。 它有助于枚举在本地网络上观察到的所有服务,以及它们是否都是有意为网络管理员所知的。weird.log
:包含异常或异常活动,可能表明连接格式错误、流量不符合特定协议、硬件/服务出现故障或配置错误,甚至攻击者试图避开/混淆传感器。- (协议).log 例如(dns.log、dhcp.log、http.log、snmp.log):包含在每个相应协议中找到的数据包的信息。
样本 连接日志 日志;
tail /opt/zeek/logs/current/conn.log
1621277534.729878 CY3bmP18QlSIvSFxej 192.168.59.16 8132 192.168.59.16 80 tcp - - - - RSTRH T T 0 ^r 00 1 40 - 1621277534.729881 CGVzYD19RQxUT0Vzq 192.168.59.16 8133 192.168.59.16 80 tcp - - - - S0 T T 0 S 140 0 0 - 1621277534.729883 C8jp1t2D0NHoUeOiF1 192.168.59.16 8133 192.168.59.16 80 tcp - - - - RSTRH T T 0 ^r 00 1 40 - 1621277564.065743 CduRKb4f4bLM38gakl 192.168.59.16 47762 192.168.59.16 58282 tcp - - - - OTH T T 0 Ccc00 0 0 - 1621277564.065833 CRgk0dMeT9AeMyROd 192.168.59.16 47762 192.168.59.16 58288 tcp - - - - OTH T T 0 Ccc00 0 0 - 1621277564.215195 Cg09q71OaurnFkIdRe 192.168.59.16 38834 192.168.59.16 47761 tcp - - - - OTH T T 0 Cc 00 0 0 - 1621277566.725573 CG17M71tH9TV52bBe7 192.168.59.16 38836 192.168.59.16 47761 tcp - - - - OTH T T 0 Cc 00 0 0 - 1621277574.895432 C2aJF016ENvM3nF6da 192.168.59.16 34700 192.168.59.16 80 tcp - - - - OTH T T 0 C 00 0 0 - 1621277570.315909 CQp7gp31EAsSvqgIn1 192.168.59.16 38846 192.168.59.16 47761 tcp - - - - OTH T T 0 Cc 00 0 0 - 1621277574.895458 CIP6UASndf9AtymV2 192.168.59.16 34700 192.168.59.16 80 tcp - - - - OTH T T 0 ^cC00 0 0 -
字段和类型是;
#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig local_resp missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents #types time string addr port addr port enum string interval count count string bool bool count string count count count count set[string]
检查 Zeek 节点进程
您可以通过执行来检查每个节点上运行的进程;
zeekctl ps.zeek <node>
例如,检查Zeek管理节点上的进程;
zeekctl ps.zeek kifarunix-demo-zeek-manager
USER PID PPID %CPU %MEM VSZ RSS TT S STARTED TIME COMMAND >>> 192.168.59.16 (-) root 17911 17905 0.1 4.3 821252 88788 ? S 03:52:41 00:00:02 zeek (+) root 17962 17956 0.0 4.3 642664 89200 ? S 03:52:43 00:00:01 zeek (-) root 18011 18005 0.0 4.2 640972 87516 ? S 03:52:45 00:00:01 zeek (-) root 18081 18069 0.1 10.7 772672 219204 ? S 03:52:47 00:00:03 zeek (-) root 18082 18071 0.1 10.7 772148 218668 ? S 03:52:47 00:00:03 zeek
这让我们结束了有关如何在 Ubuntu 20.04 上安装 Zeek 的教程。 欢迎发表评论。
参考
安装 Zeek
在 Debian 10 上安装和配置 AIDE
安装 ModSecurity 3 Apache 在 Docker 容器中
在 Ubuntu 18.04 上安装和设置 Suricata