===================== 预过滤关键字 ===================== .. _rules-keyword-fast_pattern: fast_pattern ============ .. toctree:: fast-pattern-explained 签名中只有一个内容会被用于多模式匹配器(MPM)。如果存在多个内容,Suricata会使用'最强'的内容。这取决于长度、内容变化程度以及所检查的缓冲区等因素。通常来说,内容越长且变化越多越好。关于Suricata如何确定快速模式匹配的完整细节,请参阅 :doc:`fast-pattern-explained`。 有时规则编写者希望让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关键字会修改它前面的内容。 .. image:: fast-pattern/fast_pattern.png fast_pattern也可以与之前提到的所有关键字以及所有HTTP修饰符结合使用。 fast_pattern:only ~~~~~~~~~~~~~~~~~ 有时一个签名只包含一个内容。这种情况下,在MPM中找到匹配后,Suricata无需进一步检查。如果只有一个内容,整个签名就算匹配。Suricata会自动识别这一点。在某些签名中,仍会使用'fast_pattern:only;'来标明。虽然Suricata不需要fast_pattern:only,但它仍然支持这个语法。 fast_pattern:'chop' ~~~~~~~~~~~~~~~~~~~~ 如果不希望MPM使用整个内容,可以使用fast_pattern 'chop'。 例如:: content: "aaaaaaaaabc"; fast_pattern:8,4; 这样MPM就只会使用最后四个字符。 prefilter ========= 对于其他非MPM关键字的预过滤引擎,可以通过'prefilter'关键字在特定规则中启用。 在以下规则中,TTL测试将用于预过滤,而不是单字节模式: :: alert ip any any -> any any (ttl:123; prefilter; content:"a"; sid:1;) 有关如何配置预过滤引擎的更多信息,请参阅 :ref:`suricata-yaml-prefilter`