太阳不下山 发表于 2021-7-10 15:18:03

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

  
简介
  zeek
  Zeek是一个开源网络流量分析器。许多用户将Zeek用作网络安全监视器(NSM),以支持对可疑或恶意活动的调查。Zeek还支持安全领域以外的各种流量分析任务,包括性能评估和故障排除。
pfring
PF_RING是一种新型的网络套接字,和libpcap相比可显着提高数据包捕获速度,如果使用PF_RING ZC(zero copy)驱动程序可实现极高的数据包捕获/传输速度,PF_RING ZC在足够的硬件条件下可实现100G数据包抓取。

安装教程
安装pfring
  参考:pf_ring 安装以及使用指南
安装zeek

[*]依赖项安装
  对于 CentOS7
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
sudo apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python3 python3-dev swig zlib1g-dev


[*]原码下载
git clone --recursive https://github.com/zeek/zeek


[*]编译
cd zeek-X.X.X
./configure --with-pcap=/usr/local/lib
make && sudo make install


[*]确保Zeek已正确链接到pf_ring-aware libpcap:
ldd /usr/local/zeek/bin/zeek | grep pcap


[*]编写配置文件
  配置文件位于/usr/local/zeek/etc/node.cfg
  编写如下配置文件:

type=logger
host=localhost

type=manager
host=localhost

type=proxy
host=localhost

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

type=worker
host=localhost   
interface=ens33
lb_method=pf_ring
lb_procs=4
pin_cpus=0,1,2,3
#
#type=worker
#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类似的功能但是是使用软件方法实现
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作为接口名称,如下例所示。

type=logger
host=localhost

type=manager
host=localhost

type=proxy
host=localhost

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

type=worker
host=localhost   
interface=zc:99
lb_method=pf_ring
lb_procs=8
pin_cpus=0,1,2,3,4,5,6,7
#
#type=worker
#host=192.168.0.100
#interface=eth0

启动zeek
  终端输入如下命令进入zeek控制台:
/usr/local/zeek/bin/zeekctl
  首先使用install加载配置,使用start,stop命令开始和关闭zeek.
> install
> start
> stop

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

type=worker
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
文件内容为:

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

[*]zeek配置文件更改
只需在Zeek配置文件中对应的worker配置下添加下面一句即可
env_vars=PF_RING_FT_CONF=/etc/pf_ring/ft-rules.conf
  例如:

type=worker
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


  

  
文档来源:51CTO技术博客https://blog.51cto.com/u_14928887/3033153
页: [1]
查看完整版本: 如何使用pfring加速Zeek流量分析