23.3. Myricom¶
来源:https://blog.inliniac.net/2012/07/10/suricata-on-myricom-capture-cards/
本指南将介绍如何使用Myricom的libpcap支持。假设您已正确安装网卡、加载Sniffer驱动并确保一切正常工作。请确认 dmesg
显示网卡处于嗅探模式:
[ 2102.860241] myri_snf INFO: eth4: Link0 is UP
[ 2101.341965] myri_snf INFO: eth5: Link0 is UP
我已将Myricom运行时库安装在 /opt/snf
目录下。
针对Myricom的libpcap编译Suricata:
./configure --with-libpcap-includes=/opt/snf/include/ --with-libpcap-libraries=/opt/snf/lib/ --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make
sudo make install
接下来配置环形缓冲区数量。本例使用8个缓冲区,因为我的四核超线程CPU有8个逻辑处理器。*下文*将详述buffer-size参数。
pcap:
- interface: eth5
threads: 8
buffer-size: 512kb
checksum-checks: no
设置8个线程会使Suricata为eth5创建8个读取线程。Myricom驱动确保每个线程绑定独立的环形缓冲区。
按以下方式启动Suricata:
SNF_NUM_RINGS=8 SNF_FLAGS=0x1 suricata -c suricata.yaml -i eth5 --runmode=workers
如需16个环形缓冲区,将配置文件中"threads"值改为`16`并启动:
SNF_NUM_RINGS=16 SNF_FLAGS=0x1 suricata -c suricata.yaml -i eth5 --runmode=workers
注意:使用Myricom网卡时,上述 pcap.buffer-size
配置项当前会被忽略。该值会传递至Suricata源码中的 pcap_set_buffer_size
libpcap接口。Myricom技术支持说明:
"Sniffer10G的libpcap接口会忽略pcap_set_buffer_size()的设定值。snf_open()调用使用零作为dataring_size参数,这表示让Sniffer库使用默认值或SNF_DATARING_SIZE环境变量设定的值。"
Myricom在libpcap项目中提交的PR显示,未来SNF软件版本可能支持通过pcap.buffer-size yaml配置项设置SNF_DATARING_SIZE:
在此之前,可分别使用SNF_DATARING_SIZE和SNF_DESCRING_SIZE环境变量显式设置数据环和描述符环的大小。
SNF_DATARING_SIZE是用于存储入站报文数据的总内存量,该值在所有环形缓冲区间共享。 SNF_DESCRING_SIZE是用于存储报文元信息(包长、偏移量、时间戳)的总内存量,同样在所有环形缓冲区间共享。
Myricom建议描述符环设为数据环的1/4大小,但该比例可根据流量特征调整。 若未显式设置,Myricom默认使用:SNF_DATARING_SIZE = 256MB,SNF_DESCRING_SIZE = 64MB。
扩展上述16线程示例,以下命令可启动带16GB数据环和4GB描述符环的Suricata:
SNF_NUM_RINGS=16 SNF_DATARING_SIZE=17179869184 SNF_DESCRING_SIZE=4294967296 SNF_FLAGS=0x1 suricata -c suricata.yaml -i eth5 --runmode=workers
23.3.1. 调试信息¶
Myricom还提供获取调试信息的方法,可用于验证配置和收集额外信息。 设置SNF_DEBUG_MASK=3启用调试信息,可选设置SNF_DEBUG_FILENAME指定输出文件位置。
延续示例:
SNF_NUM_RINGS=16 SNF_DATARING_SIZE=17179869184 SNF_DESCRING_SIZE=4294967296 SNF_FLAGS=0x1 SNF_DEBUG_MASK=3 SNF_DEBUG_FILENAME="/tmp/snf.out" suricata -c suricata.yaml -i eth5 --runmode=workers