如何使用pfring加速Zeek流量分析

2021-04-19 11:08:34 浏览数 (3)

简介

zeek

Zeek是一个开源网络流量分析器。许多用户将Zeek用作网络安全监视器(NSM),以支持对可疑或恶意活动的调查。Zeek还支持安全领域以外的各种流量分析任务,包括性能评估和故障排除。

pfring

PF_RING是一种新型的网络套接字,和libpcap相比可显着提高数据包捕获速度,如果使用PF_RING ZC(zero copy)驱动程序可实现极高的数据包捕获/传输速度,PF_RING ZC在足够的硬件条件下可实现100G数据包抓取。

安装教程

安装pfring

参考:pf_ring 安装以及使用指南

安装zeek

依赖项安装

对于 CentOS7

代码语言:javascript复制
 sudo yum install cmake make gcc gcc-c   flex bison libpcap-devel openssl-devel python3 python3-devel swig zlib-devel

(注意:CentOS需要安装cmake3.0以上的版本)

ubuntu/ Debian

代码语言:javascript复制
sudo apt-get install cmake make gcc g   flex bison libpcap-dev libssl-dev python3 python3-dev swig zlib1g-dev

原码下载

代码语言:javascript复制
git clone --recursive https://github.com/zeek/zeek

编译

代码语言:javascript复制
cd zeek-X.X.X
./configure --with-pcap=/usr/local/lib
make && sudo make install

确保Zeek已正确链接到pf_ring-aware libpcap:

代码语言:javascript复制
ldd /usr/local/zeek/bin/zeek | grep pcap

编写配置文件

配置文件位于/usr/local/zeek/etc/node.cfg

编写如下配置文件:

代码语言:javascript复制
[logger-1]
type=logge
host=localhost
[manager]
type=manage
host=localhost
[proxy-1]
type=proxy
host=localhost

# 配置worker,可以同时配置多个worke

代码语言:javascript复制
[worker-1]
type=worke
host=localhost    
interface=ens33  
lb_method=pf_ring
lb_procs=4
pin_cpus=0,1,2,3
#[worker-2]
#type=worke
#host=192.168.0.100
#interface=eth0

注:

worker-为实际采集流量的节点

host-流量采集节点IP地址,

interface-接口名称

lb_method-抓包方式

lb_procs-负载均衡队列数目

pin_cpus-绑定cpu数目通常与负载均衡队列数目相同

上述为集群工作模式,可以多个计算节点共同工作,这里我是在本地本地运行,所以woreker和master都配置为localhost了(注意:使用集群只需要在manager上编写配置文件即可,当然worker节点也需要安装Zeek)。worker可以配置为其他节点,但是要求别的manager节点能够免密SSH登录其他worker节点。SSH免密登录配置方法。

lb_procs参数详细说明

lb_procs参数表示监控接口负载均衡队列数目,通常有两种情况。

  • 使用RSS网卡多队列技术

RSS(Receive Side Scaling)是一种能够在多处理器系统下使接收报文在多个CPU之间高效分发的网卡驱动技术。

几乎所有英特尔(和其他供应商)NIC都具有RSS支持,这意味着它们能够对硬件中的数据包进行哈希处理,以便将负载分配到多个RX队列中。在某些情况下,RSS不可用或不够灵活(例如,需要自定义分发功能),可以使用ZC通过软件分发来代替它。

假如我们将接口ens33配置了4个RSS队列,这里将配置lb_procs=4,对应的配置相应的CPU去分别处理四个队列的流量pin_cpus=0,1,2,3。

RSS是为了处理大流量而设计的一种负载均衡机制,使用该方法可以大大提升流量的处理能力。

RSS配置方法参考。

使用pfring ZC进行流量分发

pfring ZC 具有流量分发的功能,它能高速的将流量从网卡抓取然后使用软件进行分发到不同队列。和RSS类似的功能但是是使用软件方法实现

代码语言:javascript复制
sudo zbalance_ipc -i zc:eth1 -c 99 -n 8 -m 1 -g 8

-c 99是集群ID

-n 8是队列数

-g 8是zbalance_ipc的cpu绑定

您应该使用zc:cluster id作为接口名称,如下例所示。

代码语言:javascript复制
[logger-1]
type=logge
host=localhost
[manager]
type=manage
host=localhost
[proxy-1]
type=proxy
host=localhost

# 配置worker,可以同时配置多个worke
[worker-1]
type=worke
host=localhost    
interface=zc:99
lb_method=pf_ring
lb_procs=8
pin_cpus=0,1,2,3,4,5,6,7
#[worker-2]
#type=worke
#host=192.168.0.100
#interface=eth0

启动zeek

终端输入如下命令进入zeek控制台:

代码语言:javascript复制
/usr/local/zeek/bin/zeekctl

首先使用install加载配置,使用start,stop命令开始和关闭zeek.

代码语言:javascript复制
[ZeekControl] > install 
[ZeekControl] > start
[ZeekControl] > stop

使用 pfring ZC加速

PF_RING™ZC(零复制)是一种灵活的数据包处理框架,可让您在任何数据包大小下实现1/10 Gbit的线速数据包处理(RX和TX)。在足够的硬件上速度更高。由于其使用了绕过内核协议栈的方法直接从网卡抓取数据包,故大大提升效率。使用ZC需要安装特定的驱动,安装方法:pf_ring 安装以及使用指南

zeek中使用ZC的方法很简单,只需使用zc:<接口名称>的方法即可,配置示例如下:

代码语言:javascript复制
[worker-2]
type=worke
host=192.168.0.101
lb_method=pf_ring
interface=zc:eth0
lb_procs=8
pin_cpus=0,1,2,3,4,5,6,7

使用 pfring FT 加速

使用pfring FT可以过滤不想关注的流量,从而达到加速的目的, 注意pfring FT 和pfring ZC加速的区别。pfring ZC是在抓取数据包时进行优化加速,pfring FT是在抓取数据包以后使用过滤法方法过滤无用流量,让我们只需对关注的流量进行检测,从而实现加速。并且pfring FT通常与pfringZC一起使用也可以和libpcap一起使用。具体方法如下。

编写pring FT 配置文件/etc/pf_ring/ft-rules.conf

文件内容为:

代码语言:javascript复制
[filter]
YouTube = discard
Netflix = discard

上述是一个简单的过滤规则示例,表示丢弃YouTube ,Netflix 的流量,由于pf_ring FT使用了DPI技术所以可以直接识别并过滤应用层的流量。

zeek配置文件更改

只需在Zeek配置文件中对应的worker配置下添加下面一句即可

代码语言:javascript复制
env_vars=PF_RING_FT_CONF=/etc/pf_ring/ft-rules.conf

例如:

代码语言:javascript复制
[worker-2]
type=worke
host=192.168.0.101
lb_method=pf_ring
interface=zc:eth0
lb_procs=8
pin_cpus=0,1,2,3,4,5,6,7
env_vars=PF_RING_FT_CONF=/etc/pf_ring/ft-rules.conf

0 人点赞