在ESXi 6.5上使用Ubuntu 16.04.2虚拟化Bro 2.51监控网络流量

本文详细介绍了如何在ESXi 6.5虚拟化环境中配置Ubuntu 16.04.2系统,安装并部署Bro 2.51网络监控工具,包括硬件要求、网络配置、PFRing模块集成及自动化启动设置。

如何在ESXi 6.5上的Ubuntu 16.04.2中使用虚拟化Bro 2.51监控网络流量

作者:Kent Ickler
注意: 本博文中引用的技术和工具可能已过时,不适用于当前情况。但本文仍可作为学习机会,并可能更新或集成到现代工具和技术中。

您之前可能听说过我们谈论Bro,这是一种用于网络监控和分析的IDS。在BHIS,我们已经多次安装Bro。现在是时候进行另一次构建,我认为这是一个分享示例方法的好时机。本文将分为两部分:为Bro安装配置ESXi,以及配置所述Bro安装。值得注意的是,在虚拟化环境中运行Bro有优缺点,并不适合所有人。

对我们来说,除其他外,它允许我们利用单个接入点进入ESXi主机,该主机可以运行多个IDS应用程序。通过使用混杂模式下的vswitch,我们能够将监控流量复制到多个客户虚拟机(Bro、Snort等)。

以下是示意图:

硬件

在VMware上运行Bro会增加所需的资源。此外,您需要能够支持运行虚拟化环境的硬件。预算网卡通常不适合此用途。至少,确保您的硬件有两个网络接口卡,其中一个可以进入监控模式。

ESXi安装

这里并不复杂,我假设您知道如何启动和运行。如果您不知道,请告诉我们,我会再写一篇博文。

Bro的网络先决条件

需要将两个接口发送到ESXi服务器。

  • ESXi管理接口
  • 网络镜像/Tap

网络管理接口可以根据需要包含其他VLAN,但您需要确保可以从配置的VLAN访问ESXi服务器及其客户机。

网络镜像/Tap可以通过交换机配置从另一个端口镜像数据,或通过传统网络Tap产生。未来可能会写关于镜像/Tap方法的博文!我们在办公室使用专用硬件和交换机配置,因为我们有多个流量监控点。对于您的第一次Bro安装,通常希望镜像WAN数据——即互联网连接和路由器之间的数据镜像。

Bro的ESXi先决条件

需要配置ESXi,以便您可以从第一个网络接口访问其管理GUI。必要时可以使用VLAN进行配置。第二个接口需要置于监控模式,以便ESXi操作系统不过滤进入接口的数据(通常,如果它没有理由接收此类流量,它会忽略MAC地址不匹配的数据包)。

ESXi中的网络配置

在我们的案例中,服务器有3个NIC。

  • NIC0:未使用
  • NIC1:镜像
  • NIC2:管理

登录ESXi Web GUI,点击网络 -> 物理NIC 确认您的NIC存在。确定哪些NIC将用于镜像流量。

创建将接收镜像数据的虚拟交换机。 点击网络 -> 虚拟交换机 -> 添加标准虚拟交换机

输入vSwitch的名称:“MirrorSwitch” 上行链路1:选择将接收镜像流量的NIC。 链路发现:无 安全:混杂模式:接受

设置镜像端口组以接收数据。 点击网络 -> 端口组 -> 添加端口组

配置 名称:MirrorGroup 虚拟交换机:MirrorSwitch 混杂模式:接受

创建您的新VM: 确保您的VM添加了两个NIC。

  • LAN NIC(VM网络)
  • 镜像组

安装Ubuntu 16.04

这里没有特别之处,当您登录控制台时继续。像往常一样,确保首先执行apt-get update和apt-get upgrade。哦,对于大多数配置,您需要sudo/root——不妨sudo -s。

为Bro准备Ubuntu

配置网络堆栈: nano /etc/network/interfaces 将管理接口移动到静态IP地址(好主意)。在我们的案例中,管理接口是ens192,镜像数据接口是ens160。我可以通过简单的“ip addr”(使用sudo)检查接口名称。

配置镜像NIC 让我们将镜像数据NIC置于混杂模式,启动它,并检查数据… 启用并“启动”镜像接口: $ ip link set ens160 promisc on $ ip link set ens160 up

使该NIC在启动时启用: nano /etc/rc.local(在“exit 0”之前添加) ip link set ens160 promisc on ip link set ens160 up

试一试(ctrl+c退出) tcpdump -i ens160(ens160是我们的镜像NIC,您可以添加-vv检查协议处理) 如果您的Tap已设置并发送数据,您将看到一些数据流动。

一般Bro安装

我们将大致遵循Bro 2.5.1的官方安装文档,可在Bro网站上找到。https://www.bro.org/sphinx/install/install.html。我们紧密遵循指南,除了将默认安装位置更改为/opt/bro而不是/usr/local/bro。

获取先决条件: sudo apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python-dev swig zlib1g-dev libgeoip-dev build-essential

安装PFRing PFRing是一个模块,它改变了从NIC接收的数据包由发送数据到Bro的组件处理的方式。您可以在没有它的情况下构建Bro安装,但它大大有助于减少镜像中的数据包丢失。有关PFRing的更多信息,请参见:http://www.ntop.org/products/packet-capture/pf_ring/

cd /opt git clone https://github.com/ntop/PF_RING.git cd PF_RING/kernel make sudo insmod ./pf_ring.ko cd ../userland make

cd PF_RING-6.2.0/userland/lib ./configure –prefix=/opt/PF_RING make install

cd ../libpcap ./configure –prefix=/opt/PF_RING make install

cd ../tcpdump-4.1.1 ./configure –prefix=/opt/PF_RING make install

cd ../../kernel make make install

使pf_ring模块在启动时加载: nano /etc/modules 添加“pf_ring”

Bro,是时候了!获取Bro代码,Bro

git clone –recursive git://git.bro.org/bro

执行操作

编译,注意我们添加了上面编译的可选PFRing模块,并更改了默认安装位置。 cd bro ./configure –with-pcap=/opt/PF_RING –prefix=/opt/bro/(–prefix更改安装位置) make make install

执行操作(这将需要一段时间):

配置运行时$PATH export PATH=/opt/bro/bin:$PATH

使该更改永久化 nano ~/.profile(将上述内容添加到路径中)

配置您的Bro! nano /opt/bro/etc/node.cfg

我们需要对配置文件进行一些更改,以告诉Bro使用PFRing模块并监听适当的NIC。如果您选择不使用PFRing,设置会更简单。

通过在每个行前放置井号#来注释掉整个[bro]部分。 然后取消注释[manager]、[proxy-1]和[worker-1]部分。 在[worker-1]中,将接口更改为匹配您的镜像接口,并添加lb_method=pf_ring以及lb_procs=5。

测试!

/opt/bro/bin/broctl 在BroControl提示符下 install(只需要执行一次) deploy status exit(别担心,bro仍在运行)

下次,您可以只使用“deploy”而不是“install”。下图显示在初始“install”已完成之后使用“deploy”。错过了那个截图;喵!

检查日志! tail -f /opt/bro/logs/current/conn.log(CTRL+C退出此操作)

自动启动

现在,让我们使其在启动时启动! nano /etc/rc.local 添加: /opt/bro/bin/broctl start

维护

添加维护功能以保持Bro愉快: crontab -e(必要时选择您的编辑器,然后在底部输入以下行) */5 * * * * /opt/bro/bin/broctl cron

重启并确保一切正常。

reboot -h now 登录,并测试您的bro日志以确保数据流动! 重启几分钟后,检查您的conn.log文件以确保您看到流量 tail -f /opt/bro/logs/current/conn.log 如果您在这里没有看到更新,或者文件丢失,请尝试重新部署bro实例,因为系统已完全加载。 /opt/bro/bin/broctl deploy

注意事项

因为我们在此内核中编译了PFRing,任何内核构建都可能导致PFRing模块无法加载。如果在编译后更新内核,您需要重新编译PFRing。

完成!

未来可能会有更多Bro博文!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计