寫在前面:接觸SNMP協議相關的告警已經有些年頭了,一直沒有搞清楚SNMP消息有哪些?實現原理是什么?如果你也在研究,請不吝賜教!
SNMP介紹
SNMP(simple network management protocol)是因特網架構委員會IAB定義的一個應用層協議。SNMP廣泛用于管理和監控網絡設備,大多數專業的網絡設備都有SNMP agent代理,這些代理被激活和配置后用于和SNMP管理 NMS(network management system)網絡管理系統通信。
SNMP作為TCP/IP協議一部分,SNMP消息被封裝為UDP(user datagram protocol)并在IP協議中封裝和傳輸,傳輸過程如下:
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 agent用于接收SNMP管理的請求并去網絡設備上查詢所需數據后做出合適響應和trap上報網絡設備上新產生的告警等消息給對應的SNMP管理。
SNMP proxy用于不能直接使用SNMP協議場景,如異構網絡(非IP網絡)或者不同版本SNMP代理的網絡設備。Proxy做了異種網絡或不同版本代理和相應SNMP數據請求的轉換工作。
問題反思:
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列表。
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)。
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管理的查詢和設置流程,結合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 agent上報流程,結合SNMP請求和響應:a. SNMP agent檢測到設備上有資源消息產生,根據資源消息,到mib中找到對應oid,通過7)trap上報,封裝為UDP協議消息上報給SNMP管理。b. SNMP管理收到上報信息后查詢和agent一樣的mib庫,通過oid找到資源消息。
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協議之安全
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報文內容怎么沒有介紹!這部分會在實踐后再進行介紹!
參考資料: