19.3. 肉豆蔻¶
发件人:https://blog.inliniac.net/2012/07/10/suricata-on-myricom-capture-cards/
在本指南中,我将介绍如何使用Myricom libpcap支持。我假设你正确地安装了卡,安装了嗅探器驱动程序并确保一切正常。确保 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,因为我的四核+超线程有8个逻辑CPU。 见下文 有关缓冲区大小参数的其他信息。
pcap:
- interface: eth5
threads: 8
buffer-size: 512kb
checksum-checks: no
8线程设置使Suricata为eth5创建8个读线程。Myricom驱动程序确保每一个都连接到自己的环形缓冲区。
然后开始如下测量:
SNF_NUM_RINGS=8 SNF_FLAGS=0x1 suricata -c suricata.yaml -i eth5 --runmode=workers
如果需要16个环形缓冲区,请将Suricata配置文件中的“threads”变量更新为 16 开始苏瑞塔:
SNF_NUM_RINGS=16 SNF_FLAGS=0x1 suricata -c suricata.yaml -i eth5 --runmode=workers
请注意 pcap.buffer-size
使用Myricom卡时,上面显示的配置设置当前被忽略。该值传递给 pcap_set_buffer_size
Suricata源代码中的libpcap API。Myricom支持:
"The libpcap interface to Sniffer10G ignores the pcap_set_buffer_size() value. The call to snf_open() uses zero as the dataring_size which informs the Sniffer library to use a default value or the value from the SNF_DATARING_SIZE environment variable."
myricom在libpcap项目中打开的以下pull请求表明,未来的snf软件版本可以通过pcap.buffer-size yaml设置支持设置snf_数据环的大小:
在此之前,可以分别使用snf_data ring_size和snf_descring_size环境变量显式设置数据环和描述符环值。
snf_dataring_大小是用于存储传入数据包数据的总内存量。此尺寸在所有环中共享。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
19.3.1. 调试信息¶
myricom还提供了获取调试信息的方法。这对于验证配置和收集其他信息很有用。设置snf_debug_mask=3将启用调试信息,并且可以选择设置snf_debug_文件名,以指定输出文件的位置。
以下是示例:
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