Suricata- 流的处理
Thank Zhihao Tao for your hard work. The document spent countless nights and weekends, using his hard work to make it convenient for everyone.
If you have any questions, please send a email to zhihao.tao@outlook.com
1. 流的内存处理
在suricata中跟踪流就需要使用内存。流越多,所需的内存就越多。
因此我们要保持对内存使用的控制,有几个选项:
用于设置流引擎将使用的最大字节数的memcap选项
用于设置哈希表大小的哈希大小
用于以下内容的预分配:
- 对于还不属于流的数据包,Suricata创建了一个新的流。这是一个相对昂贵的行动。
- 由此带来的风险是,攻击者/黑客可以在此部分攻击引擎系统。
- 当它们确保一台计算机获得许多具有不同元组的数据包时,引擎必须生成许多新的流。
- 这样,攻击者就可以淹没系统。
- 为了减轻引擎过载,此选项指示Suricata在内存中保持多个流就绪。这样一来,Suricata就不那么容易受到此类攻击。
流引擎有一个独立于包处理的管理线程。这个线程称为流管理器。该线程确保尽可能在Memcap内。将准备10000个流。
1.1 memcap选项
memcap选项用于设置流引擎将使用的最大字节数。
默认memcap为32M,即33554432字节。
通过
FLOW_CHECK_MEMCAP
来检查内存分配的字节数是否超过了memcap。
1.2 hash_size选项
hash_size选项用于设置哈希表大小的哈希大小。
hash种子是一个随机数。
hash大小默认为65536。
1.3 prealloc选项
prealloc选项用于设置内存中预分配流的数量。
1.4 emergency_recovery选项
emergency_recovery
选项使得流引擎进入紧急模式。在此模式下,引擎将利用较短的超时时间。其让流利用较短的超时时间,它使流以更积极的方式过期,因此将有更多空间容纳新的流。
紧急恢复。紧急恢复设置为30。这是预分配流的百分比,在此百分比之后,流引擎将恢复正常(当10000个流中的30%完成时)。
修剪流。如果在紧急模式中,过度超时没有所需的结果,则此选项是最终的解决方案。它结束了一些流,即使他们还没有达到他们的超时时间。
修剪流
选项显示每次设置新流时将终止的流的数量。
1.4.1 紧急模式进入
获取新的Flow
如果达到MEMCAP后,进入紧急模式,超时时间改为紧急超时时间。
遍历哈希,直到可以释放流。
- 不要修剪包或流消息在使用的流。
- 输出日志。
- flow_prune_idx
确保我们不会每次都从顶部开始,因为那样会清除散列的顶部,从而导致在高压下搜索时间越来越长。
从hash中删除,设置FORCED和EMERGENCY标志。
log记录,清除旧内存,初始为新状态,增加
flow_prune_idx
。
1.4.1 紧急模式退出
获取spare队列中的flow数
如果可用flow与预分配流的百分比大于
emergency_recovery
选项的配置。
恢复正常的超时时间,退出紧急状态。
未完待续...
版权声明: 本文为 InfoQ 作者【Phantasm】的原创文章。
原文链接:【http://xie.infoq.cn/article/81296e25aaf5787ff6ae4b19c】。
本文遵守【CC BY-NC-SA】协议,转载请保留原文出处及本版权声明。
评论