全局阈值 ================== 阈值可以在规则本身中配置,参见 :doc:`../rules/thresholding`。规则编写者通常会根据情报创建规则,并结合对规则警报频率的判断来设置阈值。 阈值存储在一个根据配置调整大小的哈希表中,参见: :ref:`suricata-yaml-thresholds`。 阈值配置 ---------------- 除了规则阈值外,还可以使用 threshold.config 在传感器上配置更多阈值。 threshold/event_filter ~~~~~~~~~~~~~~~~~~~~~~ 语法: :: threshold gen_id , sig_id , type , \ track , count , seconds rate_filter ~~~~~~~~~~~ 速率过滤器允许在规则匹配时更改规则动作。 语法:: rate_filter: rate_filter gen_id , sig_id , track , \ count , seconds , new_action , timeout 示例:: rate_filter gen_id 1, sig_id 1000, track by_rule, count 100, seconds 60, \ new_action alert, timeout 30 gen_id ^^^^^^ 生成器 ID。通常为 1,但如果规则使用 ``gid`` 关键字设置其他值,则必须在 ``gen_id`` 中匹配。 sig_id ^^^^^^ 规则/签名 ID,由规则的 ``sid`` 关键字设置。 track ^^^^^ 跟踪规则匹配的位置。使用 by_src/by_dst 时,跟踪是按 IP 地址进行的。主机表用于存储。使用 by_rule 时,跟踪是针对规则全局进行的。 选项 by_both 用于跟踪源和目的地的 IP 对。相同地址之间方向相反的包被视为同一对进行跟踪。by_flow 选项在流中跟踪规则匹配。 count ^^^^^ 激活 ``rate_filter`` 所需的规则命中次数。 seconds ^^^^^^^ 在达到 ``count`` 以激活 ``rate_filter`` 的时间段。 new_action ^^^^^^^^^^ 当 ``rate_filter`` 生效时应用于匹配流量的新动作。 值:: 注意:解析器支持 'sdrop' 和 'log',但未实现其他功能。 timeout ^^^^^^^ ``rate_filter`` 保持激活状态的时间(秒)。 示例 ^^^^^^^ 假设我们想限制到 SSH 服务器的传入连接。下面的规则 ``888`` 简单地对到 SSH 服务器端口 22 的 SYN 包发出警报。如果一个 IP 地址在一分钟内触发此规则 10 次或更多,则设置 ``drop`` 的 ``rate_filter``,超时为 5 分钟。 规则:: alert tcp any any -> $MY_SSH_SERVER 22 (msg:"Connection to SSH server"; \ flow:to_server; flags:S,12; sid:888;) 速率过滤器:: rate_filter gen_id 1, sig_id 888, track by_src, count 10, seconds 60, \ new_action drop, timeout 300 suppress ~~~~~~~~ 抑制可用于抑制规则或主机/网络的警报。规则匹配时执行的操作(如设置 flowbit)仍会执行。 语法: :: suppress gen_id , sig_id suppress gen_id , sig_id , track , ip 示例: :: suppress gen_id 1, sig_id 2002087, track by_src, ip 209.132.180.67 这将确保签名 2002087 永远不会对源主机 209.132.180.67 匹配。 其他可能性/示例:: suppress gen_id 1, sig_id 2003614, track by_src, ip 217.110.97.128/25 suppress gen_id 1, sig_id 2003614, track by_src, ip [192.168.0.0/16,10.0.0.0/8,172.16.0.0/12] suppress gen_id 1, sig_id 2003614, track by_src, ip $HOME_NET suppress gen_id 1, sig_id 2003614, track by_either, ip 217.110.97.128/25 在上面的最后一个示例中,``by_either`` 跟踪意味着如果 ``源 IP`` 或 ``目的 IP`` 匹配 ``217.110.97.128/25``,则 sid 为 2003614 的规则将被抑制。 .. _global-thresholds-vs-rule-thresholds: 全局阈值与规则阈值 ------------------------------------ **注意:本节适用于 1.4+ 版本。在 1.3 及之前版本中,不支持混合使用规则和全局阈值。** 当规则设置了 threshold/detection_filter 时,规则仍可能受到全局阈值文件的影响。 下面的规则仅在 60 秒内从一个主机发送/接收 10 封或更多电子邮件时触发。 :: alert tcp any any -> any 25 (msg:"ET POLICY Inbound Frequent Emails - Possible Spambot Inbound"; \ flow:established; content:"mail from|3a|"; nocase; \ threshold: type threshold, track by_src, count 10, seconds 60; \ reference:url,doc.emergingthreats.net/2002087; classtype:misc-activity; sid:2002087; rev:10;) 接下来,我们将看到全局设置如何影响此规则。 Suppress ~~~~~~~~ 抑制可以与带有 thresholds/detection_filters 的规则结合使用,没有例外。 :: suppress gen_id 1, sig_id 2002087, track by_src, ip 209.132.180.67 suppress gen_id 0, sig_id 0, track by_src, ip 209.132.180.67 suppress gen_id 1, sig_id 0, track by_src, ip 209.132.180.67 上述每条规则都将确保 2002087 在电子邮件的来源是 209.132.180.67 时不发出警报。对于所有其他主机,它 **会** 发出警报。 :: suppress gen_id 1, sig_id 2002087 此抑制将简单地将规则转换为 "noalert",意味着它在任何情况下都不会发出警报。如果规则设置了 flowbit,那仍会发生。 Threshold/event_filter ~~~~~~~~~~~~~~~~~~~~~~ 当应用于特定签名时,thresholds 和 event_filters(从现在起称为 threshold)将覆盖签名设置。这在签名中的默认设置不适合您的环境时非常有用。 :: threshold gen_id 1, sig_id 2002087, type both, track by_src, count 3, seconds 5 threshold gen_id 1, sig_id 2002087, type threshold, track by_src, count 10, seconds 60 threshold gen_id 1, sig_id 2002087, type limit, track by_src, count 1, seconds 15 这些设置中的每一个都将用新的 threshold 设置替换 2002087 的 threshold 设置。 **注意:** 不支持覆盖所有 gid 或 sid(通过使用 gen_id 0 或 sig_id 0)。错误 https://redmine.openinfosecfoundation.org/issues/425。 Rate_filter ~~~~~~~~~~~ 参见 https://redmine.openinfosecfoundation.org/issues/425。