===================== 预过滤关键字 =====================
10.10. fast_pattern¶
签名中只有一个内容会被用于多模式匹配器(MPM)。如果存在多个内容,Suricata会使用'最强'的内容。这取决于长度、内容变化程度以及所检查的缓冲区等因素。通常来说,内容越长且变化越多越好。关于Suricata如何确定快速模式匹配的完整细节,请参阅 Suricata 快速模式匹配机制详解。
有时规则编写者希望让Suricata使用默认选择之外的其他内容。
例如:
User-agent: Mozilla/5.0 Badness;
content:"User-Agent|3A|";
content:"Badness"; distance:0;
在这个例子中,第一个内容比第二个更长且变化更多,因此Suricata会将其用于MPM。由于'User-Agent:'会频繁匹配,而'Badness'在网络流量中出现较少,可以通过使用'fast_pattern'让Suricata使用第二个内容。
content:"User-Agent|3A|";
content:"Badness"; distance:0; fast_pattern;
fast_pattern关键字会修改它前面的内容。

fast_pattern也可以与之前提到的所有关键字以及所有HTTP修饰符结合使用。
10.10.2. fast_pattern:only¶
有时一个签名只包含一个内容。这种情况下,在MPM中找到匹配后,Suricata无需进一步检查。如果只有一个内容,整个签名就算匹配。Suricata会自动识别这一点。在某些签名中,仍会使用'fast_pattern:only;'来标明。虽然Suricata不需要fast_pattern:only,但它仍然支持这个语法。
10.10.3. fast_pattern:'chop'¶
如果不希望MPM使用整个内容,可以使用fast_pattern 'chop'。
例如:
content: "aaaaaaaaabc"; fast_pattern:8,4;
这样MPM就只会使用最后四个字符。
10.11. prefilter¶
对于其他非MPM关键字的预过滤引擎,可以通过'prefilter'关键字在特定规则中启用。
在以下规则中,TTL测试将用于预过滤,而不是单字节模式:
alert ip any any -> any any (ttl:123; prefilter; content:"a"; sid:1;)
有关如何配置预过滤引擎的更多信息,请参阅 suricata-yaml-prefilter