在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,我们能够将监控流量复制到多个客户机VM(Bro、Snort等)。

以下是示意图:

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

ESXI安装:
这里不是大问题,我假设您知道如何启动和运行。如果您不知道,请告诉我们,我会再写一篇博文。

Bro的网络先决条件:
需要向ESXi服务器发送两个接口。

  • ESXi管理接口
  • 网络镜像/分接头

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

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

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

ESXI中的网络配置:
在我们的案例中,服务器有3个NIC。
NIC0:未使用
NIC1:镜像
NIC2:管理

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

创建将接收镜像数据的虚拟交换机。
点击Networking -> Virtual Switches -> Add standard virtual switch

输入vSwitch的名称:“MirrorSwitch”
Uplink 1:选择将接收镜像流量的NIC。
Link Discover:NONE
Security:Promiscuous mode:Accept

设置镜像端口组以接收数据
点击Networking -> Port Groups -> Add Port Group

配置
名称:MirrorGroup
VirtualSwitch:MirrorSwitch
Promiscuous mode:Accept

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

  • LAN NIC(VM Network)
  • Mirror Group

安装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检查协议处理)
如果您的分接头已设置并发送数据,您将看到一些数据流动。

一般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博文!


评论

CypherBit
2017年8月3日 @ 9:06 am
很棒的内容!在Hyper-V上可以实现相同的效果吗?

BHIS
2017年8月3日 @ 9:18 am
我们想象,为什么不能?您只需要能够将虚拟和物理NIC设置为混杂模式。

Warrior
2017年8月9日 @ 10:51 am
喜欢这些猫!

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