1. 程式人生 > >運維必知的協議基礎

運維必知的協議基礎

一、什麼是SNMP? SNMP是  “Simple Network Management Protocol” 的縮寫,中文意思是簡單網路管理協議,它是由網際網路工作小組在RFC1157中定義的應用層協議,用於在網路實體或節點之間交換管理或監控資訊。 二、為什麼需要SNMP? 作為運維人員,我們很大一部分的工作就是為了保證我們的網路能夠正常、穩定的執行。因此監控,控制,管理各種網路裝置成了我們日常的工作。在網路興起的早期,維護方式就是運維人員蹲在近端對裝置進行各種操作,當網路裝置越來越多,網路規模越來越大時,管理工作會變得越來越單調乏味,這樣的近端維護方式也近乎不可能。因此,遠端管理網路的需求日益迫切,SNMP應運而生。使用SNMP,一個執行網管軟體的工作站就能對成千上萬的網路裝置進行監控和資訊採集,這些資訊可以用來構建網路或者定位網路中的問題。
三、SNMP的優點 如其名字所述,這個協議簡單易懂,部署的開銷成本也小。正因為它足夠簡單,所以被廣泛的接受,事實上它已經成為了主要的網路管理標準。在一個網路裝置上實現SNMP的管理比絕大部分其他管理方式都簡單直接。 使用SNMP將帶來如下好處: 標準化的協議:SNMP是TCP/IP網路的標準網路管理協議。網際網路標準協議是由網際網路組織志願貢獻的開放、非專利性的,SNMP的維護及將來所有的增強都將基於現有的協議標準。 廣泛認可:所有主流供應商都支援SNMP。所有SNMP管理的裝置使用相同的管理介面以支援通用的管理訊息集合。 可移植性:SNMP獨立於作業系統和程式語言。SNMP的功能設計同樣是可移植的。同時它定義了一套核心操作集,所有支援SNMP的裝置都需要支援這套操作。
輕量級:SNMP增強對裝置的管理能力的同時不會對裝置的操作方式或效能產生衝擊。網路裝置可以以極小的資源消耗和些微的負載作為代價增加SNMP的管理支援。 可擴充套件性:在所有SNMP管理的裝置上都會支援相同的一套核心操作集。SNMP也支援計算機網路裝置中各種型別的裝置資訊的互動,裝置加入網路也變得簡單。 廣泛部署:SNMP是最流行的管理協議,最為受裝置供應商關注,被廣泛部署在各種各樣的裝置上。 四、SNMP的關鍵特徵 SNMP一般主要由三個元件構成,這三個元件分別是: 網路裝置:一般是指網路中需要監控和管理的裝置或管理物件。 Agent:agent是網路裝置和管理元件的中介軟體,是駐留在網路裝置中的程式程序,它收集裝置的管理資訊並與管理元件互動。 一個典型的agent應有如下特徵:     ●支援完整的SNMP協議     ●儲存與檢索定義在MIB中的管理資訊     ●收集與維護本地裝置的資訊     ●傳送事件給管理元件     ●作為某些非SNMP可管理的節點上的代理 管理元件:
一個管理元件或者說管理系統是一個遠端部署的獨立實體(區別於agent部署於被管理裝置上)。一般典型可視為一臺部署了管理元件的計算機,並且可能從地理位置上都與網路裝置相隔甚遠,管理者只需要通過這臺計算機就能夠對裝置進行各種監控與管理操作。 一個典型的管理元件應有如下特徵:     ●實現網路管理系統     ●支援完整的SNMP協議     ●查詢agent,獲取agent 的響應訊息,設定agent的變數,告知agent非同步事件已收到等 通訊:管理元件與agent之間以協議資料單元進行通訊( Protocol Data Units,PDUs),資料在進行網路傳輸前必須進行分塊和封裝,SNMP傳輸的過程中,資料首先會被封裝成PDU,PDU再被UDP協議封裝進行傳輸。 SNMP訊息的格式可以參考下圖

snmp_message_format

1.msgVersion 指定SNMP的版本 2.msgID 指定SNMP訊息唯一辨識符 3.msgMaxSize 指定互動SNMP實體所能接收的最大訊息大小 4.msgFlags 指定訊息的安全級別 5.msgSecurityModel 指定訊息所使用的安全模式.SNMPv3為USM 6.msgAuthoritativeEngineID 此訊息互動的SNMP實體的 SNMP EngineID 7.msgAuthoritativeEngineBoots 此訊息互動的SNMP實體啟動的次數 8.msgAuthoritativeEngineTime 此訊息互動的SNMP實體自上次啟動後所過去的時間 9.msgUserName 此訊息互動的SNMP實體所使用的使用者名稱 10.msgAuthoritaticationParameters 認證協議的引數 11.msgPrivacyParameters 加密協議的引數 12.contextEngineID 作為實現了某個具體管理功能上下文的唯一辨識符 13.contextName 用來標記一個上下文的名稱 14.pdu SNMP實體間通訊資料單元 管理模式:SNMP 對於管理元件和agent的實現一般可劃分為如下三個層面:     ●協議,定義SNMP的基本操作和管理組建與agent間訊息交換的格式     ●管理資訊結構(Structure of Management Information (SMI)),定義SNMP該以何種形式訪問管理物件的規則集合     ●管理資訊庫(Management Information Base (MIB)),定義管理物件屬性的集合 MIB和SMI使用一種叫做ASN.1(Abstract Syntax Notation One)的表示法來描述,這是一種以ASCII文字格式清晰描述資料的表示法。MIB的資料通過SNMP訊息進行網路傳輸,傳輸前會通過簡單編碼規則( Basic Encoding Rules (BER))進行編碼。 五、SNMP的基本操作 SNMP是一個請求-響應式的協議,它的基本操作可以分類如下:     ●檢索資料
    ●修改變數     ●接收主動上報訊息 檢索資料:管理元件向agent傳送請求以獲取資料,有如下操作型別:     ●GET:GET請求用以從agent上獲取指定OID對應的一條或多條值。     ●GETNEXT:與GET請求類似,最明顯的區別是GETNEXT獲取指定OID在系統樹種所處位置的下一個OID。     ●GETBULK:用於從agent上獲取大表中的大量資料。 修改變數:管理元件有時會希望能夠修改裝置上的一些變數:     ●SET:管理元件使用這個命令來修改裝置的一些配置值。 接收主動上報訊息:     ●TRAP: 當agent遇到資料傳輸問題,或裝置出現故障希望上層管理元件知曉時,使用TRAP操作上報此資訊。 六、SNMP的版本 SNMP發展到目前,一共經歷了三個主要版本,SNMPv1,SNMPv2c,SNMPv3。對於當今網際網路迅猛發展的今天,資訊保安已經是一個關乎產品命運的重要問題,曾經的SNMP由於缺乏足夠的安全性而被人詬病甚至棄用,因此SNMPv3版本做了大量關於安全性的增強,這裡我們也主要關注於SNMPv3版本的特性。 SNMPv3的主要目的如下: 1.校驗收到的SNMP訊息在網路傳輸過程中是否被篡改。 2.校驗收到的SNMP訊息其身份證明是否已經被建立。 3.檢測收到的SNMP訊息是否包含管理訊息,是否是即時建立的。 4.保護每個收到的訊息的內容不會被公開。 為實現上述目標,SNMP為系統提供了一個安全的管理環境,涉及以下內容:     ●SNMP實體的身份證明以增強SNMP實體間的通訊——每一個SNMP實體都會有一個叫SNMP EngineID的身份識別符號,SNMP通訊只能發生在已知身份的SNMP實體間(TRAP和Notification不受此規則限制。)     ●支援安全模式——一個安全模式定義了管理域或內部網路中的安全策略,SNMP包含USM安全模式的實現。     ●定義訊息安全的校驗服務規範:         ○反資訊篡改:保護校驗通過的實體所生成的訊息在傳輸過程中不會被未經校驗的SNMP實體所修改。         ○反偽裝:防止SNMP實體通過偽裝成其他實體的身份來越權執行某些操作。         ○反訊息流篡改:防止SNMP訊息流被惡意重排序,推遲或重複從而施加未經校驗的管理操作。         ○反訊息洩露:防止SNMP實體通訊的資訊被竊聽。     ●USM的規格定義——USM一般由如下幾個通訊機制組成:         ○非認證不加密通訊         ○認證不加密通訊         ○認證加密通訊     ●定義不同的認證與加密協議——目前USM支援MD5和SHA認證協議,DES和AES加密協議。     ●定義發現流程:可以通過通訊地址發現SNMP實體的SNMP EngineID     ●定義時間同步流程:增強遠端SNMP實體間認證通訊。     ●定義SNMP 框架 MIB——增強對SNMP實體的管理和配置。     ●定義USM的MIB——增強遠端配置與管理的安全模式。     ●定義VACM 的MIB——增強遠端配置與管理的訪問控制。 七、SNMP的實現工具 上面講了很多關於SNMP原理的內容,瞭解完之後肯定是要具體使用,才有價值,這裡介紹一個Linux上的SNMP實現工具。 1.安裝net_snmp服務,這裡我使用yum安裝 install_snmp 2.檢查安裝情況 check_install 3.啟動並檢查SNMP的執行狀態 check_running 4.驗證SNMP服務 1)安裝snmp管理工具: snmp_util 2)執行SNMP命令查詢系統主機名: queryhost 5.配置SNMP服務 出於安全考慮,我們建立SNMPv3的安全使用者 1).停止SNMP服務,並增加SNMPv3使用者,這裡建立的使用者預設是MD5認證和DES加密 createuser 2).將認證和加密協議分別修改為SHA和AES,提高安全性,然後啟動SNMP服務 authfile modifyauthpri 3).測試該使用者的通訊訊息,成功獲取。 vequery 4).一些其他功能 檢視系統記憶體總量OID:.1.3.6.1.4.1.2021.4.5.0 queryTotalMem 檢視當前可用記憶體OID:.1.3.6.1.4.1.2021.4.6.0 queryavailableMem 檢視當前CPU負載OID:.1.3.6.1.4.1.2021.10.1.3.1 queryCPULoad 如果是遠端查詢,將localhost修改成目標主機的IP並指定SNMP的埠即可。 此外還有更多關於SNMP配置與開發,例如可以配置使用者訪問的內容,訪問的許可權,以及自定義MIB等,這裡就不再一一贅述了,如果有興趣可以去查閱相關資料進行研究。