如何在Ubuntu16.04上安装Bro

来自菜鸟教程
跳转至:导航、​搜索

介绍

Bro 是一个开源的网络分析框架和安全监控应用程序。 它将 OSSECosquery 的一些最佳功能整合到一个不错的软件包中。

Bro 可以执行基于签名和基于行为的分析和检测,但它所做的大部分工作是基于行为的分析和检测。 Bro 的一长串功能包括以下功能:

  • 检测针对 SSH 和 FTP 等网络服务的暴力攻击
  • 执行 HTTP 流量监控和分析
  • 检测已安装软件的变化
  • 执行 SSL/TLS 证书验证
  • 检测 SQL 注入攻击
  • 对所有文件执行文件完整性监控
  • 通过电子邮件发送活动、摘要和崩溃报告和警报
  • 将 IP 地址定位到城市级别
  • 以独立或分布式模式运行

Bro 可以从源代码或通过包管理器安装。 从源代码安装更复杂,但如果地理定位库在编译之前安装,它是唯一支持 IP 地理定位的方法。

安装 Bro 使系统可以使用 brobroctl 等附加命令。 bro 可用于分析跟踪文件,也可用于实时流量分析; broctl 是交互式 shell 和命令行实用程序,用于管理独立或分布式 Bro 安装。

在本文中,您将以独立模式在 Ubuntu 16.04 上从源代码安装 Bro。

先决条件

要完成本文,您需要具备以下条件:

  • 具有防火墙和非 root 用户帐户的 Ubuntu 16.04 服务器,使用此 Ubuntu 16.04 初始设置指南配置了 sudo 权限。 因为我们将执行一些需要额外 RAM 的任务,所以您需要启动一个至少有 1 GB 内存的服务器。
  • 使用 this Postfix on Ubuntu 16.04 guide 在服务器上安装 Postfix 作为仅发送邮件传输代理 (MTA)。 必须安装像 Postfix 这样的 MTA,Bro 才能发送电子邮件警报。 它会在没有人的情况下运行,但不会发送电子邮件。

第 1 步 — 安装依赖项

在从源代码安装 Bro 之前,您需要安装其依赖项。

首先,更新包数据库。 在安装包之前不这样做可能会导致包管理器错误。

sudo apt-get update

Bro 的依赖项包括许多库和工具,例如 LibpcapOpenSSLBIND8。 BroControl 还需要 Python 2.6 或更高版本。 因为我们是从源代码构建 Bro,所以我们需要一些额外的依赖项,例如 CMakeSWIGBison 和 C/C++ 编译器。

您可以一次安装所有必要的依赖项:

sudo apt-get install bison cmake flex g++ gdb make libmagic-dev libpcap-dev libgeoip-dev libssl-dev python-dev swig2.0 zlib1g-dev

安装完成后,下一步是下载 Bro 将用于 IP 地理定位的数据库。

第 2 步 — 下载 GeoIP 数据库

在这里,我们将下载一个 GeoIP 数据库,Bro 将依赖该数据库进行 IP 地址地理定位。 我们将下载两个包含 IPv4 和 IPv6 数据库的压缩文件,解压缩它们,然后将它们移动到 /usr/share/GeoIP 目录中。

注意:我们正在从 MaxMind 下载 免费的旧版 GeoIP 数据库较新的 IP 数据库格式 已经发布,但 Bro 尚不支持它。


下载 IPv4 和 IPv6 数据库。

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCityv6-beta/GeoLiteCityv6.dat.gz

解压缩这两个文件,这将在您的工作目录中放置两个名为 GeoLiteCity.datGeoLiteCityv6.dat 的文件。

gzip -d GeoLiteCity.dat.gz
gzip -d GeoLiteCityv6.dat.gz

然后进入适当的目录,在此过程中重命名它们。

sudo mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat
sudo mv GeoLiteCityv6.dat /usr/share/GeoIP/GeoIPCityv6.dat

有了 GeoIP 数据库,我们可以在下一步安装 Bro 本身。

第 3 步 — 从源代码安装 Bro

要从源代码安装 Bro,我们首先必须从 GitHub 克隆存储库。

Git 已默认安装在 Ubuntu 上,因此您可以使用以下命令克隆存储库。 这些文件将被放入名为 bro 的目录中。

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

切换到项目的目录。

cd bro

运行 Bro 的配置,不到一分钟。

./configure

然后使用 make 构建程序。 这可能需要 20 分钟,具体取决于您的服务器。

make

在运行时,您会在大多数输出行的开头看到完成百分比。

完成后,安装 Bro,这将花费不到一分钟的时间。

sudo make install

Bro将安装在/usr/local/bro目录中。

现在您需要将 /usr/local/bro/bin 目录添加到您的 $PATH 中。 为了确保它在全球范围内可用,最好的方法是在 /etc/profile.d 目录下的文件中指定路径。 我们称该文件为 3rd-party.sh

使用您喜欢的文本编辑器创建并打开 3rd-party.sh

sudo nano /etc/profile.d/3rd-party.sh

将以下行复制并粘贴到其中。 第一行是解释性注释,第二行将确保将 /usr/local/bro/bin 添加到系统上任何用户的路径中。

/etc/profile.d/3rd-party.sh

# Expand PATH to include the path to Bro's binaries

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

保存并关闭文件,然后使用 source 激活更改。

source /etc/profile.d/3rd-party.sh

但是,来自旧设置的伪影往往会持续存在,因此您还可以注销并重新登录以确保您的路径正确加载。

现在 Bro 已安装,我们需要对其进行一些配置更改以使其正常运行。

第 4 步 — 配置兄弟

在这一步中,我们将自定义一些文件以确保 Bro 正常工作。 所有文件都位于/usr/local/bro/etc目录下,分别是:

  • node.cfg,用于配置监控哪些节点。
  • networks.cfg,其中包含节点本地的 CIDR 表示法 的网络列表。
  • broctl.cfg,这是用于邮件、日志记录和其他设置的全局 BroControl 配置文件。

让我们看一下每个文件中需要修改的内容。

配置要监控的节点

要配置 Bro 将监控的节点,我们需要修改 node.cfg 文件。

开箱即用,Bro 配置为在独立模式下运行。 因为这是一个独立安装,所以您不需要修改此文件,但最好检查一下值是否正确。

打开文件进行编辑。

sudo nano /usr/local/bro/etc/node.cfg

bro 部分下,查找 interface 参数。 默认情况下是 etho0,这应该与 Ubuntu 16.04 服务器的公共接口匹配。 如果不是,请确保更新它。

/usr/local/bro/etc/node.cfg

[bro]
type=standalone
host=localhost
interface=eth0

完成后保存并关闭文件。 接下来,我们将配置节点所属的专用网络。

配置节点的专用网络

networks.cfg 文件用于配置节点所属的 IP 网络(即 您希望监控的任何服务器接口的 IP 网络)。

首先,打开文件。

sudo nano /usr/local/bro/etc/networks.cfg

默认情况下,该文件附带三个已配置的私有 IP 块,作为您需要如何指定的示例。

/usr/local/bro/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

删除现有的三个条目,然后添加您自己的条目。 您可以使用 ip addr show 检查服务器接口的网络地址。 networks.cfg 的最终版本应类似于以下内容,但您的网络地址替换为:

示例 /usr/local/bro/etc/networks.cfg

203.0.113.0/24        Public IP space
198.51.100.0/24         Private IP space

完成编辑后保存并关闭文件。 接下来我们将配置邮件和日志记录设置。

配置邮件和日志设置

broctl.cfg 文件用于配置 BroControl 如何处理其电子邮件和日志记录职责。 大多数默认值不需要更改。 您只需要指定目标电子邮件地址。

打开文件进行编辑。

sudo nano /usr/local/bro/etc/broctl.cfg

在文件顶部的 Mail Options 部分下,查找 MailTo 参数并将其更改为您控制的有效电子邮件地址。 所有 Bro 电子邮件警报都将发送到该地址。

/usr/local/bro/etc/broctl.cfg

. . .
# Mail Options

# Recipient address for all emails sent out by Bro and BroControl.
MailTo = sammy@example.com
. . .

完成编辑后保存并关闭文件。

这就是 Bro 需要的所有配置,所以现在您可以使用 BroControl 来启动和管理 Bro。

第 5 步 — 使用 BroControl 管理 Bro

BroControl 用于管理 Bro 安装 — 启动和停止服务、部署 Bro 以及执行其他管理任务。 它既是一个命令行工具,也是一个交互式 shell。

如果使用 sudo /usr/local/bro/bin/broctl 调用 broctl,它将启动交互式 shell:

OutputWelcome to BroControl 1.5-21

Type "help" for help.

[BroControl] >

您可以使用 exit 命令退出交互式 shell。

在 shell 中,您可以运行任何有效的 Bro 命令。 相同的命令也可以直接从命令行运行,而无需调用 shell。 在命令行运行命令通常是一种更有用的方法,因为它允许您将 broctl 命令的输出通过管道传输到标准 Linux 命令中。 对于这一步的其余部分,我们将在命令行调用 broctl 命令。

首先,使用 broctl deploy 启动 Bro,并确保 BroControl 和 Bro 所需的文件根据步骤 4 中的配置更新。

sudo /usr/local/bro/bin/broctl deploy

每当对配置文件或脚本进行更改时,您还应该运行此命令。

注意:如果Bro没有启动,命令输出会提示原因。 例如,即使您安装了 MTA,您也可能会看到以下错误消息:

Outputbro not running (was crashed)
Error: error occurred while trying to send mail: send-mail: SENDMAIL-NOTFOUND not found
starting ...
starting bro ...

解决方案是编辑 BroControl 配置文件 /usr/local/bro/etc/broctl.cfg 并在 Mail Options 部分的末尾添加 Sendmail 条目:

/usr/local/bro/etc/broctl.cfg

. . .
# Added for Sendmail
SendMail = /usr/sbin/sendmail

###############################################
# Logging Options
. . .

然后用 sudo /usr/local/bro/bin/broctl deploy 重新部署 Bro。


您可以使用 status 命令检查 Bro 的状态。

sudo /usr/local/bro/bin/broctl status

输出将如下所示。 除了running,状态还可以是crashedstopped

OutputName         Type       Host          Status    Pid    Started
bro          standalone localhost     running   6807   12 Apr 05:42:50

如果需要重启Bro,可以使用sudo /usr/local/bro/bin/broctl restart

注意broctl restartbroctl deploy不一样。 在更改配置设置和/或修改脚本后调用后者; 当您想要停止并重新启动整个服务时调用前者。


接下来,让 Bro 服务更健壮,设置 一个 cron 作业

第 6 步 — 为 Bro 配置 cron

Bro 没有 Systemd 服务描述符文件,但它带有一个 cron 脚本,如果启用,它将在 Bro 崩溃时重新启动并执行其他任务,例如检查是否有足够的磁盘空间和删除过期的日志文件。

Bro 的 cron 命令是开箱即用的,但您需要安装一个实际触发脚本的 cron 作业。 您需要首先在 /etc/cron.d 中为 Bro 添加一个 cron 包文件。 按照惯例,我们将该文件称为 bro,因此创建并打开它。

sudo nano /etc/cron.d/bro

接下来显示复制和粘贴到文件中的条目。 它将每五分钟运行一次 Bro 的 cron。 如果它检测到Bro已经崩溃,它将重新启动它。

/etc/cron.d/bro

*/5 * * * * root /usr/local/bro/bin/broctl cron

如果您希望它更频繁地运行,您可以在上面的命令中更改 5

完成后保存并关闭文件。

激活 cron 作业后,您应该会收到一封电子邮件,说明已在 /usr/local/bro/logs/stats 创建了统计文件目录。 请注意,兄弟必须实际崩溃(即 被毫不客气地停止)以使其正常工作。 如果您使用 BroControl 的 stop 优雅地停止 Bro 自己,它将无法正常工作。

要测试它是否有效,您必须重新启动服务器或终止 Bro 进程之一。 如果你走重启路线,Bro 将在服务器完成重启过程五分钟后重启。 要使用另一种方法,首先获取 Bro 的一个进程 ID。

ps aux | grep bro

然后杀死其中一个进程。

sudo kill -9 process_id

如果您随后使用以下命令检查状态:

sudo /usr/local/bro/bin/broctl status

输出将显示它已经崩溃。

OutputName         Type       Host          Status    Pid    Started
bro          standalone localhost     crashed

几分钟后调用相同的命令,输出将显示它再次运行。

在 Bro 充分工作的情况下,您应该大约每小时都会在界面上收到有关有趣活动的摘要电子邮件。 如果它崩溃并重新启动,您将收到一封电子邮件,说明它在崩溃后启动。 在下一步也是最后一步,让我们看一下其他几个主要的 Bro 实用程序。

第 7 步 — 使用 brobro-cut 和 Bro 策略脚本

brobro-cut 是 Bro 附带的另外两个主要命令。 使用 bro,您可以捕获实时流量并分析使用其他工具捕获的跟踪文件。 bro-cut 是一个自定义工具,用于从 Bro 日志中读取和获取数据。

用于使用 bro 捕获实时流量的命令采用 sudo /usr/local/bro/bin/bro -i eth0 file... 格式。 至少,您必须指定它应该从哪个接口捕获流量。file... 指的是定义 Bro 处理内容的策略脚本。 您不必指定一个或多个脚本,因此该命令也可以类似于 sudo /usr/local/bro/bin/bro -i eth0

注意:Bro用来运行的脚本位于/usr/local/bro/share/bro目录下。 特定于站点的脚本位于 /usr/local/bro/share/bro/site/ 目录中。 确保不要自定义此目录中除/usr/local/bro/share/bro/site/local.bro以外的文件,因为升级或重新安装Bro时您的更改将被覆盖。


因为 bro 从单个捕获会话创建许多文件到工作目录,所以最好在仅为该捕获会话创建的目录中调用 bro 捕获命令。 例如,以下显示了在实时流量捕获会话期间创建的文件的长列表 (ls -l)。

Outputtotal 152
-rw-r--r-- 1 root root   277 Apr 14 09:20 capture_loss.log
-rw-r--r-- 1 root root  4711 Apr 14 09:20 conn.log
-rw-r--r-- 1 root root  2614 Apr 14 04:49 dns.log
-rw-r--r-- 1 root root 25168 Apr 14 09:20 loaded_scripts.log
-rw-r--r-- 1 root root   253 Apr 14 09:20 packet_filter.log
-rw-r--r-- 1 root root   686 Apr 14 09:20 reporter.log
-rw-r--r-- 1 root root   708 Apr 14 04:49 ssh.log
-rw-r--r-- 1 root root   793 Apr 14 09:20 stats.log
-rw-r--r-- 1 root root   373 Apr 14 09:20 weird.log

您现在可以尝试运行其中一个捕获命令。 让它运行一会儿后,使用 CTRL+C 终止 bro 捕获会话。 您可以使用 cat ssh.log | /usr/local/bro/bin/bro-cut -C -d 之类的命令通过 bro-cut 读取每个。

结论

本文向您介绍了 Bro 以及如何从源代码以独立方式安装它。 您还学习了如何从 MaxMind 安装 IPv4 和 IPv6 GeoIP 数据库,Bro 使用该数据库将 IP 地址定位到城市级别。 对于这种独立安装模式,您还学习了如何修改其配置文件的相关方面,使用 broctrl 管理它,使用 bro 捕获实时流量和 bro-cut 输出并读取生成的日志文件。

您可以从 项目的文档站点 访问有关如何使用 Bro 的更多信息。