运行模式

Suricata由多个称为线程、线程模块和队列的"构建块"组成。线程类似于计算机上运行的进程。Suricata是多线程的,因此可以同时运行多个线程。线程模块是功能的一部分,例如一个模块用于解码数据包,另一个是检测模块,还有一个是输出模块。一个数据包可能被多个线程处理,然后通过队列传递给下一个线程。数据包一次只能由一个线程处理,但引擎可以同时处理多个数据包(参见:ref:suricata-yaml-max-pending-packets)。一个线程可以包含一个或多个线程模块,如果包含多个模块,则同一时间只能激活其中一个。线程、模块和队列的排列组合方式被称为"运行模式"。

不同运行模式

您可以从多个预定义的运行模式中选择。命令行选项``--list-runmodes``会显示所有可用的运行模式。所有运行模式都有名称:single、workers、autofp。

通常,``workers``运行模式性能最佳。在此模式下,网卡/驱动程序确保数据包在Suricata的处理线程之间均衡分配。每个数据包处理线程包含完整的处理流水线。

../_images/workers.png

对于处理PCAP文件或某些IPS设置(如NFQ),则使用``autofp``模式。该模式下有一个或多个捕获线程负责捕获数据包并进行解码,然后将其传递给``flow worker``线程。

../_images/autofp1.png ../_images/autofp2.png

最后,``single``运行模式与``workers``模式类似,但只有一个数据包处理线程。这主要用于开发阶段。

../_images/single.png

有关运行模式的命令行选项的更多信息,请参阅:doc:../command-line-options

负载均衡

Suricata可以通过配置选项`autofp-scheduler`使用不同的方式在不同线程间均衡分配待处理的数据包。

默认值为`hash`,表示使用5-7元组哈希将数据包分配给线程,该哈希也用于在内存中存储流。

此选项还可以设置为: - ippair:仅使用地址将数据包分配给线程。 - ftp-hash:与`hash`相同,但对于可能是ftp或ftp-data的流,这些流将由同一线程处理。这样就不会因在ftp流处理之前处理ftp-data流而导致识别ftp-data流时出现并发问题。对于此类流,使用哈希的变体。