云计算运维

Windows Server 2003 - Windows Server 2019 系统工具,Linux系统脚本,Mysql、Nginx、PHP、Redis、K8S、Seafile、Weblogic 、Jenkins、DNS、DHCP、FTP、IIS、Zookeeper、Rabbitmq、Oracle、Tomcat、Mavrn等服务搭建维护,请关注我.

使用Zeek和ELK创建企业监视


介绍
在本系列中,我将向您展示如何利用开源技术来构建自己的网络监视解决方案,使其足以部署在任何企业环境中!我们将使用的两种核心技术是Zeek(以前称为Bro)和ELK。

其中,Zeek是一个开放源代码的网络监视框架,该框架根据网络旁路监听的数据创建警报和事件,其本质是一个IDS。它在整个行业中都有使用,尤其是在网络异常领域,实际上,英国网络安全公司Darktrace使用Zeek作为其产品的关键组件。

该解决方案的计划是利用Zeek接入我们的网络,并将日志输入Elasticsearch,借助Elastic Security,我们可以对数据进行查询,使用Kibana构建一些漂亮的仪表板,甚至创建一些分析来自动执行某些检测。我们还将研究在某些设备上部署终端代理,并将这些日志也馈入ELK。

先决条件
为了跟进,您需要

能够运行Zeek和ELK的服务器
这里的例子是,我有一个运行ESXI的HP Proliant ML350e
服务器至少需要2个空闲网络端口
并且至少要有8GB内存和一个像样的处理器才能流畅运行
具有端口镜像功能的网络交换机

网络架构
下图显示了我网络的粗略指南。该图中的关键点是网络上的旁路监听(TAP)和镜像连接(Mirror)。为了充分利用Zeek,您需要旁路监听(TAP)交换机上连接到路由器的端口,主要是从LAN到Internet的连接。这样,我们将捕获从家庭网络到互联网的所有流量,这些流量来自连接到Wi-Fi的iPhone和充当DNS服务器的PiHole之类的设备。

VMware安装程序
您首先应该检查服务器上的物理NIC在ESXI中是否可见。转到网络> ESXi中的物理NIC,您应该在那里看到它们。

这两个物理连接都应连接到交换机,其中一个连接到镜像端口,另一个连接到常规交换机端口。您可以在交换机配置中设置镜像端口。我有一台Netgear GS110TP,其中端口2是进入路由器的端口,而端口6是空闲的,因此我将其配置为镜像端口。

您需要知道服务器上的哪些端口对应于哪些ESXi物理端口。例如,交换机上的端口6插入服务器上的Eth1,而Eth1在ESXi中称为vmnic1。因此vmnic1将成为镜像NIC。

接下来,我们需要创建一个将用于镜像数据的虚拟交换机。转到Networking > Virtual Switches > Add Standard Virtual Switch,然后输入以下所示的详细信息,将镜像NIC选择为“上行链路1”。确保将混杂模式(Promiscuous Mode)设置为“接受”。

现在,通过转至Networking> Port Groups > Add port group来添加端口组,并将刚刚创建的虚拟交换机分配给它。再次确保启用混杂模式。

现在您已经准备好创建虚拟机,我正在使用Ubuntu Server 18.04。创建虚拟机时,请确保添加两个网络适配器,包括用于镜像流量的适配器。

为Zeek做准备
安装Ubuntu后,请进行常规更新。

sudo apt-get update
sudo apt-get upgrade


现在检查Ubuntu是否检测到您的两个网络接口。Mirror端口很有可能会关闭。从下图可以看到,我的两个接口都被检测到,但是只有管理接口(ens160)启用了IP地址。

要解决此问题,我们首先将接口置于混杂模式,然后将其打开。

ip link set "your mirror int" promisc on
ip link set "your mirror int" up

现在,通过运行tcpdump来检查是否在镜像端口上接收到流量。

tcpdump -i "your mirror int"

如果一切正常,您应该看到镜像的流量流经接口,如下图所示。

安装Zeek
我们现在准备破解并安装Zeek。首先,我们需要安装所有必备组件。通过运行以下命令来执行此操作。

sudo apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python-dev swig zlib1g-dev

接下来,我们需要为Zeek创建工作目录,由于某些原因,Zeek在安装时默认不执行此操作。

sudo mkdir /opt/zeek
sudo chown -R zeek:zeek /opt/zeek
sudo chmod 740 /opt/zeek

接下来从GIT下载Zeek

git clone -–recursive https://github.com/zeek/zeek

解压缩压缩文件,然后进入Zeek下载目录。然后将我们先前创建的/opt/Zeek目录设置为安装目录。

cd /home/paul/zeek
./configure --prefix=/opt/zeek

现在我们准备安装Zeek,运行以下make命令,然后将其保留安装(这可能需要一些时间)

make
make install

接下来,我们需要添加PATH环境变量

export PATH=/usr/local/zeek/bin:$PATH

现在,我们需要向/opt/etc /目录中的node.cfg文件添加一些基本配置。取消注释manager,proxy和worker-1设置,并在worker-1设置中定义镜像接口。

现在,我们准备运行以下命令来部署Zeek

zeekctl deploy

如果一切顺利,我们应该不会出现任何错误,并且可以通过检查zeek的状态来检查一切是否正确启动。

zeekctl status

一切看起来都不错!因此,现在让我们去检查日志,将捕获的数据写入其中。日志位于目录/opt/zeek/logs/中。

“current”目录保存当天的日志,而前几天的日志则存档到其自己的目录中。还有一个针对不同数据类型的日志文件,例如DNS连接,HTTP连接等。

让我们检查DNS日志

tail -f dns.log

太棒了!因此,一切正常!

结束本文后,请密切注意本系列的第2部分,我们将部署ELK并将日志输入到ElasticSearch中,在那里我们可以构建一些漂亮的仪表板来显示捕获的数据。

  • 分享:
评论
还没有评论
    发表评论 说点什么