【Suricata】05-Suricata 7.0.4 高性能配置

本文详细介绍了如何在Linux环境下配置Suricata以实现高性能,包括硬件配置、监听网口设置、安装PF_RING、Hyperscan以及Suricata的高性能配置。特别强调了PF_RING的透明模式、内核模块安装和Suricata的规则检测、运行模式和线程配置,旨在提高数据包处理效率和性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. 硬件配置

2. 监听网口配置

2.1 开启混杂模式

2.2 禁掉不必要的功能

2.3 禁用IPv6(可选)

3. 安装PF_RING

3.1 PF_RING透明模式

3.2 安装PF_RING

3.2.1 下载pf_ring

3.2.3 编译

3.2.4 安装pf_ring内核模块

3.2.5 安装并加载pf_ring模块和透明模式驱动

3.2.6 Libpfring和Libpcap安装

3.2.7 测试

4. 安装Hyperscan

4.1 安装hyperscan

4.1.1 二进制包安装hyperscan

4.1.2 源码安装(未成功)

4.1.2.1 安装依赖包

4.1.2.2 下载hyperscan

4.1.2.3 编译安装hyperscan

4.1.2.4 更新动态库路径

5. 源码安装suricata

6. Suricata高性能配置

6.1 suricata对包的规则检测

6.2 suricata运行模式和线程

6.3 max-pending-packets配置

6.4 IP分片重组

6.5 suricata的flow

6.6 stream引擎

6.7 应用层解析配置

6.8 Dns,flow信息异常原因

6.9 高性能下suricata启动的配置

6.9.1 原始的开启方式

6.9.2 高性能配置

6.9.3 suricata监控脚本


1. 硬件配置

CPU: Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz

内存:32GB

网卡

  • 管理口:千兆网卡
  • 监听扣:Intel X520 万兆光网卡

系统:Debian GNU/Linux 12 (bookworm)

内核版本:6.1.0-18-amd64

Suricata版本:7.0.4

2. 监听网口配置

2.1 开启混杂模式

vim /etc/network/interfaces
# 开机自动挂载
auto ens1f0
iface ens1f0 inet manual

# 当接口被激活时,关闭arp,并激活该接口,即分配一个无IP的接口
up ifconfig ens1f0 -arp up

# 网卡激活时开启混杂模式
up ip link set ens1f0 promisc on
# 网口关闭时,关闭混杂模式
down ip link set ens1f0 promisc off
# 网口关闭时,确保网口被完全关闭
down ifconfig ens1f0 down

2.2 禁掉不必要的功能

不适用,虽然不影响suricata的检测功能,但是会影响数据包的处理速度。

# post-up for i in rx tx sg tso ufo gso gro lro; do ethtool -K $IFACE $i off; done 

2.3 禁用IPv6(可选)

post-up echo 1 > /proc/sys/net/ipv6/conf/$IFACE/disable_ipv6                

/etc/init.d/networking restart

3. 安装PF_RING

pfring是一种加速处理数据包的实现方法,可以比较有效地提升网卡获取和发送数据包的速度。PF_RIN是一个Linux内核模块和用户空间框架,它允许您以高速率处理数据包,同时为数据包处理应用程序提供一致的API。

3.1 PF_RING透明模式

PF_RING是为增强数据包捕获性能而设计的。这意味着必须加速RX路径,特别是通过减少数据包从适配器到用户域的旅程来加速这一过程。这是通过允许驱动程序直接将数据包从NIC推到PF_RING来获得的,而不是通过通常的内核路径。出于这个原因,PF_RING引入了一个名为“透明模式”的选项,其目标是优化数据包如何从NIC移动到PF_RING。这个选项(可以在通过insmod插入PF_RING模块时指定)可以有三个:

1)insmod pf_ring.ko transparent_mode=0

这是默认值,这意味着数据包通过标准内核机制发送到PF_RING。即不需要安装任何驱动,利用Linux接口接受报文,任何驱动都能使用该模式

在这种设置中,数据包既被发送到PF_RING,也被发送到所有其他内核组件。所有网卡驱动均支持该模式。

2)insmod pf_ring.ko transparent_mode=1

在这种模式下,数据包直接由网卡驱动发送到PF_RING,数据包仍然传播到其他内核组件。即需要安装驱动

在这种模式下,数据包捕获加速,因为数据包被NIC驱动程序复制而不经过通常的内核路径。

  • 为了启用这种模式,必须使用支持PF_RING的网卡驱动程序。可用的启用PF_RING的驱动程序可以在PF_RING的drivers/目录中找到。

3)insmod pf_ring.ko transparent_mode=2

在这种模式下,数据包直接由网卡驱动发送到PF_RING,数据包不会传播到其他内核组件,因为这会减慢数据包捕获。即需要安装驱动, pfring以外程序抓不到数据包

  • 为了启用这种模式,您必须使用支持PF_RING的网卡驱动程序。
  • 数据包在被传递到PF_RING之后不会被发送到内核。这意味着您将无法从pf_ring驱动的网卡获得连接。
  • 这种模式是最快的,因为数据包被快速复制到PF_RING中,处理后立即被丢弃。

后两种模式需要使用PF_RING特殊定制的网卡驱动:pf_ring.ko

3.2 安装PF_RING

3.2.1 下载pf_ring

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

3.2.3 编译

root@ndr:~# cd PF_RING
root@ndr:~/PF_RING# make   //直接在PF_RING根目录下面make,进行全部编译
# 报错了
configure: error: unable to find nl-genl-3 please install libnl-genl-3-dev
make[1]: *** [Makefile:7: lib/Makefile] Error 1
make[1]: Leaving directory '/root/PF_RING/userland'
make: *** [Makefile:3: all] Error 2

报错提示:配置脚本 configure 无法找到 nl-genl-3,也就是 libnl-genl-3-dev 开发库。

安装libnl-genl-3-dev

sudo apt-get update  
sudo apt-get install libnl-genl-3-dev

再次编译:

make clean  # 清理之前编译产生的文件 
make  # 编译

又报错了:

config.status: creating lib/config.h
make[1]: Entering directory '/root/PF_RING/userland'
cd lib; make
make[2]: Entering directory '/root/PF_RING/userland/lib'
make -C ../nbpf
make[3]: Entering directory '/root/PF_RING/userland/nbpf'
gcc -Wall -fPIC -O2 -I../lib -I../../kernel  -Wno-address-of-packed-member   -c -o nbpf_mod_rdif.o nbpf_mod_rdif.c
gcc -Wall -fPIC -O2 -I../lib -I../../kernel  -Wno-address-of-packed-member   -c -o rules.o rules.c
gcc -Wall -fPIC -O2 -I../lib -I../../kernel  -Wno-address-of-packed-member   -c -o tree_match.o tree_match.c
gcc -Wall -fPIC -O2 -I../lib -I../../kernel  -Wno-address-of-packed-member   -c -o parser.o parser.c
bison -d grammar.y
make[3]: bison: No such file or directory
make[3]: *** [Makefile:28: grammar.tab.c] Error 127
make[3]: Leaving directory '/root/PF_RING/userland/nbpf'
make[2]: *** [Makefile:152: ../nbpf/libnbpf.a] Error 2
make[2]: Leaving directory '/root/PF_RING/userland/lib'
make[1]: *** [Makefile:12: libpfring] Error 2
make[1]: Leaving directory '/root/PF_RING/userland'
make: *** [Makefile:3: all] Error 2

错误信息指出在编译 PF_RING 的过程中,bison 这个工具没有被找到。

bison 是一个用来将语法分析器生成器(如 .y 文件)转换成 C 语言的工具。PF_RING 的编译过程需要bison 来生成一些源代码文件。

安装bison:

sudo apt-get update  
sudo apt-get install bison

再次编译,又报错了:

config.status: lib/config.h is unchanged
make[1]: Entering directory '/root/PF_RING/userland'
cd lib; make
make[2]: Entering directory '/root/PF_RING/userland/lib'
make -C ../nbpf
make[3]: Entering directory '/root/PF_RING/userland/nbpf'
bison -d grammar.y
lex scanner.l
make[3]: lex: No such file or directory
make[3]: *** [Makefile:23: lex.yy.c] Error 127
make[3]: Leaving directory '/root/PF_RING/userland/nbpf'
make[2]: *** [Makefile:152: ../nbpf/libnbpf.a] Error 2
make[2]: Leaving directory '/root/PF_RING/userland/lib'
make[1]: *** [Makefile:12: libpfring] Error 2
make[1]: Leaving directory '/root/PF_RING/userland'
make: *** [Makefile:3: all] Error 2

这次的错误信息表明在编译 PF_RING 的 nbpf 子模块时,lex 工具没有找到。

lex(也称为 flex)是一个用于生成词法分析器的工具,它可以将词法描述文件(通常以 .l 扩展名结尾)转换成 C 语言源代码。

安装flex:

sudo apt-get update  
sudo apt-get install flex

再次编译,终于编译成功了。

3.2.4 安装pf_ring内核模块

root@ndr:~/PF_RING# cd kernel
root@ndr:~/PF_RING# make
root@ndr:~/PF_RING# make install

3.2.5 安装并加载pf_ring模块和透明模式驱动

### 查看网卡型号
root@ndr:~/PF_RING# ethtool -i ens1f0
##############################################
driver: ixgbe
version: 6.1.0-18-amd64
firmware-version: 0x800007f5, 17.5.10
expansion-rom-version: 
bus-info: 0000:03:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simo2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值