前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 16.04上安装Bro

如何在Ubuntu 16.04上安装Bro

原创
作者头像
GeekZ
发布2018-08-01 16:02:16
1.1K0
发布2018-08-01 16:02:16
举报

介绍

Bro是一个开源网络分析框架和安全监控应用程序。它将OSSEC和osquery的一些最佳功能集成到一个包中。

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

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

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

安装Bro可以为系统提供诸如brobroctl之类的附加命令。bro可用于分析跟踪文件以及实时流量分析;broctl是用于管理独立或分布式Bro安装的交互式shell和命令行实用程序。

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

准备

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

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

第一步 - 安装依赖项

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

首先,更新包数据库。在安装软件包之前未能执行此操作可能导致软件包管理器错误。

代码语言:txt
复制
$ sudo apt-get update

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

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

代码语言:txt
复制
$ 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地理定位的数据库。

第二步 - 下载GeoIP数据库

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

下载IPv4和IPv6数据库。

代码语言:txt
复制
$ 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的文件。

代码语言:txt
复制
$ gzip -d GeoLiteCity.dat.gz
$ gzip -d GeoLiteCityv6.dat.gz

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

代码语言:txt
复制
$ sudo mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat
$ sudo mv GeoLiteCityv6.dat /usr/share/GeoIP/GeoIPCityv6.dat

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

第三步 - 从源代码安装Bro

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

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

代码语言:txt
复制
$ git clone --recursive git://git.bro.org/bro

切换到项目的目录。

代码语言:txt
复制
$ cd bro

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

代码语言:txt
复制
$ ./configure

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

代码语言:txt
复制
$ make

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

完成后,安装Bro,这应该不到一分钟。

代码语言:txt
复制
$ sudo make install

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

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

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

代码语言:txt
复制
$ sudo nano /etc/profile.d/3rd-party.sh

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

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

代码语言:txt
复制
# Expand PATH to include the path to Bro's binaries
export PATH=$PATH:/usr/local/bro/bin

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

代码语言:txt
复制
$ source /etc/profile.d/3rd-party.sh

但是,原设置中的环境数据往往会持续存在,因此您可以另外注销并重新登录以确保路径正确加载。

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

第四步 - 配置Bro

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

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

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

配置要监控的节点

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

初始情况下,Bro配置为在独立模式下运行。因为这是独立安装,所以您不需要修改此文件,但最好检查值是否正确。

打开文件进行编辑。

代码语言:txt
复制
$ sudo nano /usr/local/bro/etc/node.cfg

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

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

代码语言:txt
复制
[bro]
type=standalone
host=localhost
interface=eth0

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

配置节点的专用网络

您可以在networks.cfg文件中配置节点所属的IP网络(即您希望监视的任何服务器接口的IP网络)。

开始时,请打开该文件。

代码语言:txt
复制
$ sudo nano /usr/local/bro/etc/networks.cfg

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

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

代码语言:txt
复制
# 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应该类似于以下内容,您的网络地址替换为:

Example/usr/local/bro/etc/networks.cfg

代码语言:txt
复制
203.0.113.0/24          Public IP space
198.51.100.0/24         Private IP space

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

配置邮件和日志记录设置

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

打开文件进行编辑。

代码语言:txt
复制
$ sudo nano /usr/local/bro/etc/broctl.cfg

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

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

代码语言:txt
复制
. . .
# Mail Options

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

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

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

第五步 - 使用BroControl管理Bro

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

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

代码语言:txt
复制
Welcome to BroControl 1.5-21

Type "help" for help.

[BroControl] >

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

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

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

代码语言:txt
复制
$ sudo /usr/local/bro/bin/broctl deploy

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

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

代码语言:txt
复制
bro 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并在“邮件选项”部分的末尾添加Sendmail条目:

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

代码语言:txt
复制
. . .
# Added for Sendmail
SendMail = /usr/sbin/sendmail

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

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

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

代码语言:txt
复制
$ sudo /usr/local/bro/bin/broctl status

输出将如下所示。除running之外,状态也可以是crashed或stopped。

代码语言:txt
复制
Output

Name 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

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

Bro的cron命令是初始情况下的,但您需要安装实际触发脚本的cron作业。您需要先在/etc/cron.d中为Bro添加一个cron包文件。遵循约定,我们将调用该文件,因此创建并打开它。

代码语言:txt
复制
$ sudo nano /etc/cron.d/bro

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

/etc/cron.d/bro

代码语言:txt
复制
*/5 * * * * root /usr/local/bro/bin/broctl cron

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

完成后保存并关闭文件。

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

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

代码语言:txt
复制
$ ps aux | grep bro

然后结束其中一个进程。

代码语言:txt
复制
$ sudo kill -9 process_id

如果您使用以下方法检查状态:

代码语言:txt
复制
$ sudo /usr/local/bro/bin/broctl status

输出将显示它已崩溃。

代码语言:txt
复制
Name         Type       Host          Status    Pid    Started
bro          standalone localhost     crashed

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

在Bro完全工作的情况下,您应该每小时获得在界面上捕获的有趣活动的摘要电子邮件。如果它崩溃并重新启动,您将收到一封电子邮件,说明它在崩溃后启动。在接下来的最后一步中,让我们看一下其他几个主要的Bro实用程序。

第七步-使用brobro-cutBro Policy脚本

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

用于捕获带有bro的实时流量的命令的格式为sudo / usr / local / bro / bin / bro -i eth0 file...。至少,您必须指定应从哪个接口捕获来自.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)。

代码语言:txt
复制
total 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输出和读取生成的日志文件。


参考文献:《How to Install Bro on Ubuntu 16.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第一步 - 安装依赖项
  • 第二步 - 下载GeoIP数据库
  • 第三步 - 从源代码安装Bro
  • 第四步 - 配置Bro
    • 配置要监控的节点
      • 配置节点的专用网络
        • 配置邮件和日志记录设置
        • 第五步 - 使用BroControl管理Bro
        • 第六步 - 为Bro配置cron
        • 第七步-使用bro,bro-cut和Bro Policy脚本
        • 结论
        相关产品与服务
        命令行工具
        腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档