揭開SNMP協議的面紗

寫在前面:接觸SNMP協議相關的告警已經有些年頭了,一直沒有搞清楚SNMP消息有哪些?實現原理是什么?如果你也在研究,請不吝賜教!

SNMP介紹

SNMP(simple network management protocol)是因特網架構委員會IAB定義的一個應用層協議。SNMP廣泛用于管理和監控網絡設備,大多數專業的網絡設備都有SNMP agent代理,這些代理被激活和配置后用于和SNMP管理 NMS(network management system)網絡管理系統通信。

SNMP代理和SNMP管理

SNMP作為TCP/IP協議一部分,SNMP消息被封裝為UDP(user datagram protocol)并在IP協議中封裝和傳輸,傳輸過程如下:

SNMP消息傳輸過程

UDP協議是無連接的傳輸協議。

注意:如果抓包分析SNMP消息內容,需要在Wireshark中將SNMP消息轉換為UDP消息。

SNMP共有3個版本:v1,v2和v3。v1,v2有很多共同的特征,v3 在先前的版本基礎上增加了安全和遠程配置能力 。為了解決不同版本的兼容性問題,RFC3584定義了共存策略。

SNMP架構

SNMP協議采用C/S架構,定義了三種角色:SNMP管理,SNMP代理agent和代理proxy服務器。SNMP管理作為客戶端,agent和proxy作為服務端。

SNMP管理用于get查詢下級agent或proxy的消息,set設置agent或proxy參數和接收trap上報的消息。

SNMP架構之SNMP三個角色

SNMP agent用于接收SNMP管理的請求并去網絡設備上查詢所需數據后做出合適響應和trap上報網絡設備上新產生的告警等消息給對應的SNMP管理。

SNMP proxy用于不能直接使用SNMP協議場景,如異構網絡(非IP網絡)或者不同版本SNMP代理的網絡設備。Proxy做了異種網絡或不同版本代理和相應SNMP數據請求的轉換工作。

SNMP proxy場景

問題反思:

1. SNMP管理用于get查詢下級agent或proxy的消息,如果查到的信息已經存在尚未恢復,SNMP管理是如何判重的呢?

2. 在網絡設備上有新產生的告警等消息,SNMP agent就trap上報消息給對應的SNMP管理,歷史消息不會重復上報的,有自己是否上報的判斷機制,但是如果trap上報失敗如何處理呢?


一套完整的SNMP系統主要包括管理信息庫(MIB)、管理信息結構(SMI)及SNMP報文協議。

1)管理信息庫MIB—SNMP管理和Agent的溝通橋梁:MIB是資源和對象標識符oid(object identifier)之間唯一對應關系的數據庫。任何一個被管理的資源都可以用oid來對應。每個SNMP設備(Agent)都有自己的MIB,SNMP agent必須查詢MIB庫,才能識別SNMP管理的請求。

iso.org.dod.internet.mgmt.mib.ip.ipInReceives對應的數字表示為:1.3.6.1.2.1.4.3。比如,設置或獲取系統正確運行時間的oid為1.3.6.1.2.1.1.3,更多請查看SNMP oid列表

Oid樹

2) SMI:管理信息結構。主要作用是:(1)定義了對象命名的規則;(2)定義了類型規則。(3)定義了編碼方法。

SNMP請求和響應

SNMP的請求和響應是基于UDP協議的異步消息,不需要等待響應。

1)? Get-request操作:SNMP管理從SNMP Agent提取一個或多個參數值。

2)? Get-next-request操作:SNMP管理從SNMP Agent提取一個或多個參數的下一個參數值。

3)? Get-bulk操作:SNMP管理從Agent提取批量的參數值;

4)? inform-request操作:允許一個SNMP管理a發送inform消息給其他的SNMP管理b,SNMP管理b再響應ackknowledgement給SNMP管理a。后來并沒有局限于SNMP管理,SNMP agent也可以發送inform消息,比trap又多了一層確認收到消息的保護機制。否則沒有收到可以再發送trap消息。

5)? Set-request操作:SNMP管理設置SNMP Agent的一個或多個參數值。節點有可寫屬性

6)? Get-response操作:SNMP Agent返回的一個或多個參數值,是SNMP Agent對SNMP管理前面4個操作的響應。

7)? Trap操作:SNMP Agent主動發出的報文,通知SNMP管理所發生的事情。

SNMPv1 :在RFC1157中定義,包含5個請求/響應:1),2),5),6),7)。

SNMPv2 :V2其中一個變種V2C是基于共同體(Community),在RFC1901中定義的一個實驗性協議。包含7個請求/響應:1),2),3),4),5),6),7)。

SNMPv3 :基于安全(security),包含7個請求/響應:1),2),3),4),5),6),7)。

SNMP對比

V2的Get,GetNext和Set操作相同于v1的,此外V2還加強了一些協議操作,如果get-request需要多個請求參數,如果有一個不存在,請求會被正常執行,但在v1中會響應一個錯誤消息。v1版本在trap消息和其他get/set操作消息的PDU不同,v2版本簡化了trap消息,使get/set/trap消息的pdu相同。

SNMP查詢上報通知流程

SNMP管理查詢的SNMP agent的端口是161,接收SNMP agent上報或通知的SNMP管理的端口上162,SNMP管理和agent之間的通訊過程如下:

SNMP管理和agent通信過程

SNMP管理的查詢和設置流程,結合SNMP請求和響應:a. 1)或2)或3)或5)請求資源場景,通過資源在mib找到oid,分別組裝UDP協議報文傳輸給SNMP agent。b. agent根據請求中的oid去mib 中找到對應的資源:如果oid是查詢某個消息(含批量的),然后去設備上查找資源信息;如果oid是設置agent的參數,則設置agent參數。c. SNMP agent查詢到數據或設置參數成功則做出響應6),組裝UDP協議返回給SNMP管理。

SNMP管理查詢/設置流程

SNMP agent上報流程,結合SNMP請求和響應:a. SNMP agent檢測到設備上有資源消息產生,根據資源消息,到mib中找到對應oid,通過7)trap上報,封裝為UDP協議消息上報給SNMP管理。b. SNMP管理收到上報信息后查詢和agent一樣的mib庫,通過oid找到資源消息。

SNMP上報流程

SNMP inform流程,結合SNMP請求和響應:a. SNMP agent檢測到設備上有資源消息產生,根據資源消息,到mib中找到對應oid,通過4)inform上報,封裝為UDP協議消息上報給SNMP管理。b. SNMP管理收到上報信息后查詢和agent一樣的mib庫,通過oid找到資源消息,然后響應給SNMP agent消息acknowledgement以確認收到消息,否則可以再次發送inform消息。這是比trap實現相比的優勢。SNMP管理之間發送inform消息也是相同的流程。

SNMP通知流程
SNMP協議之安全

V1,V2均采用明文傳送,V3采用加密傳送,即SNMPV1,V2用抓包工具能在數據包中直接看到團體名。

v1只使用一種安全策略,團體名(和密碼相似)。Agent能夠被設置回答哪些團體名(SNMP管理)的查詢,很容易讓人截取得到團體名或密碼。

v2增加了不少額外的安全。首先所有的包信息除了目的地址,其他都被加密(含團體名和源IP地址)。Agent 能夠解開加密包獲取團體名和源IP地址使請求有效。

v2在安全策略演變時存在多個變種,實際存在多個消息格式。各個v2變種之間的PDU有相同的格式,而總的消息格式又不同。

v3提供三重的安全機制:最高層是認證和私密,中間層提供認證而沒有私密,底層沒有任何的認證機制和私密。

v3 在前面的版本上增加了安全能力和遠程配置能力,v3為消息安全和VACM(View-based Access Control Model)引入了USM(User-based Security Model),該結構支持同時使用不同的安全機制,接入控制,消息處理模型。有三個可能的安全級別: noAuthNoPriv, authNoPriv, 和 authPriv。noAuthNoPriv 級別指明了沒有認證或私密性被執行。authNoPriv 級別指明了認證被執行但沒有私密性被執行。authPriv 級別指明了認證和私密性都被執行。auth---認證 支持MD5 or SHA;priv---加密 支持DES or RSA;

通用的v3消息格式遵循相同的消息封裝格式包含一個頭和一個被封裝PDU。 頭部區域,被分成兩個部分,一部分處理安全,和另外一部份與安全無關的部分。與安全無關部分在所有的SNMPv3中是相同的,而使用安全相關部分被設計成各種的SNMPv3安全模型,被SNMP內的安全模型處理。

了解完理論,又到了要實踐的時候了!

it is SNMP show time!!

下期預播:SNMP相關工具!

有心的朋友,可能看到SNMP報文內容怎么沒有介紹!這部分會在實踐后再進行介紹!

參考資料:

SNMP tutorial教程

SNMP原理

SNMP wikipedia

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,024評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,328評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,878評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,098評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,616評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,554評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,725評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,971評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,339評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,695評論 2 370

推薦閱讀更多精彩內容