简介
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