SNMP系統講解

一、首先我首先要說下什麼是SNMP?

SNMP是簡單的網絡管理協議,它不是一個軟件,而是用於網絡管理的一套規則。利用SNMP,一個管理工作站可以遠程管理所有支持這種協議的網絡設備,包括監視網絡狀態、修改網絡設備配置、接收網絡事件警告等。

但話又說回來,爲什麼要使用SNMP協議?

因爲網絡設備可能來自不同的廠商,如果每個廠商提供一套獨立的管理接口,將使網絡管理變得越來越複雜,若想對網絡中來自不同廠商的設備監控,用基於SNMP開發的軟件進行管理最方便的,因爲大部分的設備都支持SNMP協議。

那麼SNMP有哪些技術有點?

(1)基於TCP/IP互聯網的標準協議,傳輸層協議一般用UDP

(2)自動化網絡管理。網絡管理員可以利用SNMP平臺在網絡上的節點檢索信息、修改信息、發現故障、完成故障診斷、進行容量規劃和生成報告

(3)屏蔽不同設備的物理差異,實現對不同廠商產品的自動化管理。SNMP只提供最基本得功能集,使得管理任務與被管理設備的物理特徵和實際網絡類型相對獨立,從而實現對不同廠商設備的管理

(4)簡單的請求-應答方式和主動通告方式相結合,並有超時和重傳機制

(5)報文種類少,報文格式簡單,方便解析,易於實現

(6)SNMPv3版本提供了認證和加密安全機制,以及基於用戶和視圖的訪問控制功能,增強了安全性

 

二、SNMP的網絡架構

SNMP網絡架構由三部分組成:NMS(網絡管理站)、Agent(代理)、MIB(管理信息庫)

1、NMS(網絡管理站)

NMS是網絡中的管理者,是一個利用SNMP協議對網絡設備進行管理和監視的系統。可以是一臺專門用來進行網絡管理的服務器,也可以指某個設備中之中管理功能的一個應用程序。

NMS可以向Agent發出請求,查詢或修改一個或多個具體的參數值。同時,NMS可以接收Agent主動發送的Trap信息,以獲知被管理設備當前的狀態

 

2、Agent

Agent是網絡設備中的一個應用模塊,用於維護被管理設備的信息數據,並響應NMS的請求,把管理數據彙報給發送請求的NMS。

 

Aent接收到NMS的請求信息後,完成查詢或修改操作,並把操作結果發送給NMS,完成響應。同時,當設備發生故障或者其他事件的時候,Agent會主動發送Trap信息給NMS,通知設備當前的狀態變化。

 

3、MIB

任何一個被管理的資源都表示成一個對象,稱爲被管理的對象。MIB就是被管理對象的集合。它定義了被管理對象的一系列的屬性:對象的名稱、對象的訪問權限和對象的數據

類型等。每個Agent都有自己的MIB。MIB也可以看做是NMS和Agent之間的一個接口,通過這個接口,NMS可以對Agent中的每一個被管理對象進行讀/寫操作,從而達到管理和監控設備的目的。

 

NMS、Agent和MIB之間的關係如圖所示:

 

 

MIB的結構:

MIB是以樹狀結構進行存儲的,樹的節點表示被管理對象,它可以用從根開始的一條路徑唯一地識別,這條路徑就稱爲OID。

如圖所示,管理對象system可以用一串數字{1.3.6.1.2.1.1}唯一標識,這串數字就是system的OID。

 

 

 

 三、SNMP的操作

 

後續的文章我們會通過抓包工具來抓取報文,來具體的分析SNMP報文的格式,以及SNMPv1、v2c、v3版本的相同與區別,以及v3所用的基於用戶和基於視圖的安全措施,認證和加密的過程!

 

上一篇文章講解了SNMP的基本架構,本篇文章將重點分析SNMP報文,並對不同版本(SNMPv1、v2c、v3)進行區別!

四、SNMP協議數據單元

在SNMP管理中,管理站(NMS)和代理(Agent)之間交換的管理信息構成了SNMP報文,報文的基本格式如下圖1:

                                                              圖 1

SNMP主要有SNMPv1、SNMPV2c、SNMPv3幾種最常用的版本。

1、SNMPv1

 

SNMPv1是SNMP協議的最初版本,提供最小限度的網絡管理功能。SNMPv1的SMI和MIB都比較簡單,且存在較多安全缺陷。

SNMPv1採用團體名認證。團體名的作用類似於密碼,用來限制NMS對Agent的訪問。如果SNMP報文攜帶的團體名沒有得到NMS/Agent的認可,該報文將被丟棄。

報文格式如下圖2:

                                                                 圖 2

從上圖可以看出,SNMP消息主要由Version、Community、SNMP PDU幾部分構成。其中,報文中的主要字段定義如下:

Version:SNMP版本

Community:團體名,用於Agent與NMS之間的認證。團體名有可讀和可寫兩種,如果是執行Get、GetNext操作,則採用可讀團體名進行認證;如果是執行Set操作,則採用可寫團體名進行認證。

Request ID:用於匹配請求和響應,SNMP給每個請求分配全局唯一的ID。

Error status:用於表示在處理請求時出現的狀況,包括noError、tooBig、noSuchName、badValue、readOnly、genErr。

Error index:差錯索引。當出現異常情況時,提供變量綁定列表(Variable bindings)中導致異常的變量的信息。

Variable bindings:變量綁定列表,由變量名和變量值對組成。

enterprise:Trap源(生成Trap信息的設備)的類型。

Agent addr:Trap源的地址。

Generic trap:通用Trap類型,包括coldStart、warmStart、linkDown、linkUp、authenticationFailure、egpNeighborLoss、enterpriseSpecific。

Specific trap:企業私有Trap信息。

Time stamp:上次重新初始化網絡實體和產生Trap之間所持續的時間,即sysUpTime對象的取值。

用Wireshark抓取的SNMPv1版本的報文格式如下圖3:

                                                                                                      圖 3

192.168.2.1是Agent的ip地址,192.168.2.110是NMS的ip地址

從上圖可以看到,SNMPv1版本的安全性不太好,可以抓取到community也即是團體名;tarp操作只有發送報文沒有響應報文。

 


2、SNMPv2c

SNMPv2c也採用團體名認證。在兼容SNMPv1的同時又擴充了SNMPv1的功能:它提供了更多的操作類型(GetBulk和inform操作);支持更多的數據類型(Counter32等);提供了更豐富的錯誤代碼,能夠更細緻地區分錯誤。

在v1版本中只有數據類型的錯誤碼,而v2c版本中增加了不少,如下圖4:

                                             圖 4

SNMPv2報文格式如下圖5:

                                                               圖 5

 

比較SNMPv1而言,SNMPv2c新增了GetBulk操作報文和inform操作報文。GetBulk操作所對應的基本操作類型是GetNext操作,通過對Non repeaters和Max repetitions參數的設定,高效率地從Agent獲取大量管理對象數據。而inform操作也就是相當於Trap的升級操作,但是二者又有什麼不同之處呢?Trap報文發出去之後不會收到響應報文,而inform報文在發出報文之後能收到響應報文。

抓取的報文格式如下:

(1)GetBulk操作,批量獲取數據,如下圖6:

                                                                                               圖 6

(2)inform操作,可以看到它與trap操作的區別,有個響應報文,如下圖7:

                                                                                              圖 7

 

SNMPv2c修改了Trap報文格式。SNMPv2c Trap PUD採用SNMPv1 Get/GetNext/Set PDU的格式,並將sysUpTime和snmpTrapOID作爲Variable bindings中的變量來構造報文(可參照上圖3的get-next的response和下圖9SNMPv2的trap進行對比),報文格式如下:

(1)SNMPv1版本的tarp報文格式如下圖8:

                                                                                           圖 8

(2)SNMPv2的trap報文格式如下圖9:

                                                                                           圖 9

3、SNMPv3

 

SNMPv3主要在安全性方面進行了增強,它採用了USM和VACM技術。USM提供了認證和加密功能,VACM確定用戶是否允許訪問特定的MIB對象以及訪問方式。

USM(基於用戶的安全模型)

USM引入了用戶名和組的概念,可以設置認證和加密功能。認證用於驗證報文發送方的合法性,避免非法用戶的訪問;加密則是對NMS和Agent之間傳輸的報文進行加密,以免被竊聽。通過有無認證和有無加密等功能組合,可以爲NMS和Agent之間的通信提供更高的安全性。

VACM(基於視圖的訪問控制模型)

VACM技術定義了組、安全等級、上下文、MIB視圖、訪問策略五個元素,這些元素同時決定用戶是否具有訪問的權限,只有具有了訪問權限的用戶才能管理操作對象。在同一個SNMP實體上可以定義不同的組,組與MIB視圖綁定,組內又可以定義多個用戶。當使用某個用戶名進行訪問的時候,只能訪問對應的MIB視圖定義的對象。

由於v3版本的增加了不少內容,所以決定在下一篇文章中再詳細的講解SNMPv3。

 

在上篇文章中,說到了SNMPv3主要在安全性方面進行了增強,採用USM(基於用戶的安全模型)和VACM(基於視圖的訪問控制模型)技術。下面我們就主要講解SNMPv3的報文格式以及基於USM的認證和加密過程!

1、SNMPv3的消息格式如下圖1:

                                                                      圖 1

 

其中,整個SNMPv3消息可以使用認證機制,並對EngineID、ContextName、PDU消息體部分進行加密。RequestID、MaxSize、Flags、SecurityModel、SecurityParameters構成SNMPv3消息頭。

報文中的主要字段定義如下:

RequestID:請求報文的序列號。

MaxSize:消息發送者所能夠容納的消息最大字節,同時也表明了發送者能夠接收到的最大字節數。

Flags:消息標識位,佔一個字節。

SecurityModel:消息的安全模型值,取值爲0~3。0表示任何模型,1表示採用SNMPv1安全模型,2表示採用SNMPv2c安全模型,3表示採用SNMPv3安全模型。

ContextEngineID:唯一識別一個SNMP實體。對於接收消息,該字段確定消息該如何處理;對於發送消息,該字段在發送一個消息請求時由應用提供。

ContextName:唯一識別在相關聯的上下文引擎範圍內部特定的上下文。

安全參數SecurityParameters又包括以下主要字段:

AuthoritativeEngineID:消息交換中權威SNMP的snmpEngineID,用於SNMP實體的識別、認證和加密。該取值在Trap、Response、Report中是源端的snmpEngineID,對Get、GetNext、GetBulk、Set中是目的端的snmpEngineID。

AuthoritativeEngineBoots:消息交換中權威SNMP的snmpEngineBoots。表示從初次配置時開始,SNMP引擎已經初始化或重新初始化的次數。

AuthoritativeEngineTime:消息交換中權威SNMP的snmpEngineTime,用於時間窗判斷。

UserName:用戶名,消息代表其正在交換。NMS和Agent配置的用戶名必須保持一致。

AuthenticationParameters:認證參數,認證運算時所需的密鑰。如果沒有使用認證則爲空。

PrivacyParameters:加密參數,加密運算時所用到的參數,比如DES CBC算法中形成初值IV所用到的取值。如果沒有使用加密則爲空。

 

2、下面根據實際操作,用Wireshark抓取的報文來講解SNMPv3協議的工作的過程:

說明:192.168.2.110是NMS的ip地址,192.168.2.1是Agent的ip地址

(1)由於SNMPv3進行數據交互的過程中要進行加密和認證,所以NMS首先要從Agent獲取AuthoritativeEngineID(標識一個SNMP實體)、AuthoritativeEngineBoots和AuthoritativeEngineTime(同步NMS和Agent時間,保證消息接收的時效性,同時也是用來進行數據認證和加密的參數),如下圖2:

                                                                                     圖 2

(2)Agent回覆NMS請求的參數,回覆報文如下圖3:

                                                                               圖 3

(3)NMS繼續向Agent獲取AuthoritativeEngineBoots和AuthoritativeEngineTime參數,如下圖4:

                                                                                  圖 4

(4)Agent對NMS的請求進行響應,如下圖5:

                                                                           圖 5

(5)下面開始正常數據操作,如下圖6:

                                                                              圖 6

(6)Agent向NMS響應數據請求,如下圖7,傳輸的數據都進行了加密,可見SNMPv3的安全性:

                                                                              圖 7

 

 下一篇文章的主要內容主要就是講SNMPv3的認證和加密過程!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章