首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >snort中RLH、RTN、OTN 的详细工作原理

snort中RLH、RTN、OTN 的详细工作原理

原创
作者头像
编程菜鸟
发布2026-04-06 19:44:17
发布2026-04-06 19:44:17
100
举报

一条 Snort 规则长这样:

plaintext

代码语言:javascript
复制
alert tcp 192.168.1.0/24 any -> 10.0.0.0/8 80 (msg:"xxx"; content:"yyy"; sid:1001;)

规则头就是前面这一段:

plaintext

代码语言:javascript
复制
tcp 192.168.1.0/24 any -> 10.0.0.0/8 80

包含:

  • 协议(tcp)
  • 源 IP
  • 源端口
  • 方向(->)
  • 目的 IP
  • 目的端口这部分就是 RTN 存的东西

一条 Snort 规则分两部分:

plaintext

代码语言:javascript
复制
alert tcp 源IP 源端口 -> 目的IP 目的端口  ( msg:"xxx"; content:"yyy"; sid:1001; )
└────────────── 规则头 ──────────────┘    └────────── 规则选项 ──────────┘
              RTN                                OTN

OTN 里存的就是括号里的内容:

  • msg 规则描述
  • content 包内容关键字
  • sid 规则 ID
  • flags TCP 标志位
  • ttl 生存时间
  • dsize 包大小
  • 各种检测插件、检测函数

这些每条规则都可能不一样的部分,就放在 OTN


2. RTN 和 OTN 的关系(最关键)

  • 一个 RTN 下面,可以挂多个 OTN
  • RTN 是 “公共头部”
  • OTN 是 “各自的检测条件”

举个最直观的例子

两条规则头部一样(共享同一个 RTN),但选项不同(各自 OTN):

规则 1:

plaintext

代码语言:javascript
复制
alert tcp 192.168.1.0/24 any -> 10.0.0.0/8 80 (msg:"A"; content:"aaa"; sid:1001;)

规则 2:

plaintext

代码语言:javascript
复制
alert tcp 192.168.1.0/24 any -> 10.0.0.0/8 80 (msg:"B"; content:"bbb"; sid:1002;)

结构就是:

plaintext

代码语言:javascript
复制
RTN(头部相同)
   ├─ OTN1 → 规则1的选项
   └─ OTN2 → 规则2的选项

Snort 中 RLH、RTN、OTN 的详细工作原理

三者共同组成 Snort 三维规则链表 核心结构,是 Snort 入侵检测引擎实现高速、高效规则匹配的关键。整体遵循 **「顶层粗筛 → 中层共享匹配 → 底层精查」** 的分层工作逻辑,逐层缩小匹配范围,避免遍历全部规则。

一、RLH(Rule List Header,规则链表头)

1. 核心定位

三维规则链表的最顶层入口节点,按规则动作(Action)对所有规则做一级分类,是规则匹配的第一道筛选关卡

2. 存储内容

仅存储规则动作类型,Snort 核心动作分为:

alert(告警)、log(日志记录)、pass(放行)、activatedynamic

每一种动作对应独立的一个 RLH 节点,不同动作的规则完全隔离。

3. 工作原理

  1. 数据包进入 Snort 检测引擎后,引擎先根据检测策略,确定需要匹配的规则动作类型(如优先匹配 alert 告警规则);
  2. 直接定位到对应动作的 RLH 链表头跳过其他所有动作的规则链表
  3. RLN 作为入口,指向该动作下按网络协议划分的规则集合,完成第一层快速剪枝。

二、RTN(Rule TreeNode,规则树节点)

1. 核心定位

三维规则链表的中层节点,存储规则头(Rule Header)信息,实现相同头部规则的共享匹配,是规则匹配的第二道筛选关卡

2. 存储内容

规则头的核心五元组 / 四元组特征:

网络协议(TCP/UDP/ICMP/IP)、源 IP、源端口、目的 IP、目的端口、数据流向(->、<>)。

3. 工作原理

  1. 规则共享机制:多条规则若规则头完全相同,仅创建一个 RTN 节点,所有这类规则共用该 RTN,避免重复创建节点;
  2. 匹配逻辑:数据包进入对应 RLH 后,引擎提取数据包的协议、IP、端口、流向,与 RTN 存储的规则头特征匹配;
  3. 筛选效果:仅匹配成功的 RTN 会被保留,进入下级 OTN 节点,无需重复对每条规则做头部匹配,大幅减少计算量;
  4. 一个 RTN 节点可挂载多个 OTN 节点,对应多条头部相同、仅检测选项不同的规则。

三、OTN(Option TreeNode,选项树节点)

1. 核心定位

三维规则链表的最底层节点,存储规则选项(Rule Options),负责最终的精准特征匹配,是规则触发的最终判定节点

2. 存储内容

规则括号内的所有检测特征与配置:

content(报文特征串)、msg(告警信息)、sid(规则 ID)、flags(TCP 标志位)、ttldsize(包大小)、pcre(正则)等入侵检测特征。

每条独立规则对应唯一的 OTN 节点

3. 工作原理

  1. 数据包通过 RTN 头部匹配后,引擎遍历该 RTN 下挂载的所有 OTN 节点
  2. 对每个 OTN 存储的全部规则选项做逐一枚举匹配(如检查报文中是否含指定 content 特征、TCP 标志位是否匹配);
  3. 所有选项特征均匹配成功,则判定该数据包命中规则,触发对应动作(告警、记录、放行等);
  4. 若任意选项不匹配,则跳过该 OTN,继续匹配下一个,直至遍历完成。

四、三者协同的完整工作流程(三维匹配全链路)

  1. 数据包入引擎:网络数据包到达 Snort,提取基础特征;
  2. RLH 顶层筛选:按检测动作定位对应 RLH,排除其他动作规则;
  3. RTN 中层匹配:匹配数据包协议、IP、端口、流向,命中共享 RTN 节点;
  4. OTN 底层精查:遍历 RTN 下的 OTN,逐一匹配规则选项特征;
  5. 规则触发:OTN 全部特征匹配 → 执行规则动作(alert/log/pass);无匹配 → 放行数据包。

五、核心设计价值总结

  1. RLH:按动作分类,实现一级快速粗筛,减少规则匹配范围;
  2. RTN:共享规则头,避免重复匹配 IP / 端口 / 协议,大幅提升检测效率;
  3. OTN:负责最终特征精查,保证入侵检测的准确性
  4. 整体:通过分层嵌套 + 特征共享,解决海量规则下的高速匹配问题,是 Snort 高性能的核心原理。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2. RTN 和 OTN 的关系(最关键)
    • 举个最直观的例子
  • Snort 中 RLH、RTN、OTN 的详细工作原理
    • 一、RLH(Rule List Header,规则链表头)
      • 1. 核心定位
      • 2. 存储内容
      • 3. 工作原理
    • 二、RTN(Rule TreeNode,规则树节点)
      • 1. 核心定位
      • 2. 存储内容
      • 3. 工作原理
    • 三、OTN(Option TreeNode,选项树节点)
      • 1. 核心定位
      • 2. 存储内容
      • 3. 工作原理
    • 四、三者协同的完整工作流程(三维匹配全链路)
    • 五、核心设计价值总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档