suricata 流管理
admin
2024-04-02 05:16:11

一、Flow

所有相同元组(协议,源IP,目的IP,源端口,目的端口)的包分组属于同一流。使用flow管理一个会话。

通常我们也指从一端到另一端的一次网络数据传输过程。其包含连接的建立,数据的传输。一条流往往指的是一次完成的数据传输,其包含了该过程中所有的数据包。但是一个连接可以有多个流,即在连接建立之后,可以有多次的数据传输。

二、Flow的管理

suricata实现了流管理机制来回收与重复利用Flow。suricata使用三个线程维护这三个队列(Flow哈希表,Flow备用队列,Flow回收队列)。

其中:

2.1 线程

        ①FlowManager线程:从流表中摘除超时的流放入回收队列,检查空闲队列长度是否为预设值,若过长则释放一部分,若过短则申请一部分。

// 根据配置创建flow_managers线程个数
void FlowManagerThreadSpawn()
{intmax_t setting = 1;(void)ConfGetInt("flow.managers", &setting);if (setting < 1 || setting > 1024) {FatalError(SC_ERR_INVALID_ARGUMENTS,"invalid flow.managers setting %"PRIdMAX, setting);}flowmgr_number = (uint32_t)setting;SCLogConfig("using %u flow manager threads", flowmgr_number);StatsRegisterGlobalCounter("flow.memuse", FlowGetMemuse);// 注册一个全局的原子的flow计数器flow_memusefor (uint32_t u = 0; u < flowmgr_number; u++) {char name[TM_THREAD_NAME_MAX];snprintf(name, sizeof(name), "%s#%02u", thread_name_flow_mgr, u+1);ThreadVars *tv_flowmgr = TmThreadCreateMgmtThreadByName(name,"FlowManager", 0);// 创建线程变量结构体BUG_ON(tv_flowmgr == NULL);if (tv_flowmgr == NULL) {FatalError(SC_ERR_FATAL, "flow manager thread creation failed");}if (TmThreadSpawn(tv_flowmgr) != TM_ECODE_OK) { // 根据生成的线程名创建线程FatalError(SC_ERR_FATAL, "flow manager thread spawn failed");}}return;
}

        ②FlowRecyler线程:从回收队列中摘除Flow,调用注册流输出模块的回掉,清空Flow信息,插入回收队列。

        ③FlowWorker线程:

  • 对于新到达的包,在流表中查找其对应Flow结构,若存在则直接引用
  • 若流表中不存在对应此包的Flow结构,则按如下优先级获取一个新的Flow结构
    1. 从空闲队列中取出一个Flow结构
    2. 重新申请一个Flow结构
    3. 从流表中去除一个当前未被引用的Flow结构,清空其内容并重新插入流表

2.2 三种队列

Flow哈希表: 这个是FlowBucket *flow_hash 数组,数据大小为配置中的 flow_config 的 hash_size,其在数组中的每一个FlowBucket元素中都挂了一串之前数据包对应的Flow链队列。

Flow备用队列: static FlowSparePool *flow_spare_pool 备用池链队列,其每一个链pool中都挂载一个备用Flow队列。

Flow回收队列: FlowQueue flow_recycle_q 回收队列,挂载一个备用Flow队列。

2.3 Flow管理流程

①当一个数据包来到时,计算数据包对应的hash值

②在后续的模块中将使用这个hash 在Flow哈希表中找到 FlowBucket ,不同会话的hash值可能相同,所以不是比较hash相同来定位Flow,而是在篮子里顺序查找具有相同五元组和vlan的Flow,找到则利用此Flow

③若Flow哈希表中没有,则在Flow备用队列取出一个Flow, 或是新建一个Flow使用,同时把这个Flow插入到Flow哈希表


 

相关内容

热门资讯

山水皆有情!丽江两山一江的千年... 去过丽江、走过虎跳峡的人,大概率都听过哈巴雪山和金沙江的传说。很多人站在峡谷之下,望着奔腾不息的金沙...
活力中国调研行丨“殷”你而来 ... 9月12日,游客在殷墟博物馆“甲骨文展厅”内参观。位于河南省安阳市的殷墟博物馆新馆是首个全景式展现商...
浦江之夜赴美好相逢,第37届上... 9月12日晚,黄浦江畔灯火璀璨,第37届上海旅游节大巡游在外滩中山东一路上演。不少观众早早便来到外滩...
美丽中国丨秋韵紫鹊界 梯田入画... 这是9月11日拍摄的紫鹊界梯田(无人机照片)。 金秋九月,湖南省娄底市新化县紫鹊界梯田稻谷渐次成熟。...
中国之巅奏响《共同的节日》,千... 千吨阻尼器,“迎世赛、游上海旅游节”。9月13日,由上海市文化和旅游局指导推出上海旅游·会客│巅峰之...