經過前面多篇文章的總結以snort讀取規則文件搭建結構爲切入點; 對snort提取規則中的數據搭,建後續處理結構的結構的過程進行了分析,這裏總結前面的經驗以圖示的方式說明snort規則管理的整體結構。python
每條規則的最前方,如alert標識動做(這裏討論較廣泛的條目)tcp
每條規則包含規則選項和規則頭部,即 規則 = 規則頭 + 規則選項函數
在 '(' ')'中的部分稱爲規則選項,規則選項中的條目採用鍵值對的方式表述,規則選項中的鍵值對較多但值的表示方式都較爲簡單。spa
除規則選項之外的部分稱爲規則頭部,規則頭包含動做, 源地址,源端口, 報文方向, 目地地址,目地端口,規則頭部的屬性較少,但地址和端口的值的表示方式較爲複雜。 .net
alert tcp any any -> any 21 (msg:"Telnet NOP"; content:"|FF F1|"; rawbytes; sid: 2)
snort的動做種類較少,所以snort中使用動做做爲管理的頂層鏈表,頂層鏈表中每一個節點表明一個動做。同時該節點又是規則頭部的頭節點。
code
這裏將snort中的規則頭部簡稱RTN,如圖所示,規則頭部的動做相同的單元都放在對應動做的管理鏈表中。blog
以下圖所示,咱們將規則選項簡稱爲OTN;每一個RTN持有RuleFpList和OTN鏈表,前者是使用RTN中屬性觸發進行二次處理的回調函數,後者是規則選項集合。回調函數
以下圖所示,每一個規則選項又持有OptFpList鏈表,該鏈表中存放的主要是對匹配規則選項處理時的一些通用回調函數,其是由解析規則選項的鍵值對時選擇性的初始化並放入OTN中的.
class
http://my.oschina.net/u/572632/blog/289961配置
http://my.oschina.net/u/572632/blog/289894