开始使用Bro入侵检测系统(IDS)(1/4)

来源:https://dallinwarne.com/networking/getting-started-with-bro-intrusion-detection-system-ids/

如果您拥有计算机网络,那么您需要确保入侵检测系统(IDS)是您网络安全策略的一部分。监控网络流量的价值远远超过入侵的成本。虽然大多数IDS系统都是商业的,但是也有一些开源的IDS解决方案。

Snort和Suricata是流行的开源防火墙/IDS解决方案,但也有一些缺点。对于小型企业来说,它们可能工作得很好,但对于中型或大型网络,它们可以带来更多的工作,而带来更少的价值。目前它们的主要缺点是,支持Snort/ suricata的设备不能与网络上其他支持Snort的设备通信,也不能集中管理它们。随着网络攻击变得越来越复杂,一个具有安全意识的组织需要更好的解决方案。

这里是开放源码IDS游戏的第三个主要参与者。Bro网络安全监视器最初是由高等教育开发的,它提供了一个网络协议分析器和一个安全工具。它的优点是能够跨网络上多个Bro设备关联流量,并添加额外的和可定制的插件。换句话说,与其在你的网络上有多个独立的IDS盒,你还可以有一个集群系统把信息通过网络连接起来。

Bro的缺点是比较高级,需要一些耐心来为初学者进行设置。本介绍指南旨在帮助您消除一些痛苦,并概述您可以采取的步骤来构建自己的Bro集群。请记住,根据操作系统和设置的不同,有些步骤可能有所不同。

一、系统规格:

操作系统:红帽Linux 7

Manager服务器:8 CPU, 32 GB RAM, 1 TB硬盘,带有一个大的日志分区。

工作人员:12个物理超线程cpu, 96GB RAM, 120gb SSD, 10gbps Intel X710 NIC

网络信息:我将要测试的网络总流量超过1Gbps (Tx和Rx),因此在worker中有10gbps的NIC。这是一个典型的网络,它的网页浏览量很大,但也使用许多其他应用程序。正如在典型的网络中看到的那样,它也具有微突发。

二、大视图

首先,我将告诉您我是如何安装Bro的先决条件和准备操作系统的。接下来,我将编译Bro并安装它以及一些所需的Bro插件。第三,我将介绍故障诊断、调优和调整。最后,我要讲的是Elasticsearch的整合。逻辑图和物理图显示了本系列文章最后的架构。


开始使用Bro入侵检测系统(IDS)(1/4)_第1张图片


开始使用Bro入侵检测系统(IDS)(1/4)_第2张图片

三、Bro先决条件

首先,我建议为Bro生成的日志和文件设置一个单独的分区。系统管理员可以相应地对磁盘进行分区,或者为您提供一些附加的存储。你不需要这样做,但是要知道如果你的日志填满了根分区,那么Bro就会崩溃,操作系统就会变得不稳定。

为了安装Bro,需要安装所有的先决条件。其中包括:

(1)C++ Actor 框架

(2)LibGeoIP 数据库

(3)Gperftools

(4)Ipsumdump

(5)PF_RING (吞吐量超过1Gbps时需要)

(6)其它一些东西

四、其它一些东西

有几个包可以通过yum安装。只需从CLI运行以下命令:

sudo yum install cmake make gcc gcc-c++ flex bison libpcap-devel openssl-devel python-devel swig zlib-devel

检查输出中的错误。如果yum无法找到一个包,您可能需要启用一个额外的存储库: yum-config-manager –enable rhel-7-server-optional-rpms

五、C + +行为框架

如果您知道要查看何处,这也很简单。从https://build.opensuse.org/package/show/devel:libraries:caf/caf.下载

make

make install

六、LibGeoIP

Bro使用LibGeoIP来定位地理上的IP地址。如果您打算稍后将日志发送到Elasticsearch或Splunk,您可能可以跳过这一步,让它们处理GeoIP特性。如果您想让Bro这样做,请记住,必须在集群中的所有工人和管理人员之间一致地安装它,并定期进行更新。

安装、运行:sudo yum install GeoIP-devel

要提供更精确的位置(如按城市),请运行这些命令下载和安装数据库。

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

gunzip GeoLiteCity.dat.gz

#Rename the file and move to /var/lib/GeoIP:

mv GeoLiteCity.dat /var/lib/GeoIPCity.dat

#*note* - alternative path.

mv GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat

#Now do the same for IPV6 addresses.

wget http://geolite.maxmind.com/download/geoip/database/GeoIPv6.dat.gz

gunzip GeoIPv6.dat.gz

mv GeoIPv6.dat /var/lib/GeoIPv6.dat

#*note* - alternative path.

mv GeoIPv6.dat /usr/share/GeoIP/GeoIPCityv6.dat

Ipsumdump

七、IPsumdump

可以“将TCP/IP转储文件总结为一种便于人类和程序阅读的自描述ASCII格式”。

下载最新版本http://read.seas.harvard.edu/~kohler/ipsumdump/

gunzip ipsumdump-1.86.tar.gz

tar -xvf ipsumdump-1.86.tar

cd ipsumdump-1.86/

./configure

make

sudo make install

八、gperftools

注意:gperftools-devel不一定附带标准存储库。你必须为它找到另一个rpm。只要确保操作系统版本和存储库版本匹配即可。

yum install gperftools-lib

前面的命令安装库,但是您仍然需要开发包。

wget http://mirror.centos.org/centos/7/os/x86_64/Packages/gperftools-devel-2.4-8.el7.x86_64.rpm

rpm -ivh gperftools-devel-2.4-8.el7.x86_64.rpm

九、PF_RING

当网络吞吐量超过1gbps时,默认的Linux驱动程序是一个糟糕的选择。要充分利用10gbps网卡,需要一个第三方驱动程序。如果您的worker处理的内存小于1Gbps,那么您可能可以跳到本指南后面的“编译Bro”一节。

Ntop提供了一个名为PF_RING Vanilla的免费驱动程序,以及一个名为PF_RING- zc的付费版本。ZC应该提供更好的性能,因为它不像默认内核或PF_RING Vanilla那样复制包。其他替代方案包括AF_PACKET、NetMap和Myricom。后者与Myricom nic合作,而其他大部分与Intel nic合作。目前还无法对每一个进行比较。目前,我将重点介绍PF_RING Vanilla,因为它比较流行。

就像其他先决条件一样,PF_Ring库需要安装在一个跨所有工作人员和管理人员一致的目录中。如果PF_Ring库已经安装在默认安装位置(通常是/usr/local),则在继续之前删除它。在编译Bro时,编译器可能会找到默认实例,而不是您在configure命令中指定的实例。

PF_Ring版本可能有所不同,您可能会选择更通用的名称。此外,尽管驱动程序的目录在其名称中有“ZC”,但是除非您有许可证并正确设置它,否则您实际上不会使用ZC特性。

我喜欢在目录的名称中包含PF_Ring的版本号。虽然我是从6.5版开始的,但是6.6版是在发布本文之前发布的。

我使用的是i40e驱动程序,它的通用性不如其他驱动程序。我听说ixgbe虽然可能更老,但在环形插槽等设置上允许更大的灵活性和调整。

#Install git and download latest PF_RING driver

yum install git

git clone https://github.com/ntop/PF_RING

#Compile and install libraries

cd ./PF_RING/userland/lib

./configure prefix=/opt/pf_ring-6.5.0

make

make install

#Compile and install pcap libraries

cd ../libpcap

./configure prefix=/opt/pf_ring-6.5.0

make

make install

#Compile and install kernel module

cd ../../../PF_RING/kernel

make

make install

#Compile driver

cd ../../PF_RING/drivers/intel/i40e/i40e-1.5.18-zc/src

make

加载驱动程序的脚本需要修改以优化NIC和OS设置。

vim load_driver.sh

由于此NIC仅用于接收通信量,而不用于传输数据包,因此,我修改了行insmod . . / . / . / . / . / . /kernel/ pf_ring.ko

insmod ../../../../../kernel/pf_ring.ko enable_tx_capture=0

由于Red Hat没有“killall”命令,我将“killall irqbalance”行替换为

pkill irqbalance

“NIC队列”指定想要NIC发送中断的cpu数量。对于i40e驱动程序,如果组合设置,则在ethtool -L $中指定。由于我的机器有24个逻辑内核,并且我喜欢将一个内核空闲用于其他管理过程,所以我修改了这一行

Ethtool -L $IF combined 23

我修改的其他设置:

ethtool -K $IF rxvlan off txvlan off

接下来要修改的这一行对Bro的性能非常重要。Bro会计算哈希值,如果它从NIC接收到哈希值,就有点疯狂了。我们关闭这些设置的NIC的行:

ethtool -K $IF rxhash off tx off rx off

我修改的最后一行是从512到1024的HUGEPAGES_NUM变量。看起来无论我选择的数字是多少,操作系统只会分配一半的请求页面。

保存脚本并退出VIM之后,我通过运行加载驱动程序:

./load_driver.sh

通过运行下面的ethtool命令来验证你的网卡设置:

ethtool -k em1

ethtool -c em1

ethtool -G em1

PF_RING提供了一些与驱动程序一起使用的基本工具。虽然这些对于Bro来说不是必需的,但是在故障排除时它们是有帮助的。运行make编译PF_RING/userland/示例。一个简单的测试工具是pfcount,它提供有关NIC的统计信息,包括吞吐量以及在读取之前在NIC上丢弃了多少数据包。

./pfcount -I em1

如果您没有看到丢弃的数据包和吞吐量,那么您应该已经准备好了。为您的特定操作系统、网卡和驱动程序优化这些设置可能需要时间和耐心,以及一些反复试验。

九、操作系统准备

我需要准备操作系统来与集群中的其他worker进行通信。这包括调整iptables(或系统的防火墙设置)和分发SSH密钥。我不会详细介绍这些设置,因为它们与您的系统设置高度相关,而且已经有了一些很好的指南。我将在IP表中注意到,可能很难预测Bro manager和worker需要相互开放哪些端口。一开始可能更容易将所有端口相互打开,然后当您有工作要锁定哪些端口实际上是打开的。例如,这个iptable规则打开了管理器上Bro通常使用的端口范围。

iptables -A IN_public_allow -s 10.1.0.10 -p tcp --dport 47760:47771 -j ACCEPT

需要注意的是,bro manager流程默认使用端口22启动连接并管理一个worker。worker使用更高的端口号通过SSH连接回manager,因此manager需要向worker开放更高的端口号。否则,您将只能得到单向通信。

十、调整操作系统缓冲区

Linux分配一些内存(即缓冲区)来存储等待进程读取的数据包。大多数Linux发行版的默认设置都不够。通常发生的情况是网络流量可能会有大的突发。拥有更大缓冲区的另一个原因是,用于短实例的计算机有时可能无法跟上传入的流量。这可能是由于某些类型的分析需要更多的时间。我希望有足够的内存来接收短时间的突发事件,并在处理上给我一些灵活的空间。

遵循http://dak1n1.com/blog/7-performance-tuning-intel-10gbe/上的方法2可以很好地调整这些设置。当加载PF_Ring驱动程序时,我们已经处理了irqbalance的介绍。它也包括cpuspeed,但是我没有看到有什么不同。方法1是用来传输数据的,我不需要担心这个。第三种方法是榨出最后一点果汁,但是我还没有看到令人惊讶的结果。

这就完成了安装Bro IDS之前所需的先决条件。这是指南中4部分的第1部分。继续第2部分,编译和安装Bro。

你可能感兴趣的:(开始使用Bro入侵检测系统(IDS)(1/4))