當前位置:首頁 > 百科知識 > 光通訊 > 正文

SNMP

SNMP(Simple Network Management Protocol,簡單網(wǎng)絡管理協(xié)議)的前身是簡單網(wǎng)關監(jiān)控協(xié)議(SGMP),用來對通信線路進行管理。

SNMP

  SNMP(Simple Network Management Protocol,簡單網(wǎng)絡管理協(xié)議)的前身是簡單網(wǎng)關監(jiān)控協(xié)議(SGMP),用來對通信線路進行管理。隨后,人們對SGMP進行了很大的修改,特別是加入了符合Internet定義的SMI和MIB:體系結構,改進后的協(xié)議就是著名的SNMP。SNMP的目標是管理互聯(lián)網(wǎng)Internet上眾多廠家生產(chǎn)的軟硬件平臺,因此SNMP受Internet標準網(wǎng)絡管理框架的影響也很大?,F(xiàn)在SNMP已經(jīng)出到第三個版本的協(xié)議,其功能較以前已經(jīng)大大地加強和改進了。

 

目錄

基本簡介
【SNMP風險】
【SNMP數(shù)據(jù)】
【SNMP發(fā)展】
【管理信息庫】
【SNMP的運行過程】
【SNMP的常用程序開發(fā)】

  基本簡介

  SNMP的體系結構是圍繞著以下四個概念和目標進行設計的:保持管理代理(agent)的軟件成本盡可能低;最大限度地保持遠程管理的功能,以便充分SNMP工作原理利用Internet的網(wǎng)絡資源;體系結構必須有擴充的余地;保持SNMP的獨立性,不依賴于具體的計算機、網(wǎng)關和網(wǎng)絡傳輸協(xié)議。在最近的改進中,又加入了保證SNMP體系本身安全性的目標。

  【SNMP風險】

  接入Internet的網(wǎng)絡面臨許多風險,Web服務器可能面臨攻擊,郵件服務器的安全也令人擔憂。但除 此之外,網(wǎng)絡上可能還存在一些隱性的漏洞。大多數(shù)網(wǎng)絡總有一些設備運行著SNMP服務,許多時候這些SNMP服務是不必要的,但卻沒有引起網(wǎng)絡管理員的重視。

  根據(jù)SANS協(xié)會的報告,對于接入Internet的主機,SNMP是威脅安全的十大首要因素之一;同時,SNMP還是Internet主機上最常見的服務之一。特別地,SNMP服務通常在位于網(wǎng)絡邊緣的設備(防火墻保護圈之外的設備)上運行,進一步加劇了SNMP帶來的風險。這一切聽起來出人意料,但其實事情不應該是這樣的。    

  〖一、背景知識〗   

  SNMP開發(fā)于九十年代早期,其目的是簡化大型網(wǎng)絡中設備的管理和數(shù)據(jù)的獲取。許多與網(wǎng)絡有關的軟件包,如HP的OpenView和Nortel Networks的Optivity Network Management System,還有Multi Router Traffic Grapher(MRTG)之類的免費軟件,都用SNMP服務來簡化網(wǎng)絡的管理和維護。   

  由于SNMP的效果實在太好了,所以網(wǎng)絡硬件廠商開始把SNMP加入到它們制造的每一臺設備。今天,各種網(wǎng)絡設備上都可以看到默認啟用的SNMP服務,從交換機到路由器,從防火墻到網(wǎng)絡打印機,無一例外。僅僅是分布廣泛還不足以造成威脅,問題是許多廠商安裝的SNMP都采用了默認的通信字符串(例如密碼),這些通信字符串是程序獲取設備信息和修改配置必不可少的。采用默認通信字符串的好處是網(wǎng)絡上的軟件可以直接訪問設備,無需經(jīng)過復雜的配置。   

  通信字符串主要包含兩類命令:GET命令,SET命令。GET命令從設備讀取數(shù)據(jù),這些數(shù)據(jù)通常是操作參數(shù),例如連接狀態(tài)、接口名稱等。SET命令允許設置設備的某些參數(shù),這類功能一般有限制,例如關閉某個網(wǎng)絡接口、修改路由器參數(shù)等功能。但很顯然,GET、SET命令都可能被用于拒絕服務攻擊(DoS)和惡意修改網(wǎng)絡參數(shù)。   

  最常見的默認通信字符串是public(只讀)和private(讀/寫),除此之外還有許多廠商私有的默認通信字符串。幾乎所有運行SNMP的網(wǎng)絡設備上,都可以找到某種形式的默認通信字符串。   

  SNMP 2.0和SNMP 1.0的安全機制比較脆弱,通信不加密,所有通信字符串和數(shù)據(jù)都以明文形式發(fā)送。攻擊者一旦捕獲了網(wǎng)絡通信,就可以利用各種嗅探工具直接獲取通信字符串,即使用戶改變了通信字符串的默認值也無濟于事。   

  近幾年才出現(xiàn)的SNMP 3.0解決了一部分問題。為保護通信字符串,SNMP 3.0使用DES(Data Encryption Standard)算法加密數(shù)據(jù)通信;另外,SNMP 3.0還能夠用MD5和SHA(Secure Hash Algorithm)技術驗證節(jié)點的標識符,從而防止攻擊者冒充管理節(jié)點的身份操作網(wǎng)絡。   

  雖然SNMP 3.0出現(xiàn)已經(jīng)有一段時間了,但目前還沒有廣泛應用。如果設備是2、3年前的產(chǎn)品,很可能根本不支持SNMP 3.0;甚至有些較新的設備也只有SNMP 2.0或SNMP 1.0。即使設備已經(jīng)支持SNMP 3.0,許多廠商使用的還是標準的通信字符串,這些字符串對黑客組織來說根本不是秘密。因此,雖然SNMP 3.0比以前的版本提供了更多的安全特性,如果配置不當,其實際效果仍舊有限。    

  〖二、禁用SNMP〗   

  要避免SNMP服務帶來的安全風險,最徹底的辦法是禁用SNMP。如果你沒有用SNMP來管理網(wǎng)絡,那就沒有必要運行它;如果你不清楚是否有必要運行SNMP,很可能實際上不需要。即使你打算以后使用SNMP,只要現(xiàn)在沒有用,也應該先禁用SNMP,直到確實需要使用SNMP時才啟用它。   

  下面列出了如何在常見的平臺上禁用SNMP服務。    

  ■ Windows XP和Windows 2000   在XP和Win 2K中,右擊“我的電腦”,選擇“管理”。展開“服務和應用程序”、“服務”,從服務的清單中選擇SNMP服務,停止該服務。然后打開服務的“屬性”對話框,將啟動類型該為“禁用”(按照微軟的默認設置,Win 2K/XP默認不安裝SNMP服務,但許多軟件會自動安裝該服務)。    

  ■ Windows NT 4.0   選擇“開始”→“設置”,打開服務設置程序,在服務清單中選擇SNMP服務,停止該服務,然后將它的啟動類型該為禁用。    

  ■ Windows 9x  打開控制面板的網(wǎng)絡設置程序,在“配置”頁中,從已安裝的組件清單中選擇“Microsoft SNMP代理”,點擊“刪除”。檢查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices和HKEY_LOCAL_MACHINE\ SOFTWARE\Microsoft\Windows\CurrentVersion\Run注冊鍵,確認不存在snmp.exe。    

  ■ Cisco Systems硬件  對于Cisco的網(wǎng)絡硬件,執(zhí)行“no SNMP-server”命令禁用SNMP服務。如果要檢查SNMP是否關閉,可執(zhí)行“show SNMP”命令。這些命令只適用于運行Cisco IOS的平臺;對于非IOS的Cisco設備,請參考隨機文檔。    

  ■ HP硬件   對于所有使用JetDirect卡(絕大部分HP網(wǎng)絡打印機都使用它)的HP網(wǎng)絡設備,用telnet連接到JetDirect卡的IP地址,然后執(zhí)行下面的命令:SNMP-config: 0   quit這些命令將關閉設備的SNMP服務。但必須注意的是,禁用SNMP服務會影響服務的發(fā)現(xiàn)操作以及利用SNMP獲取設備狀態(tài)的端口監(jiān)視機制。    

  ■ Red Hat Linux  對于Red Hat Linux,可以用Linuxconf工具從自動啟動的服務清單中刪除SNMP,或者直接從/etc/services文件刪除啟動SNMP的行。對于其他Linux系統(tǒng),操作方法應該也相似。    

  〖三、保障SNMP的安全〗   

  如果某些設備確實有必要運行SNMP,則必須保障這些設備的安全。首先要做的是確定哪些設備正在運行SNMP服務。除非定期對整個網(wǎng)絡進行端口掃描,全面掌握各臺機器、設備上運行的服務,否則的話,很有可能遺漏一、二個SNMP服務。特別需要注意的是,網(wǎng)絡交換機、打印機之類的設備同樣也會運行SNMP服務。確定SNMP服務的運行情況后,再采取下面的措施保障服務安全。    

  ■ 加載SNMP服務的補丁   

  安裝SNMP服務的補丁,將SNMP服務升級到2.0或更高的版本。聯(lián)系設備的制造商,了解有關安全漏洞和升級補丁的情況。    

  ■ 保護SNMP通信字符串   

  一個很重要的保護措施是修改所有默認的通信字符串。根據(jù)設備文檔的說明,逐一檢查、修改各個標準的、非標準的通信字符串,不要遺漏任何一項,必要時可以聯(lián)系制造商獲取詳細的說明。    

  ■ 過濾SNMP   

  另一個可以采用的保護措施是在網(wǎng)絡邊界上過濾SNMP通信和請求,即在防火墻或邊界路由器上,阻塞SNMP請求使用的端口。標準的SNMP服務使用161和162端口,廠商私有的實現(xiàn)一般使用199、391、705和1993端口。禁用這些端口通信后,外部網(wǎng)絡訪問內部網(wǎng)絡的能力就受到了限制;另外,在內部網(wǎng)絡的路由器上,應該編寫一個ACL,只允許某個特定的可信任的SNMP管理系統(tǒng)操作SNMP。例如,下面的ACL只允許來自(或者走向)SNMP管理系統(tǒng)的SNMP通信,限制網(wǎng)絡上的所有其他SNMP通信:access-list 100 permit ip host w.x.y any   access-list 100 deny udp any any eq snmp access-list 100 deny udp any any eq snmptrap access-list 100 permit ip any any 這個ACL的第一行定義了可信任管理系統(tǒng)(w.x.y)。利用下面的命令可以將上述ACL應用到所有網(wǎng)絡接口:interface serial 0   ip access-group 100 in   

  總之,SNMP的發(fā)明代表著網(wǎng)絡管理的一大進步,現(xiàn)在它仍是高效管理大型網(wǎng)絡的有力工具。然而,SNMP的早期版本天生缺乏安全性,即使最新的版本同樣也存在問題。就象網(wǎng)絡上運行的其他服務一樣,SNMP服務的安全性也是不可忽視的。不要盲目地肯定網(wǎng)絡上沒有運行SNMP服務,也許它就躲藏在某個設備上。那些必不可少的網(wǎng)絡服務已經(jīng)有太多讓人擔憂的安全問題,所以最好關閉SNMP之類并非必需的服務——至少盡量設法保障其安全。

  【SNMP數(shù)據(jù)】

  SNMP 1.0規(guī)定了5種協(xié)議數(shù)據(jù)單元PDU(也就是SNMP報文),用來在管理進程和代理之間的交換。   

  get-request操作:從代理進程處提取一個或多個參數(shù)值get-next-request操作:從代理進程處提取緊跟當前參數(shù)值的下一個參數(shù)值set-request操作:設置代理進程的一個或多個參數(shù)值get-response操作:返回的一個或多個參數(shù)值。這個操作是由代理進程發(fā)出的,它是前面三種操作的響應操作。trap操作:代理進程主動發(fā)出的報文,通知管理進程有某些事情發(fā)生。   

      

圖1 SNMP的5種報文操作  

前面的3種操作是由管理進程向代理進程發(fā)出的,后面的2個操作是代理進程發(fā)給管理進程的,為了簡化起見,前面3個操作今后叫做get、get-next和set操作。圖1描述了SNMP的這5種圖2 SNMP報文格式報文操作。請注意,在代理進程端是用熟知端口161來接收get或set報文,而在管理進程端是用熟知端口162來接收trap報文。

圖2是封裝成UDP數(shù)據(jù)報的5種操作的SNMP報文格式。

可見一個SNMP報文共有三個部分組成,即公共SNMP首部、get/set首部trap首部、變量綁定。

  〖公共SNMP首部〗   

  ■ 版本   

  寫入版本字段的是版本號減1,對于SNMP(即SNMPV1)則應寫入0。

  ■共同體(community)   

  共同體就是一個字符串,作為管理進程和代理進程之間的明文口令,常用的是6個字符“public”。

表1 PDU類型     

  〖PDU類型〗 根據(jù)PDU的類型,填入0~4中的一個數(shù)字,其對應關系如表1所示意圖。

  〖get/set首部〗      

  ■請求標識符(request ID)   

  這是由管理進程設置的一個整數(shù)值。代理進程在發(fā)送get-response報文時也要返回此請求標識符。管理進程可同時向許多代理發(fā)出get報文,這些報文都使用UDP傳送,先發(fā)送的有可能后到達。設置了請求標識符可使管理進程能夠識別返回的響應報文對于哪一個請求報文。

   

表2 差錯狀態(tài)描述

  ■差錯狀態(tài)(error status)   

  由代理進程回答時填入0~5中的一個數(shù)字,見表2的描述。   

  ■ 差錯索引(error index)   

  當出現(xiàn)noSuchName、badValue或readOnly的差錯時,由代理進程在回答時設置的一個整數(shù),它指明有差錯的變量在變量列表中的偏移。   

  〖trap首部〗      

  ■企業(yè)(enterprise)   

  填入trap報文的網(wǎng)絡設備的對象標識符。此對象標識符肯定是在圖3的對象命名樹上的enterprise結點{1.3.6.1.4.1}下面的一棵子表3 trap類型樹上。  

 

表3 trap類型

  〖trap類型〗   

  此字段正式的名稱是generic-trap,共分為表3中的7種。   

  類型2、3、5時,在報文后面變量部分的第一個變量應標識響應的接口。      

  ■特定代碼(specific-code) 指明代理自定義的時間(若trap類型為6),否則為0。      
  ■ 時間戳(timestamp) 指明自代理進程初始化到trap報告的事件發(fā)生所經(jīng)歷的時間,單位為ms。例如時間戳為1908表明在代理初始化后1908ms發(fā)生了該事件。   

  ■變量綁定(variable-bindings) 指明一個或多個變量的名和對應的值。在get或get-next報文中,變量的值應忽略。

  【SNMP發(fā)展】 

  簡單網(wǎng)絡管理協(xié)議(SNMP)是目前TCP/IP網(wǎng)絡中應用最為廣泛的網(wǎng)絡管理協(xié)議。1990年5月,RFC1157定義了SNMP(simplenetworkmanagementprotocol)的第一個版本SNMPv1。RFC1157和另一個關于管理信息的文件RFC1155一起,提供了一種監(jiān)控和管理計算機網(wǎng)絡的系統(tǒng)方法。因此,SNMP得到了廣泛應用,并成為網(wǎng)絡管理的事實上的標準。   

  SNMP在90年代初得到了迅猛發(fā)展,同時也暴露出了明顯的不足,如,難以實現(xiàn)大量的數(shù)據(jù)傳輸,缺少身份驗證(Authentication)和加密(Privacy)機制。因此,1993年發(fā)布了SNMPv2,具有以下特點:支持分布式網(wǎng)絡管理、擴展了數(shù)據(jù)類型、可以實現(xiàn)大量數(shù)據(jù)的同時傳輸,提高了效率和性能、豐富了故障處理能力、增加了集合處理功能、加強了數(shù)據(jù)定義語言。

  【管理信息庫】

 

 圖3 管理信息庫的對象命名舉例  

  管理信息庫MIB指明了網(wǎng)絡元素所維持的變量(即能夠被管理進程查詢和設置的信息)。MIB給出了一個網(wǎng)絡中所有可能的被管理對象的集合的數(shù)據(jù)結構。SNMP的管理信息庫采用和域名系統(tǒng)DNS相似的樹型結構,它的根在最上面,根沒有名字。圖3畫的是管理信息庫的一部分,它又稱為對象命名(objectnamingtree)。   

  對象命名樹的頂級對象有三個,即ISO、ITU-T和這兩個組織的聯(lián)合體。在ISO的下面有4個結點,其中的一個(標號3)是被標識的組織。在其下面有一個美國國防部(Department of Defense)的子樹(標號是6),再下面就是Internet(標號是1)。在只討論Internet中的對象時,可只畫出Internet以下的子樹(圖中帶陰影的虛線方框),并在Internet結點旁邊標注上{1.3.6.1}即可。表4 最初的結點mib管理的信息類別  在Internet結點下面的第二個結點是mgmt(管理),標號是2。再下面是管理信息庫,原先的結點名是mib。1991年定義了新的版本MIB-II,故結點名現(xiàn)改為mib-2,其標識為{1.3.6.1.2.1},或{Internet(1) .2.1}。這種標識為對象標識符。  

 

表4 最初的結點mib管理的信息類別

  最初的結點mib將其所管理的信息分為8個類別,見表4?,F(xiàn)在de mib-2所包含的信息類別已超過40個。應當指出,MIB的定義與具體的網(wǎng)絡管理協(xié)議無關,這對于廠商和用戶都有利。廠商可以在產(chǎn)品(如路由器)中包含SNMP代理軟件,并保證在定義新的MIB項目后該軟件仍遵守標準。用戶可以使用同一網(wǎng)絡管理客戶軟件來管理具有不同版本的MIB的多個路由器。當然,一個沒有新的MIB項目的路由器不能提供這些項目的信息。這里要提一下MIB中的對象{1.3.6.1.4.1},即enterprises(企業(yè)),其所屬結點數(shù)已超過3000。例如IBM為11.3.6.1.4.1.2},Cisco為{1.3.6.1.4.1.9},Novell為{1.3.6.1.4.1.23}等。

  【SNMP的運行過程】

  駐留在被管設備上的AGENT從UDP端口161接受來自網(wǎng)管站的串行化報文,經(jīng)解碼、團體名驗證、分析得到管理變量在MIB樹中對應的節(jié)點,從相應的模塊中得到管理變量的值,再形成響應報文,編碼發(fā)送回網(wǎng)管站。網(wǎng)管站得到響應報文后,再經(jīng)同樣的處理,最終顯示結果。

  下面根據(jù)RFC1157詳細介紹Agent接受到報文后采取的動作:首先解碼生成用內部數(shù)據(jù)結構表示的報文,解碼依據(jù)ASN.1的基本編碼規(guī)則,如果在此過程中出現(xiàn)錯誤導致解碼失敗則丟棄該報文,不做進一步處理。第二步:將報文中的版本號取出,如果與本Agent支持的SNMP版本不一致,則丟棄該報文,不做進一步處理。當前北研的數(shù)據(jù)通信產(chǎn)品只支持SNMP版本1。第三步:將報文中的團體名取出,此團體名由發(fā)出請求的網(wǎng)管站填寫。如與本設備認可的團體名不符,則丟棄該報文,不做進一步處理,同時產(chǎn)生一個陷阱報文。SNMPv1只提供了較弱的安全措施,在版本3中這一功能將大大加強。第四步:從通過驗證的ASN.1對象中提出協(xié)議數(shù)據(jù)單元PDU,如果失敗,丟棄報文,不做進一步處理。否則處理PDU,結果將產(chǎn)生一個報文,該報文的發(fā)送目的地址應同收到報文的源地址一致。

  【SNMP的常用程序開發(fā)】

  Agent:NetSNMP 、Agent++ 、 MG-soft、solarwind   管理端: winsnmp—windows自帶的SNMP庫;   

  snmp4j— JAVA版本的SNMP協(xié)議棧;   

  ObjectSNMP—面向對象的java snmp開發(fā)包;O/M Mapping技術。

  Linux/Unix下的Snmp工具包:net-snmp


內容來自百科網(wǎng)