目录
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