suricata框架
1. 分析框架设计原则
个人理解,suricata的框架想解决的问题如下:
高效且灵活的数据包捕获
较全面的协议解码支持(链路层/网络层/传输层协议)
流表的维护
IP重组/TCP重组(兼容一部分单边流量情况、少量丢包情况)
常见应用层协议的识别(基于端口和特征)和解析
流量内容检测(包负载、流负载及协议字段的规则匹配)
输出检测告警和协议交互信息
流量内容的保存
使流量输入、日志输出、协议解析、规则匹配等功能易于扩展
2. 框架分析
2.1 数据包捕获
suricata支持多种数据包捕获方式,其实现在source-*.c开头的文件中,可以根据配置,灵活选用各种方式进行数据包捕获。个人知识有限,仅从内存拷贝角度分析af-packet、netmap、nfq、libpcap、pfring(非zc)五种数据包捕获方式的性能:
– – – –
物理层面 网卡 - 内存 内存 - 内存 内存 - 内存
软件层面 硬件队列 - 驱动ringbuf 驱动ringbuf - 内核skb 内核skb- 用户态进程recvbuf
af-packet 有 有 可配
pfring 有 可配 可配
libpcap 有 有 可配
netmap 有 无 无
nfq 有 有 有
2.2 协议解码
注:这里所说的协议解码的含义为解析数据链路层、网络层、传输层协议头,不包含应用层负载。
2.2.1 链路层
2.2.2 网络层
2.2.3 传输层
2.3 流表的维护
2.3.1 流结构的作用
2.3.2 流表维护机制
2.4 IP重组、TCP重组
2.4.1 IP分片重组
2.4.2 TCP分段重组及状态管理
2.5 协议识别和解析
2.5.1 协议识别机制
2.5.1.1 端口识别
2.5.1.2 特征识别
2.5.1.3 自定义识别
2.5.1 协议解析机制
2.5.1.1 协议解析框架
2.5.1.2 解析器的结构
2.5.1.3 框架与解析器之间的交互
2.6 流量检测
2.6.1 规则匹配框架
2.6.2 规则匹配引擎
2.6.3 哪些配置影响规则匹配的效果?
2.7 日志输出
2.7.1 日志输出框架
2.7.2 日志输出模块的结构
2.7.3 常用的日志输出模块
————————————————
人潮没冲散当初那伙